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

相关推荐
成豆o((⊙﹏⊙))o.1 小时前
C语言基础知识,仅供自己参考
c语言·开发语言
Sally_xy1 小时前
Python 虚拟环境
开发语言·chrome·python
张np1 小时前
java基础-List接口
java·开发语言
拾贰_C1 小时前
[python ]anaconda
开发语言·python
VBA63371 小时前
VBA数据库解决方案第二十五讲:工作表中数据在数据表中批量删除
开发语言
7ioik1 小时前
新增的类以及常用的方法有哪些?
java·开发语言·python
无限进步_1 小时前
深入理解顺序表:从原理到完整实现
c语言·开发语言·数据结构·c++·算法·链表·visual studio
繁华似锦respect2 小时前
C++ 无锁队列(Lock-Free Queue)详细介绍
linux·开发语言·c++·windows·visual studio
专注API从业者2 小时前
Node.js/Python 调用淘宝关键词搜索 API:从接入到数据解析完整指南
开发语言·数据结构·数据库·node.js