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

相关推荐
REDcker26 分钟前
浏览器端Web程序性能分析与优化实战 DevTools指标与工程清单
开发语言·前端·javascript·vue·ecmascript·php·js
我命由我123452 小时前
Kotlin 开发 - lateinit 关键字
android·java·开发语言·kotlin·android studio·android-studio·android runtime
Halo_tjn2 小时前
Java Set集合相关知识点
java·开发语言·算法
许彰午2 小时前
我手写了一个 Java 内存数据库(二):B+ 树的插入与分裂
java·开发语言·面试
大飞记Python3 小时前
【2026更新】Python基础学习指南(AI版)——04数据类型
开发语言·人工智能·python
Alice-YUE3 小时前
【js高频八股】防抖与节流
开发语言·前端·javascript·笔记·学习·ecmascript
云泽8083 小时前
C++11 核心特性全解:列表初始化、右值引用与移动语义实战
开发语言·c++
froginwe114 小时前
DOM 加载函数
开发语言
Hello eveybody4 小时前
介绍一下背包DP(Python)
开发语言·python·动态规划·dp·背包dp
AI进化营-智能译站4 小时前
ROS2 C++开发系列12-用多态与虚函数构建可扩展的ROS2机器人行为模块
开发语言·c++·ai·机器人