发布于 2004-07-30 16:48:06
0楼
对于Modbus-RTU slave
对于端口0
初始化子程序:
LD SM0.0
MOVB 9, SMB30 //0口"9600,N,8,1"
LD SM0.0 //RCV指令初始化
MOVB 16#D4, SMB87
MOVB 本站PLC地址, SMB88
MOVW +6, SMW90 //对于9600bps,起始间隔时间为6ms
MOVW +6, SMW92 //对于9600bps,结束间隔时间为6ms
MOVB 最大字符数, SMB94
R SM87.2, 1
LD SM0.0
ATCH RCVcomplete, 23 //连接口0接收完成的中断
LD SM0.0
ATCH XMTcomplete, 9 //连接口0发送完成的中断
LD SM0.0
ENI //中断允许
以上是根据斑竹指点所做的MODBUS-RTU初始化子程序:
有以下几个问题还请斑竹指点:
1.既然MODBUS-RTU是以3.5个字符间隔为起始条件的,已经为SMW90送了时间,为何还要使能SMB88来检测起始信息.另SMW90,SMW92有是如何工作和清零的,PLC是如何检测空闲状态的.
2.当检测到SMB86,出现接收出错时,是否需复位RCV指令,R M87.7 1,待发送错误信息后在发送完成中断中再使能RCV指令,另
LD SM0.0 //停止端口0的接收
R SM87.7, 1
RCV VB100, 0
与 R M87.7 1两者效果是否一样!
请斑竹解答.谢谢!!!