台达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。

相关推荐
知识分享小能手7 小时前
C++ 学习教程,从入门到精通,C++ 友元、异常和其他特性 — 详细知识点(15)
开发语言·c++·学习
朝朝辞暮i8 小时前
C++ 第 26 课:对象、指针与 ->
java·开发语言·c++
2601_962885728 小时前
如何用 Python 做股价历史分位选股?(筛出处于历史低位的股票)
开发语言·python
殷色玫瑰9 小时前
C++入门基础复习:从命名空间到引用与nullptr,一篇重新捡回C++基础
java·开发语言·c++
(Charon)9 小时前
【C++面试】手写线程池:任务队列、工作线程与优雅退出
开发语言·c++
言乐69 小时前
Python概括后端原理
开发语言·python·django·virtualenv·pygame
@大迁世界10 小时前
JEV RAG:更高效的 RAG 系统解决方案?
开发语言·rust
朝朝辞暮i10 小时前
C++ 第一阶段总结:从零基础到 ROS2 前置语法
开发语言·c++·算法
2601_9628857210 小时前
如何用 Python 回测定投策略(定期定额 DCA)?(和一次性买入对比)
开发语言·人工智能·python
周杰偷奶茶11 小时前
【JavaSE】类和对象基础
java·开发语言