104 使用西门子¥7-300 PLC指针实现CRC, ̄6校验计算 使用西门子S7—300 PLC指针实现CRC 1 6校验计算 Use Siemens S7—300 PLC Pointer to Implement CRC 1 6 Checksum Calculation 郭海洋 (南京西格曼自动化实业有限公司,江苏南京210003) 摘 要 首先介绍了CRC16校验的移位算法,然后分析了西门子S7—300 PLC指针数据类型和ANY数据类型的结构和用法, 并使用这两种数据类型实现了CRC16校验码的计算。 关键词:S7—300,PLC,指针,CRC16 Abstract This paper introduces the shift algorithm of CRC16 checksum and analysis the structure and usage of S7—300 PLC pointer data type and ANY data type.then implement the calculation of CRC16 checksum with these data type. Keywords:S7—300,PLC,Pointer CRC16 西门子S7—300 PLC与支持Modbus RTU协议的设备通 3)判断当前CRC值的最低位,最低位如果为1,则将CRC 信,大多是通过串行通讯模块CP340或CP341完成的。西门子 提供了用于CP341串行通信模块的Modbus RTU主站和从站 软件,可实现Modbus RTU通讯。该软件需要和配套的硬件狗 一右移一位后再与16进制数0xA001异或,结果放于CRC;最低 位如果为O,则只将CRC右移一位。 4)重复第3步,直到完成8次移位计算。 5)指针所指字节如果不是报文最后一个字节,则指针继续 起使用,对于一些简单的Modbus通信应用来说成本较高。 Modbus RTU通信协议是一种开放的协议,可以通过普通的自 指向下一个字节,并从第2步循环,否则计算结束。 2指针类型和ANY类型 由口通信方式来实现,即直接使用CP340或CP341串行通信 模块提供的发送功能块FB8(P-SND_RK)和接收功能块FB7 上述CRC16校验码移位算法利用指针完成对报文所有字 节的循环计算,本文以S7—300 PLC为例,使用指针类型和 ANY类型实现同样的算法。首先对S7—3oo的指针类型和ANY 类型有个初步的了解。 2.1指针类型 (P RCV_RK)实现Modbus RTU报文的收发控制。而直接使用 发送、接收功能块进行Modbus RTU通讯时,需要解决动态生 成CRC16校验码的问题,即在PLC运行时根据不同的发送或 接收报文计算出相应的CRC16校验码,然后再与发送报文一 起发送、或与接收到的校验码进行比较。在S7—300 PLC中计 算CRC16校验码需要使用STL语句表编程,并了解指针类型 和ANY类型的用法。 2.1.1指针类型存储格式 指针类型占用6个字节的存储空间,其内容为指针所指寄 存器的描述信息,如图2所示。 {卜j 】:; 1 CRC16校验计算 CRC16校验有多种计算方法,我们以移位法为例,看一下 ModBus RTU协议CRC16校验码的计算流程。 假设需要发送或接收的报 b—I j" ji x-.1,11,1… ,1 文有n个字节,我们可以把它 当作一个字节(或字符)数组。 CRC16校验的目的就是将字 节1到字节n根据特定算法 计算出两个字节的校验码,然 16攀制值 ≥裔存嚣粪 曩 --璇氍 i b拳1 6粕1 } -% 辕 糯 Q i 麓萎 辙 蜘灞 瓣l8蛐8 i H 鬟 位辞存警1 嘲洲 萎一DBi 囊 警两嘲 ∥ 蝌85 DI穗 _蔓恻 i0 瓣l静86 L? … ■嚣罐国 蔓强 蠹 :图2 S7—300指针类型存储格式 后再和报文作为一个整体发送 出去、或是与收到的校验码进 行比较判断。 2,1.2使用指针类型 移位法计算CRC16校验 码的过程如下(流程图如图1)。 使用指针必须在语句表(STL)中编程,举例如下。 例1: OPN DB1 L P#DBXO 0 LAR1 L B#16#FF 1)假定校验码存放于变量 CRC(长度16位)中,首先将 CRC初始化为16进制值 0xFFFF,指针指向报文首字节。 2)将指针所指字节与CRC .■ -+ J //打开数据块DB1 //指针指向字节0的位0 //将指针值装入地址寄存器AR1 T B【AR1】 L W#16#FFFF //将16进制值0xFF送入DBB0 //将16进制值0xFFFF送入 RW2 //将指针指向下~个字节 T W【AR1.P#2 0] 图1 CRC16移位计算流程 +AR1 P#1 0 值异或,结果仍存放于CRC。 《工业控制计算机》2O10年第23卷第7期 例2: L P#8 7 LAR1 105 本例使用STEP7软件在FC1中编程,其参数表如表1所示。 ///] ̄载指针 //将指针值装入地址寄存器AR1 FC1程序清单如下: L W#16#FFFF A I【AR1.P#0 0】 Q[ARI,P#1 1] =//取I8_7状态(指针偏移O字节O位) //输出到Q10 0(指针偏移1字节1位) T #CRC //初始化CRC ㈨ 如果要指向的数据不是数据块类型,或是数据块已通过 OPN指令打开,那么只需要使用4个字节(双字)就可表示一个 L LAR1 P#}}MSG_ l工 //取ANY型数据MSG的地址 //将地址装人AR1 L 5字节) T W[AR1,P#4.0]//获取数据块号(ANY型数据的第4、 #DBNO —指针(图2中的字节2~字节5),下面的例子使用双字MD2存 储了指针的后4个字节: L P#8 7 T MD2 //加载指针 //将指针装入MD2 …一…… ~ I。 L L 0 A l【MD2】 Q[MD2】 =//取M8_7状态 //输出到Q8.7 <>I //如果数据块号不为0 OPN DB[#DB—NO] //则打开数据块 2.2 ANY类型 在S7—300 PLC中,ANY类型也可以认为是一种指针,可 使用ANY类型指向任意长度连续存放的数据。例如,需要计算 校验码的报文有20个字节,连续存放在数据块DB1中,即 DB1.DBB0-DB1.DBB19,那么,我们可以使用一个ANY型指 针指向这2O个连续的字节: P#DB1.DBX0.0 BYTE 20 字 上式是ANY类型的常量表达方法,在“P拌”后面加上数据的 节 起始位地址(DB1.DBXO.0),再加上类型(BYTE)和连续数量 L L A R 1 (2O)即可。ANY类型占用10个字节的存储空间,如图3所示。 L j i'iO E N ,\、: 』1'J4 J 1 I i'g 16进截值薯蠹 骥翳 嘲e蛐 位 b霜H8 I2 警节 b削6粕3 攀 扣"8ID4 1 ̄16#05- -整数 B#16L ̄06 取攀 聋,8j6。7 囊臻数 i蝌16#08誉 嚣豢数 18进制值 镶鲷 j 错8{ 辆蒸寄存嚣 _f ̄1&t82 输j=lj 蠹器 嘲6粕3。 鬣寄存器 18 _ 簸 骧 辫1 6I髓 蛮谶 鹨袋 蜷1 }86■ 局嚣数据 图3 ANY类型存储格式 可以看出,ANY类型和指针类型的后6个字节的存储方式是 相同的,即ANY类型的字节4~字节9也可以作为指针值使用。 3实现CRC16移位算法 了解¥7-300 PLC的指针类型和ANY类型之后,就可以 使用这两种类型在STL语句表中实现CRC16校验码移位算 法,其中,ANY类型用于表示连续存放的报文,指针用于依次指 向并处理报文中的每个字节。 表1 FC1参数表 MSG 输入 ANY 未计算CRC的通讯报文 LEN 蝓八 INT 参与CRC计算的罕节数 CRc_OUT f嫡出 WORD cRc计算输出结果 CRC l临 女 W0RD CRC计算中属结嶷 DBNO ¨1 一一 WORD 聂 芎 ~ LOOP1COUNT 临时变量 W0RD 卦循环计数 LOOP2COUNT il ̄n,t变量 WORD 内循环计数 L D【AR1,P#6.0] //将ANY型数据MSG的后4个 //作为指针值装入AR1溅囊 甄鬻 //加载参与CRC计算的字节长度 RPT1:T #L0OP1—COUNT //送给外循环计数临时变量 LOO 1 P—COUNT L 群CRC //装入CRC初值 L B[AR1,P#0.0] ×OW //与指针指向的当前字节异或 T #CRC L 8 //加载移位的位数 RPT2:T #LOOP2~COUNT //送给内循环计数临时变量 L0OP2_COUNT L #CRC AW W#t6#1 //将当前CRC和1进行位逻辑“与”操作 L W#16#0 ==I //如结果为0(即CRC最低位不为1) JC B00 //则跳转到标号BOO L 样CRC SRW 1 //将当前CRC右移一位 L W#16#A001 XOW //与A001异或 T #CRC JU B01 //跳转到标号B01 BOO:L #CRC SRW 1 //将当前CRC右移一位 T #CRC B01:L #LOOP2一C0UNT //装入内循环记数 LOOP RPT2 //内循环记数减1,并执行下 一内循环RPT2 +AR1 P#1 0 //指针指向MSG的下一个字节 L 群LOOP1一COUNT //装入外循环记数 L0OP RPT1 //外循环记数减1 并执行下一外 循环RPT1 OUT:L 样CRC 丁 #CRC-OUT //最终结果输出 FC1调用如图4所示。 图4调用FC1 (下转第115页) 誉 《工业控制计算机 ̄2010年第23卷笫7期 115 Al12个、AO16个、DO9个。采用台湾盟立Fama的SC型 PLC,它属于经济型的中型PLC,内置以太网主站通讯功能,配 置1块SC一501/E CPU模块,2块PWS10C电源模块,3块 水泵远程控制模式的选择、电位器调节变频器频率信号、上位机 调节变频器频率信号;输出信号包括频率信号输出显示、变频器 内部故障输出指示、变频器运行指示。 2l2 PLC程序流程 PLC程序主要解决变频控制时现场各泵的启停程序、切换 XDC10数字量输入模块、1块YDC10数字量输出模块、2块 AD031模拟量输入模块、1块DAO31模拟量输出模块、3块 HSC1 1脉冲输入模块。 表1 PLC的I/0点数表 t ^ # i ^^ { i i l E 程序、模拟量的处理和与触摸屏通信数据的处理功能等,PLC总 体程序流程图如图4所示。当主控程序运行时,检测到温差不等 于触屏设定值之后,利用PLC的PID调节使其在设定范围内, 实时调节变频器的运行频率,控制冷冻水泵、冷却水泵的转速, 满足系统负荷的需要。 (2)变频器的选用 在工程扩建和技术改造中选用变频装置的原则是,按照负 载类型选择性价比高的变频器。变频器的控制形式有压/频控 制、空间电压矢量控制、矢量控制、直接转矩控制,其中V/F控制 具有简单低廉、使用调试方便的特点,适用于各种水泵、风机,节 电率高。本系统选择罗克韦尔自动化旗下艾伦一布拉德利 PowerFlex400高效率低成本变频器,它拥有众多内置特性,支 持变频器与控制系统之间的无缝连接。系统中55kW冷冻水泵 各配一台22C—D105A103型的变频器,75kW冷却水泵各配一 图4 PLC程序流程图 台22C—D142A103型的变频器。变频器接线图如图3所示,输 3结束语 入信号包括变频器运行的启停信号、水泵就地控制模式的选择、 中央空调节能改造工程采用PLC和变频器对水泵进行变 频调速,消除了改造前电动机在起动及运转过程中的冲击电流 现象,避免了水锤现象,并有效延长电动机、接触器等的使用寿 28 控制F=I二 = 回 匿 命。现场调试和运行结果表明,基于PLC和变频器的中央空调 节能改造控制系统的节能效果显著,年节能率达到40%左右, SA1 产生了良好的经济效益。 _。i停鼍程 、,v、,F 匿 十 i j 一(P0mrFlex4oo) 参考文献 圈 匿 [1]何青中央空调常用数据速查手册[M]北京:机械工业出版社,2005 [2]蔡增基.流体力学泵与风机[M].北京:中国建筑工业出版社,2009 [3]陈建东中央空调系统水泵变频节能技术的应用分析[J]制冷技术, 卫 2006(4):12—15 [4]李良仁.变频调速技术与应用[M].北京:电子工业出版社,2004 [5]龚志远.冷水机组控制系统改造[J]电机与控制应用,2009(5):58- 60 图3变频器接线图 [收稿El期:2010.6.1] …………~一一………一~~………】……一…】………,…,…】…’…】 (上接第105页) 参考文献 4结束语 [1]Modicon Modbus Protocol Reference Guide[K]Modicon公司, S7—300 PLC的指针类型、ANY类型功能非常灵活,在复 1996 杂的数据运算中发挥了很大作用。刚开始接触这两种类型时,可 [2]用于S7—300和S7—400的语句表(STL)编程参考手册[K].西门子 能会感到没有常规数据类型那样容易理解,但是只要深入了解 公司,2004 它们在PLC寄存器中的存储格式,并通过一些实例进行熟悉, [3]STEP7 V5.4软件在线帮助[K] 很快就能体会到它们的强大功能。 [收稿日期:2010.4.4]