台达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不能立即清除,否则发送会失败。

相关推荐
星晨雪海9 分钟前
基于 @Resource 的支付 Service 多实现类完整示例
java·开发语言
ACP广源盛1392462567332 分钟前
破局 Type‑C 切换器痛点@ACP#GSV6155+LH3828/GSV2221+LH3828 黄金方案
c语言·开发语言·网络·人工智能·嵌入式硬件·计算机外设·电脑
Ricky_Theseus1 小时前
C++右值引用
java·开发语言·c++
Rick19931 小时前
Java内存参数解析
java·开发语言·jvm
勿忘,瞬间1 小时前
多线程之进阶修炼
java·开发语言
hoiii1872 小时前
CSTR反应器模型的Simulink-PID仿真(MATLAB实现)
开发语言·matlab
炘爚2 小时前
C++ 右值引用与程序优化
开发语言·c++
si莉亚3 小时前
ROS2安装EVO工具包
linux·开发语言·c++·开源
清心歌3 小时前
CopyOnWriteArrayList 实现原理
java·开发语言
良木生香3 小时前
【C++初阶】C++入门相关知识(2):输入输出 & 缺省参数 & 函数重载
开发语言·c++