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

手册提供信息:

接收模式参数 1(设定不连续时间 5~3000ms)且设定为 16 位处理模式(SM106=OFF)

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

  2. 设定要传送的数据内容 D100=16#3231、D101=16#3433

  3. 设定 D10=16#0001(模式参数 1),D11=300(不连续时间设定值 300ms)

  4. 启动条件接点 M0

  5. PLC 发送出 4 笔数据

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

  1. 外部机器收到 PLC 传送的数据之后,依序发送 5 笔连续数据给 PLC 且每字间隔不超过 20 ms

外部机器→PLC 35 36 37 38 39

  1. 读取 D200=5(接收数据数),接收数据内容为 D201=16#3635、D202=16#3837、D203=16#0039

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

  3. 如欲再次传送,需手动将完成标志 SM100 设为 OFF,即可再次执行。

注:当数据传送完毕时,接收中标志 SM98 为 ON,并进入接收状态,准备开始接收数据,当接收到第一个字符时开始累积计时结束时间,每收到一个字符即清除累积计时值,直到累积计时超过 D11 的设定值,完成标志 SM100 为 ON。

根据以上要求编写ST程序

cs 复制代码
/*范例程序二*/

SM106:=FALSE;										//16位模式
通讯端口_COM1:=1;								//通讯端口号:com1
接收数据结束条件参数设定:=1;				//模式参数1
D11:=300;													//不连续时间设定值 300ms

D100:=16#3231;
D101:=16#3433;
发送数据长度:=4;

IF M0 THEN
	//M0:=FALSE;
	//SM100:=FALSE;								//如欲再次传送,需手动将完成标志 SM100 设为 OFF
	COMRS( 通讯端口_COM1 , D100 , 发送数据长度 , D200 , 接收数据结束条件参数设定 );//发送数据,D200是接收数据的起始地址。
	
	//如果收到数据SM100会ON,清除:触发条件和收到数据标志。
	IF SM100 THEN
		M0:=FALSE;
		SM100:=FALSE;
	END_IF;
	
END_IF;

验证结果:

  1. M0 ON后,PLC发送数据:31,32,33,34。串口助手监控到:
  1. 使用串口助手回传回复数据给PLC:35,36,37,38,39。PLC监控到:

踩过的坑:

IF的触发条件M0不能立即清除,否则发送会失败。

相关推荐
island131410 分钟前
CANN GE(图引擎)深度解析:计算图优化管线、内存静态规划与异构任务的 Stream 调度机制
开发语言·人工智能·深度学习·神经网络
坚持就完事了14 分钟前
Java中的集合
java·开发语言
魔芋红茶18 分钟前
Python 项目版本控制
开发语言·python
云小逸34 分钟前
【nmap源码解析】Nmap OS识别核心模块深度解析:osscan2.cc源码剖析(1)
开发语言·网络·学习·nmap
冰暮流星34 分钟前
javascript之二重循环练习
开发语言·javascript·数据库
风指引着方向35 分钟前
自定义算子开发入门:基于 CANN op-plugin 的扩展实践
开发语言
Fairy要carry40 分钟前
面试-GRPO强化学习
开发语言·人工智能
Liekkas Kono1 小时前
RapidOCR Python 贡献指南
开发语言·python·rapidocr
张张努力变强1 小时前
C++ STL string 类:常用接口 + auto + 范围 for全攻略,字符串操作效率拉满
开发语言·数据结构·c++·算法·stl
xyq20241 小时前
Matplotlib 绘图线
开发语言