三菱PLC的MODBUS RTU的CRC計算程序編寫,通訊必須掌握

上一章我們介紹了MODBUS協議中的RTU數據模式中的CRC校驗碼的計算原理,為了方便在PLC中完成通訊控制,今天我們說下PLC中CRC校驗碼程序的編寫。

首先,原理在上一章講到了,我們利用三菱PLC梯形圖進行編寫,先看下流程圖:

三菱PLC的MODBUS RTU的CRC計算程序編寫,通訊必須掌握

CRC計算流程圖

從上圖中發現,有兩個循環過程,即單個數據的CRC的計算,主要是對首個數據的CRC暫存器進行8次移位運算,另一個大循環是所有數據的運算(先運算完一個8位數據的CRC,下一個數據與這個CRC進行運算),這樣把所有數據都計算完成後即可得到CRC校驗碼。

按照流程圖步驟進行編寫:

1、初始CRC值:FFFFH,為了方便移位,我們採用位組成的方式來表示CRC暫存器: K4M0,

採用變址寄存器V對數據進行依次運算,大的循環次數要根據傳輸數據的個數來決定,小的循環(單個數據的CRC)移位8次就循環8次,將數據初始化。

基本框架如下:

三菱PLC的MODBUS RTU的CRC計算程序編寫,通訊必須掌握

數據初始化

三菱PLC的MODBUS RTU的CRC計算程序編寫,通訊必須掌握

程序整體框架

2、小循環單個數據的CRC

三菱PLC的MODBUS RTU的CRC計算程序編寫,通訊必須掌握

小循環單個數據的CRC計算

首先將M100復位是為了後面的高位補零用,SFTR指令是位右移指令,表示對M0為起始位置的16數據右移1位置,高位用M100填補即高位補零,低位M0為移除的溢出數據即LSB。如果LSB=1,則需要把移位後的數據與A001H進行異或計算,結果保存到CRC暫存器K4M0中,此時將覆蓋原來的K4M0中的數據,在這裡需要跳轉指令CJ跳過LSB=0的情況。。如果LSB=0,只要把移位後的數據放入CRC暫存器中即可。

這樣首個數據就運算完成,進行下一個數據的運算(大循環)。

3、CRC校驗碼

全部數據運算完成後,我們要對暫存器進行高低8位調換,將CRC校驗碼的高位存放到D100,低位存放發到D102中。至此CRC校驗碼計算完成。

如果覺得麻煩,在FX3U中有現成的CRC計算指令CRC S D n,S代表要計算的數據的起始編號,D為CRC校驗碼保存的數據寄存器,n表示數據個數。

三菱PLC的MODBUS RTU的CRC計算程序編寫,通訊必須掌握

CRC指令

下面看下仿真結果:

我們用CRC在線計算器看下結果與PLC程序結果進行對比:

三菱PLC的MODBUS RTU的CRC計算程序編寫,通訊必須掌握

CRC計算器結果

三菱PLC的MODBUS RTU的CRC計算程序編寫,通訊必須掌握

PLC計算結果

三菱PLC的MODBUS RTU的CRC計算程序編寫,通訊必須掌握

PLC計算結果

三菱PLC的MODBUS RTU的CRC計算程序編寫,通訊必須掌握

PLC計算結果

不清楚的留言或私信。


分享到:


相關文章: