登录
首页 PLC论坛 西门子SIEMENS
回帖 发帖
正文

主题:[原创]SCL写的CRC校验

点击:1586 回复:3

FUNCTION FC300: VOID
VAR_INPUT
  Source:ARRAY[0..19] OF BYTE;
  Number:INT;  
END_VAR
VAR_OUTPUT
    CrcHigh,CrcLow:BYTE;
   
END_VAR
 
VAR_TEMP
     Crc16Low, Crc16High, CLow, CHigh:BYTE;
     SaveLow, SaveHigh:BYTE;
     i, j:INT;
END_VAR
BEGIN
   Crc16Low:=B#16#FF;
   CRC16High:=B#16#FF;
   CLow:=B#16#1;
   CHigh:=B#16#A0;
   
 FOR i:= 0 TO Number-1 BY 1 DO
  Crc16Low:= Crc16Low XOR Source[i];
     
         FOR j:= 0 TO 7 BY 1 DO
              SaveHigh:= Crc16High;
              SaveLow:= Crc16Low;
              Crc16High:=SHR(IN:=Crc16High,N:=1);
              Crc16Low:=SHR(IN:=Crc16Low,N:=1);
                  IF ((SaveHigh AND 2#1)=2#1) THEN
                      Crc16Low:= Crc16Low OR 2#10000000;
                   END_IF;
                  IF ((SaveLow AND 2#1) = 2#1) THEN   //如果LSB为1,则与多项式码进行异或
                               CRC16High:= CRC16High XOR CHigh;
                               Crc16Low:= Crc16Low XOR CLow;
                   END_IF;              
                 
          END_FOR;
       
 END_FOR;
 
    CrcHigh:=Crc16High;
    CrcLow:=Crc16Low;
END_FUNCTION
对SCL有兴趣的朋友交流
MSN:yncxm@hotmail.com
06-01-15 11:10
你可以以word的方式去移位和做XOR操作的,这样中间的循环中的判断可以简单一些。
想问个问题:300中的一个WORD的高低8位交换,可以有一句命令实现吗?还有,300的命令中有没有可以进行指针操作的指令?
我们公司没法开MSN,我的Mail:dixinke@163.com
06-01-19 08:59
300中的一个WORD的高低8位交换
在SCL中可以循环移八位:EX:  
  result:=rol(in:=word#2#1111_1111_1111_1111,n:=8);
06-01-20 19:46
专业提供国内大品牌变频器生产技术、交流伺服控制器生产技术;
以成熟稳定的产品为基础再次开发,可以快速使产品面世,收回投资成本,软硬件技术开发工程师提供技术支持,减少创业风险,助你快速盈利。
联系电话:13823137464
联系人:荣先生  
QQ邮箱:2512262471@qq.com
13-09-18 17:12

工控新闻

更多新闻资讯