一個(gè)通用的plc通訊程序:
main:
ld sm0.1
movb xxx , smb30 //根據(jù)和對(duì)方約定的波特率,字符格式等設(shè)定
movb 16#9c, smb87 //允許接收信息,使用smb90值檢察空閑狀態(tài),定時(shí)器是信息定時(shí)器 , 超過(guò)smw92值停止接收
movw +80, smw92 //根據(jù)報(bào)文長(zhǎng)短,波特率及從站響應(yīng)的快慢設(shè)定,這個(gè)時(shí)間要小于接收中斷(int3)里定時(shí)中斷的時(shí)間。
movw +0, smw90
movb 200, smb94 //smw94 最大接收字符數(shù),這里無(wú)用,但必須要設(shè)置。
eni
ld sm0.1
atch 接收:int3, 9 //傳輸完成中斷
movb 150, smb34
atch 發(fā)送:int2, 10 //定時(shí)中斷
發(fā)送:
ld sm0.0
dtch 10
xmt vb100, 0
接收:
ld sm0.0
rcv vb200, 0
movb 250, smb34
atch 發(fā)送:int2, 10
1 本程序只適用于單從站的問(wèn)答式規(guī)約(包括modbus)。該程序?yàn)橹髡境绦颉?br>2 發(fā)送的數(shù)據(jù)放置在數(shù)據(jù)塊,比如讀取從站地址為16#12的寄存器的數(shù)據(jù)。校驗(yàn)提前算好,減輕plc負(fù)擔(dān)。
vb100 16#8 16#12 16#03 16#00 16#0a 16#00 16#02 16#e6 16#aa
3 不用考慮起始字符 結(jié)束字符等等,以下是通訊流程圖,不論從站有無(wú)故障,詢問(wèn)不受影響。
4 9600波特率,從站回復(fù)13字節(jié)
5 校驗(yàn)程序可以放在主程序里,
有時(shí)間再發(fā)一個(gè)多從站的程序,程序大小和這個(gè)基本程序不變。