“自由通訊”的意思是:上位可以依據(jù)下位給出的協(xié)議,按照該協(xié)議對(duì)下位進(jìn)行存取操作。用在觸摸屏或者
永宏P(guān)LC上就是:通訊命令完全交由宏指令(對(duì)HMI而言)或者梯形圖(對(duì)PLC而言)來完成。
這里要舉的例子就是用
永宏P(guān)LC自由通訊(FUN151 MD1模式)實(shí)現(xiàn)對(duì)MODBUS_RTU通訊(MODBUS_RTU協(xié)議內(nèi)容網(wǎng)上可以下載)。我覺得RTU的比較難的在于CRC校驗(yàn)的實(shí)現(xiàn),當(dāng)然永宏本身是有 CRC16 指令的,這樣可以省去CRC生成算法,但在一些沒有CRC指令的永宏P(guān)LC上面,就需要自己編寫了,這里來編寫CRC算法。
CRC算法說明,大概就是下面這幾個(gè)意思:
1.設(shè)置CRC寄存器,并給其賦值FFFF(hex)。
2.將數(shù)據(jù)的第一個(gè)8-bit字符與16位CRC寄存器的低8位進(jìn)行異或,并把結(jié)果存入CRC寄存器。
3.CRC寄存器向右移一位,MSB補(bǔ)零,移出并檢查LSB。
4.如果LSB為0,重復(fù)第三步;若LSB為1,CRC寄存器與多項(xiàng)式碼相異或。
5.重復(fù)第3與第4步直到8次移位全部完成。此時(shí)一個(gè)8-bit數(shù)據(jù)處理完畢。
6.重復(fù)第2至第5步直到所有數(shù)據(jù)全部處理完成,最終CRC寄存器的內(nèi)容即為CRC值。