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

相关推荐
前端老石人6 小时前
HTML 字符引用完全指南
开发语言·前端·html
matlab_xiaowang6 小时前
Redux 入门:JavaScript 可预测状态管理库
开发语言·javascript·其他·ecmascript
虹科网络安全6 小时前
艾体宝干货|数据复制详解:类型、原理与适用场景
java·开发语言·数据库
axng pmje6 小时前
Java语法进阶
java·开发语言·jvm
老前端的功夫7 小时前
【Java从入门到入土】28:Stream API:告别for循环的新时代
java·开发语言·python
qq_435287927 小时前
第9章 夸父逐日与后羿射日:死循环与进程终止?十个太阳同时值班的并行冲突
java·开发语言·git·死循环·进程终止·并行冲突·夸父逐日
止语Lab7 小时前
从手动到框架:Go DI 演进的三个拐点
开发语言·后端·golang
yaoxin5211237 小时前
397. Java 文件操作基础 - 创建常规文件与临时文件
java·开发语言·python
小短腿的代码世界7 小时前
Qt日志系统深度解析:从qDebug到企业级日志框架
开发语言·qt
REDcker8 小时前
浏览器端Web程序性能分析与优化实战 DevTools指标与工程清单
开发语言·前端·javascript·vue·ecmascript·php·js