西门子200SMART PLC CRC校验程序的编写
关注"PLC发烧友",一起涨知识吧!
导读: 在工作现场,经常会用到通讯与其它设备交互信息,而通讯必然会需要校验。而初学者学习MODBUS RTU的时候往往会纠结这个CRC校验程序如何编写?CRC校验程序相对来说比较繁琐,但是大家可以收藏好这个程序(使用200SMART PLC),加以理解,需要的时候调用此程序即可。
那首先我们来看CRC校验的步骤,严格按照步骤来写程序即可:
1、 设置CRC存储器为16#FFFF。
2、 把第一个参与校验的8位数与CRC的低八位进行异或运算结果仍存与CRC。
3、 把CRC右移一位,最高位补0,检查最低位b0位。
4、 若b0=0,CRC不变,若b0=1, CRC与16#A001进行异或运算,结果仍存与CRC。
5、 重复3、4两步,直到右移8次,这样第一个八位数就进行处理了结果仍然存于CRC。
6、 重复2-5步,处理第二个八位数。
【程序结构描述】
西门子S7-200SMART系列PLC的程序结构分为主程序、子程序、中断程序。此程序用“MAIN”程序调用“CRC校验程序”子程序
定义子程序变量表:如图1-0
子程序变量表定义图1-0
(1)“CRC校验程序”子程序,初始化存储器,并把16#FFFF装载到CRC寄存器中(定义AC0为CRC寄存器)。并利用FOR语句循环,循环的次数由LW4决定。程序如图1-1所示
图1-1初始化存储器
(2)取第一个地址与CRC寄存器做异或运算。并利用FOR语句循环,循环的次数为8,因为一个字节的数据是8个位。程序如图1-2所示
图1-2异或运算
(3)执行移位操作,并判断移出为的状态,若移出位为1,则在与16#A001做异或运算。程序如图1-3所示
图1-3执行移位操作
(4)利用指针,指针加1,指向下一个地址,取出下一个地址之后再进行重复以上步骤效验,直到数据都效验完,程序退出FOR循环。程序如图1-4所示
图1-4指针加1
(5)对计算结果进行高低字节交换,把结果输出。程序如图1-5所示
图1-5高低字节交换
(6)在“MAIN”程序中通过按钮的触发调用“CRC校验程序”子程序。
验证一: 写入数据到VB0至VB5中,CRC效验值存储在VW100中
CRC效验计算小助手(与程序中计算相符):
验证二: 写入数据到VB0至VB5中,CRC效验值存储在VW100中
CRC效验计算小助手计算(与程序中计算相符):
来源:PLC发烧友,作者:技成培训-郭彪。转载请注明出处!评论处大家可以补充文章解释不对或欠缺的部分,这样下一个看到的人会学到更多,你知道的正是大家需要的。。。
看看PLC大神是怎么编CRC校验程序的
【程序结构描述】
西门子S7-200SMART系列PLC的程序结构分为主程序、子程序、中断程序。此程序用“MAIN”程序调用“CRC校验程序”子程序
定义子程序变量表:如图1-0
子程序变量表定义图1-0
(1)“CRC校验程序”子程序,初始化存储器,并把16#FFFF装载到CRC寄存器中(定义AC0为CRC寄存器)。并利用FOR语句循环,循环的次数由LW4决定。程序如图1-1所示
图1-1初始化存储器
(2)取第一个地址与CRC寄存器做异或运算。并利用FOR语句循环,循环的次数为8,因为一个字节的数据是8个位。程序如图1-2所示
图1-2异或运算
(3)执行移位操作,并判断移出为的状态,若移出位为1,则在与16#A001做异或运算。程序如图1-3所示
图1-3执行移位操作
(4)利用指针,指针加1,指向下一个地址,取出下一个地址之后再进行重复以上步骤效验,直到数据都效验完,程序退出FOR循环。程序如图1-4所示
图1-4指针加1
(5)对计算结果进行高低字节交换,把结果输出。程序如图1-5所示
图1-5高低字节交换
(6)在“MAIN”程序中通过按钮的触发调用“CRC校验程序”子程序。
验证一: 写入数据到VB0至VB5中,CRC效验值存储在VW100中
CRC效验计算小助手(与程序中计算相符):
验证二: 写入数据到VB0至VB5中,CRC效验值存储在VW100中
CRC效验计算小助手计算(与程序中计算相符):
循环冗余校验码(CRC),简称循环码,是一种常用的、具有检错、纠错能力的校验码,在早期的通信中运用广泛。循环冗余校验码常用于外存储器和计算机同步通信的数据校验。奇偶校验码和海明校验码都是采用奇偶检测为手段检错和纠错的(奇偶校验码不具有纠错能力),而循环冗余校验则是通过某种数学运算来建立数据位和校验位的约定关系的。
循环冗余校验码(cyclic redundancy check)简称CRC(循环码),是一种能力相当强的检错、纠错码,并且实现编码和检码的电路比较简单,常用于串行传送(二进制位串沿一条信号线逐位传送)的辅助存储器与主机的数据通信和计算机网络中。
循环码是指通过某种数学运算实现有效信息与校验位之间的循环校验(而海明码是一种多重校验)。
这种编码基本思想是将要传送的信息M(X)表示为一个多项式L,用L除以一个预先确定的多项式G(X),得到的余式就是所需的循环冗余校验码。
这种校验又称多项式校验。
理论上可以证明循环冗余校验码的检错能力有以下特点:①可检测出所有奇数位错;②可检测出所有双比特的错;③可检测出所有小于、等于校验位长度的突发错。
相关问答
plc证书怎么考?
plc工程师证书是指可编程控制器工程师证书,考生需要经历考试报名、资格审核、费用缴纳等多个步骤,具体如下:1、考试报名向所在单位申请获得批准后,到当地考...
西门子200PLC的字符串的校验怎么做?
就是循环次数3。每次加上一个字符的ASC码,就累计一次循环次数4。当循环次数到了就跳出,得到了最终的总和5。最终的总和最后两位的数值转换成ASC码就是校验...
plc检测程序及流程?
PLC检测程序及流程可以分为以下几个步骤:1.确定检测目标:确定需要检测的PLC设备或系统,以及需要检测的问题或故障。2.准备检测工具:根据检测目标选择相应...
我用s7-1200,威纶触摸屏mt8101ie,导入标签时提示:plc不存在验证标签失败,哪位能告知怎么做吗?谢谢?
请问你那款mt8101ie跟西门子1200连接问题解决了没?我用了维纶v5.04这个版本的连接不上标签也导不进去,就电脑可以把编译好的画面下载到触摸屏,但是触摸屏就是...
plc在线修改程序怎么写入?
PLC(可编程逻辑控制器)的在线修改程序的方式取决于所使用的PLC品牌和型号。以下是一般的步骤:1.连接至PLC:使用PLC编程软件将您的计算机与PLC连接。通常,...
西门子s7200smart怎么实现不同奇偶校验通过同一口进行通信?
1、设置成一样的2、plcmodbus库程序校验码修改即可1、设置成一样的2、plcmodbus库程序校验码修改即可
s7-1500怎么测试plc有没有输出?
要测试S7-1500PLC是否有输出,可以通过以下步骤进行验证:首先,在PLC中编写一个简单的程序,例如,将一个输出点设为高电平。接着,使用PLC编程软件连接到PLC...
pLc是什么类型证书?
PLC(可编程逻辑控制器)证书是一种职业技能证书,主要用于认证从事PLC选型、编程、应用系统设计、集成和维护的人员。PLC证书分为初级、中级、高级和师资证,代...
codesys怎么设置模拟量输出?
1、可以用信号发生器输出4~20mA到PLC,一般校验仪表和调试程序都可以;2、用电阻箱接上热电阻变送模块模拟4~20mA输入到PLC;3、用具有变送输出功能或控制功...
plc工程师证书属于几级?
证书等级划分全国PLC认证的等级划分为初级、中级、高级和师资证。可编程序控制系统设计师是指从事可编程序控制器(PLC)选型、编程,并对应用系统进行设计...