程序范例五:
接收模式参数 4(特定字符为开始字符以及不连续时间设定 5~255ms)且设定为 8 位处理模式(SM106=ON)
-
设定要传送的数据长度 D20=4
-
设定要传送的数据内容 D100=16#0031、D101=16#0032、D102=16#0033、D103=16#0034
-
设定 D10=16#0004(模式参数 4),D11=16#3A0F(开始字符为 16#3A,不连续时间设定为 16#0F 即 15ms)
-
启动条件接点 M0
-
PLC 发送出 4 笔数据
PLC 传送数据→外部机器 31 32 33 34
- 外部机器收到 PLC 传送的数据后,依序发送 7 个字符连续数据给 PLC 且每个字间隔为 1 ms
外部机器→PLC 30 3A 35 36 37 38 39
- 读取 D200=6(接收数据数),接收数据内容为 D201=16#003A、D202=16#0035、D203=16#0036、
D204=16#0037、D205=16#0038、D206=16#0039
-
读取 SM100=ON(接收完毕)
-
如欲再次传送,需手动将完成标志 SM100 设为 OFF,即可再次执行。
注:当数据传送完毕时,接收中标志 SM98 为 ON,并进入接收状态,当接收到特定开始字符(16#3A)开始接收数据并开始累积计时结束时间,收到一个字符即清除累积计时值,直到累积计时超过 D11 的设定值16#0F(15ms),完成标志 SM100 为 ON。
编写ST程序:
cs
/*范例程序五:模式4测试*/
SM106:=TRUE; //8位模式
通讯端口_COM1:=1; //通讯端口号:com1
接收数据结束条件参数设定:=4; //模式参数4, D10
D11:=16#3A0F; //(开始字符为 16#3A,不连续时间设定为 16#0F 即 15ms)
发送数据长度:=4; //D20,PLC发送4比数据给外部
D100:=16#0031;
D101:=16#0031;
D102:=16#0033;
D103:=16#0034;
IF M0 THEN
//M0:=FALSE;
//SM100:=FALSE; //如欲再次传送,需手动将完成标志 SM100 设为 OFF
COMRS( 通讯端口_COM1 , D100 , 发送数据长度 , D200 , 接收数据结束条件参数设定 );//发送数据,D200是接收数据的起始地址。
//如果收到数据SM100会ON,清除:触发条件和收到数据标志。
IF SM100 THEN
SM100:=FALSE;
M0:=FALSE;
END_IF;
END_IF;
运行PLC,触发M0 ON之后,串口助手收到数据:

使用串口助手给PLC回复数据:30 3A 35 36 37 38 39,一共7比数据。
通过PLC监控,我们发现PLC只收到了6比数据。

这是为什么呢?
这就跟模式4有关系,我们来看手册上关于模式4的介绍

我们详细来看:
程序中我们设定D11:
cs
D11:=16#3A0F; //(开始字符为 16#3A,不连续时间设定为 16#0F 即 15ms)
3A:是高8位。表示特定的开始字符。所以串口助手发送的第一个字节30给忽略了,而是从第二个字节的3F开始接收数据。
0F:是低8位。表示不连续的时间。当接收到特定开始字符(16#3A)开始接收数据并开始累积计时结束时间,收到一个字符即清除累积计时值,直到累积计时超过 D11 的设定值16#0F(15ms),完成标志 SM100 为 ON。简单的说就是如果15ms还没收到任何字符,PLC就会认为接收完成,会把接收完成标志SM100设置为ON。