对于S7-1200PLC串口通信模块和通信板的自由口通信,必须组态接收的消息开始和结束条件以使其能正常接收数据。
1.消息开始
以CM1241 RS232通信模块为例,在“属性>常规”选项卡,选择“RS232接口>组态所接收的消息>消息开始”,组态消息开始条件,如图9-23所示。
图9-23 组态消息开始
(1)以任意字符开始
任何字符都可作为消息接收的开始。
(2)以特殊条件开始
可任选其中的一种或几种的组合。选择组合条件时按照“换行识别>线路空闲>字符或序列”的先后次序来判断是否符合消息开始接收。检查组合条件时,如有一个没满足则将从第一个开始重新启动检查。
1)“通过换行识别消息开始”:指定在接收中断字符后开始消息接收。
2)“通过线路空闲识别消息开始”。
空闲线定义为传输线路上安静或空闲时间,默认是40位时间,最大值为65535,最大为8s。对没有特定起始字符或指定了消息间最小时间间隔的,可使用“通过线路空闲识别消息开始”作为消息开始条件。接收消息功能会忽略在空闲线时间到之前接收到任何字符,并按组态时间重新启动空闲线定时器,在空闲线时间到之后,将所有接收到的字符存入消息缓冲区,如图9-24所示。
①字符。
②重启线路空闲定时器。
图9-24 空闲线检测消息开始
③检测到线路空闲,并启动消息接收操作。
3)“通过单个字符识别消息开始”:接收到单一组态字符后开始接收。默认值为2(十六进制),即STX(ASCII),用户可自定义该消息起始字符。
4)“通过字符序列识别消息开始”:满足其中任何一个启用的字符序列均作为消息开始。“要定义的字符序列数”默认值为1,最多可设置为4组。每组字符序列最多可包含5个字符,每个字符均可被选择是否检测该字符,如不选择表示任意字符均可,如选择则输入该字符对应的ASCII码值。
•可定义连续5个字符开始接收,序列前数据被丢弃;
•也可约束其中连续或不连续的某几个字符;
•定义多组字符序列是或关系,有一个满足就开始接收。
以下举例说明,以CM1241发送端定义发送缓冲区DB3.DBB0~DB4.DBB8为例,在监视表输入待发送的0102030A0B0C0D0E0F字符序列,如图9-25所示,并且通过自由口编程发送数据到CM1241接收端。
图9-25 CM1241发送端输入发送数据
在CM1241接收端定义的字符序列数为1组。帧开始序列1的第一个字符为A,第2、3个字符无约束,第4个字符为D,第5个字符无约束,如图9-26所示。
以CM1241的DB4.DBB0-DB4.DBB4接收缓冲区为例,当检测到第一个字符是0A,第4个字符是0D,而不论第2、3、5个字符是何字符,即认为满足消息结束条件。接收到如图9-27所示的字符序列。
2.消息结束
以CM1241RS232通信模块为例,在“属性>常规”选项卡,选择“RS232接口>组态所接收的消息>消息结束”,组态消息结束条件,如图9-28所示。
图9-26 CM1241接收端定义字符序列
图9-27 S7-1200 PLC接收到字符序列
注意:
与多个消息开始条件的判断不同,多个结束条件中满足任何一个,消息接收结束。
(1)通过消息超时识别消息结束
时间从满足开始条件标准后开始计时,如果消息接收超出设置的消息超时时间,将识别到消息结束,如图9-29所示。消息超时时间默认为200ms,可设置值为0~65535ms。
①接收的字符。
②满足消息开始条件,消息定时器启动。
③消息定时器时间已到并终止消息。
(2)通过响应超时识别消息结束(www.xing528.com)
时间从发送结束时开始计时,如果在发送数据后的设定时间内没有接收到通信伙伴的响应,将识别到消息结束,如图9-30所示。“响应超时时间”默认为200ms,可设置值为0~65535ms。
图9-28 组态消息结束
图9-29 通过消息超时识别消息结束
图9-30 通过响应超时识别消息结束
在图9-30中:
①发送的字符。
②接收的字符。
③必须在该时间之前成功接收到第一个字符。
注意:
“通过响应超时识别消息结束”不能作为单独的结束条件,否则会在编译时报错。
(3)通过字符间超时识别消息结束
接收的两个字符之间的时间间隔如果超过设置的“字符间间隙超时”,则认为消息结束,如图9-31所示。“字符间间隙超时”默认值为48位时间,可设置值0~2500位时间。如果“字符间间隙超时”所设置的位时间根据波特率换算后超过8s,S7-1200PLC也只能接受最多8s。
①接收的字符。
②重启字符间定时器。
③字符间定时器时间已到并终止消息。
图9-31 通过字符间超时识别消息结束
(4)通过最大长度识别消息结束
如果超过消息的最大长度,将识别到消息结束。可设置1~1023个字符的值。使用“通过最大长度识别消息结束”可以防止消息缓冲区超负荷运行。如果将该结束条件与“通过字符间超时识别消息结束”结合使用,在出现超时的情况下,即使未达到最大长度也会认为该字符帧有效并进行接收。
(5)以固定消息长度检测消息结尾
在接收到指定数量的字符后,视为消息结束。固定长度的有效范围是1~4096。如果所接收字符的帧长度与组态的固定帧长度不匹配,则在达到组态的固定帧长度之后接收到的所有字符都将被丢弃,直至检测到新的开始标准。如果将该结束条件与“通过字符间超时识别消息结束”结合使用,在出现超时的情况下,未达到固定帧长度则会输出一条错误消息并丢弃该帧。
(6)从消息读取消息长度
“从消息读取长度”作为消息结束条件时,在消息本身指定消息长度,在接收到指定长度的消息后,视为消息结束。
以下举例说明,以CM1241发送端定义发送缓冲区DB3.DBB0~DB3.DBB9为例,在监视表输入待发送的01 02 04 0A 0B 0C 0D 05 06 07字符,如图9-32所示,并且通过自由口编程发送数据到CM1241接收端。
图9-32 CM1241发送端输入发送数据
在CM1241接收端定义“消息长度域的偏移量”、“长度域大小”、“数据后面的长度域未计入该消息长度”的字节数,以接收端定义DB4.DBB0~DB3.DBB10接收缓冲区为例,第3个字节DB4.DBB2为消息长度4个字节,DB4.DBB3~DB4.DBB6为接收到的4个字节长度的数据,并且在消息长度后有两个字节DB4.DBB7~DB4.DBB8不计入长度,如图9-33所示。
图9-33 从消息读取消息长度
“从消息读取长度”作为消息结束条件时,实际收到的数据长度=长度偏移前的字节数+长度字节大小+读取的实际数据长度+不计入字节长度的字节数。
(7)通过字符序列识别消息结束
如果指定的字符出现在消息中的正确位置,则识别消息结束。
以下举例说明,字符1和字符3分别具有特定值6A和7A时识别消息结束,如图9-34所示,激活字符1和字符3的复选框,并输入字符值。当接收到6A字符,后跟任意一个字符,再接收到7A字符,后跟任意两个字符,即满足结束条件。6A序列前面的字符不是结束字符序列的组成部分,字符位置2、4和5中接收的值不相关,但必须接收它们才能满足结束条件。
3.接收缓冲区
S7-1200 PLC通信模块和通信板缓冲区大小为1KB,即1024字节。接收缓冲区默认设置为“缓冲区内接收的帧为20帧”,“防止重写”和“在启动时清空接收缓冲区”,如图9-35所示。如果缓存区中的信息超过20帧,后面的信息被自动丢弃,且不报错。如果发送一帧数据大于1024字节,缓冲区接收到数据达1024字节时,即使未满足结束条件,数据仍会由缓存区送给CPU,但会报错16#80E0。
图9-34 通过字符序列识别消息结束
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。