PLC与上位机之间半双工串口通讯接收与发送的转换

我现在要让西门子PLC与上位机进行通讯,达到六个条件时PLC分别发送信息给上位机,发送完第四个时,要等待接收上位机返回的信息,再发送后两个。由于PLC为半双工,我不知道什么时候接收或发送,怎样发送或接收。有哪位高手帮忙解释一下,或发个简短的S7-200程序。邮箱[email protected]

第1个回答  2012-03-08
采用自由通讯口方式,发送完毕后置为接收状态。追问

接收后呢?我还要再继续发送,就是不知道咋样做才能转换。

第2个回答  2012-03-10
接收后也要关中断,你是不是关完中断,转发送的时候没开中断啊
这个肯定没问题,好几年前做过的,绝对行追问

转发送时开中断是在关完接收中断紧接着还是初始化一起?

追答

发送完和接收完都要开中断,进入中断后关中断

第3个回答  2012-03-07
这个要做接收中断的,
PLC发送很简单,接收就难了,你这样搞会冲突的。追问

我发送都做好了,加上接收后发送都不行了。

追答

NETWORK 1 // 主程序
LD SM0.1 // 首次扫描时,
MOVB 16#09 SMB30 // 初始化自由端口:
// - 选择9600波特
// - 选择8个数据位
// - 选择无校验
MOVB 16#B0 SMB87 // 初始化RCV信息控制字节:
// - RCV被启用
// - 检测到信息字符结束
// - 将空闲行条件检测为
// 信息开始条件。

MOVB 16#0A SMB89 // 将信息字符结束设为hex OA(换行符)。
MOVW +5 SMW90 // 将空闲行超时设为5毫秒。
MOVB 100 SMB94 // 将最大字符数设为100。
ATCH INT_0 23 // 将中断附加在接收完成事件上。
ATCH INT_2 9 // 将中断2附加在传送完成事件上。
ENI // 启用用户中断
RCV VB100 0 // 为端口0在VB100位置启用带缓冲区的接收方框

NETWORK 1 // 中断0
// 接收完成中断例行程序
LDB= SMB86 16#20 // 如果接收状态显示接收结束字符,
MOVB 10 SMB34 // 则附加一个10毫秒计时器,
ATCH INT_1 10 // 触发传送

CRETI // 并返回。

NOT
RCV VB100 0 // 如果因任何其他原因接收完成,
// 则开始新的接收。

NETWORK 1 // 中断1
// 10毫秒计时器中断
LD SM0.0
DTCH 10 // 分离计时器中断
XMT VB100 0 // 将信息传送回端口0中的用户

=================================================

关于特殊寄存器请看手册

给分啊

追问

你给我的就是书上一样的,咋给你分啊?

第4个回答  2012-03-19
在刚开始初始化时不能接收,我当时做得是先发送完到需要接收时在调用接收通信,一定要定义好接收的结束字符,才能继续发送。先试下,一般网上的通信程序都是先接收再发送的,给了我很多误导,在书上多理解下就可以。不懂可以接着问。本回答被提问者采纳
第5个回答  2012-03-07
已发送,忘采纳!追问

我看了,应该是你做的项目吧,我也有好多那样的例子,但还是不能解决问题。我发送都做好了,中间有个接收,好像就不能再发送了,不知道怎样从接收切换到发送上。

第6个回答  2012-03-08
来做任务的
相似回答