台达ST:自定义串行通讯传送与接收指令COMRS程序范例五

程序范例五:
接收模式参数 4(特定字符为开始字符以及不连续时间设定 5~255ms)且设定为 8 位处理模式(SM106=ON)

  1. 设定要传送的数据长度 D20=4

  2. 设定要传送的数据内容 D100=16#0031、D101=16#0032、D102=16#0033、D103=16#0034

  3. 设定 D10=16#0004(模式参数 4),D11=16#3A0F(开始字符为 16#3A,不连续时间设定为 16#0F 即 15ms)

  4. 启动条件接点 M0

  5. PLC 发送出 4 笔数据

PLC 传送数据→外部机器 31 32 33 34

  1. 外部机器收到 PLC 传送的数据后,依序发送 7 个字符连续数据给 PLC 且每个字间隔为 1 ms

外部机器→PLC 30 3A 35 36 37 38 39

  1. 读取 D200=6(接收数据数),接收数据内容为 D201=16#003A、D202=16#0035、D203=16#0036、

D204=16#0037、D205=16#0038、D206=16#0039

  1. 读取 SM100=ON(接收完毕)

  2. 如欲再次传送,需手动将完成标志 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。

相关推荐
BillKu1 小时前
html2pdf.js使用与配置详解
开发语言·javascript·ecmascript
n***s9091 小时前
ThinkPHP和PHP的区别
开发语言·php
code bean1 小时前
【C++】全局函数和全局变量
开发语言·c++·c#
safestar20121 小时前
Elasticsearch ILM实战:从数据热恋到冷静归档的自动化管理
java·开发语言·jvm·elasticsearch·es
霸王大陆1 小时前
《零基础学 PHP:从入门到实战》教程-模块四:数组与函数-2
android·开发语言·php
神仙别闹1 小时前
基于C++实现(控制台)应用二维矩阵完成矩阵运算
开发语言·c++·矩阵
yi碗汤园1 小时前
C#实现对UI元素的拖拽
开发语言·ui·unity·c#
lqwh53541 小时前
python控制修改comsol边界条件仿真方法
开发语言·python
似水এ᭄往昔1 小时前
【C++】--二叉搜索树
开发语言·数据结构·c++