一个通用的plc通讯程序:
main:
ld sm0.1
movb xxx , smb30 //根据和对方约定的波特率,字符格式等设定
movb 16#9c, smb87 //允许接收信息,使用smb90值检察空闲状态,定时器是信息定时器 , 超过smw92值停止接收
movw +80, smw92 //根据报文长短,波特率及从站响应的快慢设定,这个时间要小于接收中断(int3)里定时中断的时间。
movw +0, smw90
movb 200, smb94 //smw94 最大接收字符数,这里无用,但必须要设置。
eni
ld sm0.1
atch 接收:int3, 9 //传输完成中断
movb 150, smb34
atch 发送:int2, 10 //定时中断
发送:
ld sm0.0
dtch 10
xmt vb100, 0
接收:
ld sm0.0
rcv vb200, 0
movb 250, smb34
atch 发送:int2, 10
1 本程序只适用于单从站的问答式规约(包括modbus)。该程序为主站程序。
2 发送的数据放置在数据块,比如读取从站地址为16#12的寄存器的数据。校验提前算好,减轻plc负担。
vb100 16#8 16#12 16#03 16#00 16#0a 16#00 16#02 16#e6 16#aa
3 不用考虑起始字符 结束字符等等,以下是通讯流程图,不论从站有无故障,询问不受影响。
4 9600波特率,从站回复13字节
5 校验程序可以放在主程序里,
有时间再发一个多从站的程序,程序大小和这个基本程序不变。