三菱PLC中的LRC校驗碼程式的編寫,在PLC與裝置進行通訊時採用MODBUS協議時,一般會有兩種資料模式,1是RTU模式,2是ASCII碼模式。RTU的資料傳輸採用CRC校驗,而ASCII碼則採用LRC校驗值。LRC值校驗涵蓋從從機地址到資料的資訊部分,校驗和等於所有參與校驗資料的字元和的補碼。
我們先說下具體的校驗碼怎麼計算,然後說三菱PLC的LRC校驗碼程式的編寫。
例子1
採用ASCII碼模式控制變頻器指令:01 03 21 00 00 01,這條指令中01一般是站號,03是讀取命令,2100是引數地址(例如執行頻率),00 01代表資料的個數。那麼它的LRC校驗碼怎麼計算:指令的資料是16進位制的,和為:0x01+0x03+0x21+0x01=0x26,對0x25取2的補碼就是DA,具體計算就是取反加1,如:0x26=B0010,0110,取反後得到B1101,1001,加1得到B11011010=0xDA,那麼LRC校驗碼就是DA。
例子2
同樣的控制變頻器指令:03 06 00 03 27 10, 和為0x43,取反加1為0xBD,LRC校驗值就是BD。
明白了它的計算過程接下來我們在PLC編寫它的演算法,我們知道在PLC的運算中都是十進位制的,為了方便轉換和計算,可採取另外一種方法(原理一樣),我們知道ASCII碼是2位的16進位制數,取反過程可看做0xFF減去檢驗總和如上述的0x26、0x43,加1就變成0x100減去檢驗總和,轉換成10進位制的就是256(D)-和(D),再經過ASCI指令轉換成ACIIS碼就可以了。以下面梯形圖進行說明:
使用RS指令向變頻器傳送命令,01 03 33 03 00 01,轉換成16進位制01 03 21 03 00 01這是一個讀取頻率的指令,LRC校驗碼的運算梯形圖:
使用一個變址暫存器Z0對資料D201到D206進行累加求和D40,最後用K256減去41就是LRC校驗碼215,透過ASCI指令轉換成ASCII碼,透過檢視擴充套件ASCII碼錶:
215的16進製為D7,與01+03 +21+ 03+ 00 +01=0x29=B00101001,取反加1得到11010111=0x(D7),結果一致。
三菱PLC中的LRC校驗碼程式的編寫,在PLC與裝置進行通訊時採用MODBUS協議時,一般會有兩種資料模式,1是RTU模式,2是ASCII碼模式。RTU的資料傳輸採用CRC校驗,而ASCII碼則採用LRC校驗值。LRC值校驗涵蓋從從機地址到資料的資訊部分,校驗和等於所有參與校驗資料的字元和的補碼。
我們先說下具體的校驗碼怎麼計算,然後說三菱PLC的LRC校驗碼程式的編寫。
例子1
採用ASCII碼模式控制變頻器指令:01 03 21 00 00 01,這條指令中01一般是站號,03是讀取命令,2100是引數地址(例如執行頻率),00 01代表資料的個數。那麼它的LRC校驗碼怎麼計算:指令的資料是16進位制的,和為:0x01+0x03+0x21+0x01=0x26,對0x25取2的補碼就是DA,具體計算就是取反加1,如:0x26=B0010,0110,取反後得到B1101,1001,加1得到B11011010=0xDA,那麼LRC校驗碼就是DA。
例子2
同樣的控制變頻器指令:03 06 00 03 27 10, 和為0x43,取反加1為0xBD,LRC校驗值就是BD。
明白了它的計算過程接下來我們在PLC編寫它的演算法,我們知道在PLC的運算中都是十進位制的,為了方便轉換和計算,可採取另外一種方法(原理一樣),我們知道ASCII碼是2位的16進位制數,取反過程可看做0xFF減去檢驗總和如上述的0x26、0x43,加1就變成0x100減去檢驗總和,轉換成10進位制的就是256(D)-和(D),再經過ASCI指令轉換成ACIIS碼就可以了。以下面梯形圖進行說明:
使用RS指令向變頻器傳送命令,01 03 33 03 00 01,轉換成16進位制01 03 21 03 00 01這是一個讀取頻率的指令,LRC校驗碼的運算梯形圖:
使用一個變址暫存器Z0對資料D201到D206進行累加求和D40,最後用K256減去41就是LRC校驗碼215,透過ASCI指令轉換成ASCII碼,透過檢視擴充套件ASCII碼錶:
215的16進製為D7,與01+03 +21+ 03+ 00 +01=0x29=B00101001,取反加1得到11010111=0x(D7),結果一致。