CRC校验计算子程序

用CP340做modbus通讯,请问s7-300库里有CRC校验计算的子程序吗?是哪个,各位大侠那个有能发个给我参考下,谢谢。还有就是如果用CP341来做是否就不要这个CRC了,知道的大侠能详细说下,第一次接触cp340、cp341,谢谢!

最佳答案

300库中没有CRC库,需要自己编写
我曾经写过一个,一直用在项目中,我做成了文档放在百度文库上,楼主可参考:
http://wenku.baidu.com/view/d087590d7cd184254b353596.htm

VAR_INPUT
   DB_NO : INT ; 
   DBB_Start : INT ; 
   DBB_Counts : INT ; 
 END_VAR
 VAR_OUTPUT
   CRC_H : BYTE ; 
   CRC_L : BYTE ; 
 END_VAR
 VAR_TEMP
   CRC_REG : WORD ; 
   DB_NO_TEMP : INT ; 
   BytesChecked : INT ; 
   BitsChecked : INT ; 
 END_VAR
 BEGIN
 NETWORK
 TITLE =
 
       L     W#16#FFFF; 
       T     #CRC_REG; //预置CRC寄存器
       L     #DB_NO; 
       T     #DB_NO_TEMP; 
       OPN   DB [#DB_NO_TEMP]; 
       L     #DBB_Start; //读入校验起始字节
       SLD   3; 
       LAR1  ; 
 
       L     #DBB_Counts; //读入校验字节数量
 _A:   T     #BytesChecked; //字节处理循环
       L     DBB [AR1,P#0.0]; 
       L     LB     1; 
       XOW   ; 
       T     LB     1; 
 
       L     8; 
 _B:   T     #BitsChecked; //位处理循环
       L     #CRC_REG; 
       SRW   1; 
       T     #CRC_REG; 
       JZ    _C; //检验移出位是否为1
       L     #CRC_REG; 
       L     W#16#A001; 
       XOW   ; 
       T     #CRC_REG; 
 
 _C:   L     #BitsChecked; //校验下个位
       LOOP  _B; 
 
       +AR1  P#1.0; //校验下个字节
       L     #BytesChecked; 
       LOOP  _A; 
 
       L     LB     1; //输出校验码
       T     #CRC_H; 
       L     LB     0; 
       T     #CRC_L; 
 END_FUNCTION

建议你采用CP340+CRC来实现,既提高自己编程能力,又能节省成本,何乐而不为呢

提问者对于答案的评价:
谢谢。

专家置评

已阅,最佳答案正确。

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc245169.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2018年12月1日
下一篇 2018年12月1日

相关推荐