报文长度不固定,如何控制PLC接收信息?【RS-485专业讲解】系列7
通过时间方式判断进行数据的接收的两种方式,我已经详细的向大家介绍了固定长度报文情况下PLC如何接收数据,本文我就向大家介绍一下当报文长度不固定的情况下我们该如何控制PLC接收信息。
首先我们回顾一下当协议中报文的长度不固定的情况下,我们是通过判断字符间的空闲时间的方式来判断一段报文的起始,通常是字符与字符之间空闲时间超过3.5个字符传输时间,我们就认为一段报文接收完毕,之后接收到的报文就是一段新的报文。下面我们来看看这个程序如何写。
SMB30 = 2#00001001=16#9
图1-1
1)自由口模式。第0、1位。SM30.0=1、SM30.1=0
2)通讯速率9600bps。第2、3、4位。SM30.2=0、SM30.3=1、SM30.4=0
3)每个字符的数据位是8位。第5位。SM30.5=0
4)不选用奇偶效验。第6、7位。SM30.6=0、SM30.7=0
SMB87 = 2#10010100 =16#94
图1-2
1) 不使用中断条件作为检测信息的开始。第1位。SM87.1=0
2) 当SMW92中的定时时间超出时终止接收。第2、位。SM87.2=1
3) 定时器是内部字符定时器。第3位。SM87.3=0
4) 使用SMW90的值检测空闲状态。第4位。SM87.4=1
5) 不检测结束字符。第5位。SM87.5=0
6) 不检测起始字符。第6位。SM87.6=0
7) 允许信息接收功能。第7位。SM87.7=1
注:第0位为无效位不使用,永久为0。
SMW90 = 4
将SMW90设定成4表示报文间空闲时间大于4ms后接收的第一个字符是新信息的开始。
SMW92 = 4
由于我们设定SM87.3 = 0确定使用报文长度不固定方式,在9600bps通讯速率下1个字符(10个位)的接收需要1.04ms,3.5个字符的时间需要3.64ms,因此将SMW92设定成4表示当字符与字符之间的空闲时间超过4ms时停止接收信息(注:SMW92不支持小数),同时空闲4ms后(SMW90 = 4)接收到的第一个字符是新信息的开始。
SMB94 = 255
SMB94定义接收缓冲区大小,此处定义为最大255字节。(注:接收缓冲区是用来存放接收到的数据的区域,最大255字节,大家可以根据通讯情况自由定义。)
2、程序编写
图2-1
图2-2
以上就是报文长度不固定方式下,接收数据的程序,下面我们从电脑向PLC发送两组长度不同的报文 AA 11 22 BB 23 45 C1和AA11 22 BB 23 45 C1 54,看看效果。
图2-3
图2-4
图2-5
图2-6
由上面两次操作我们可以看到当报文长度不固定的时候电脑向PLC发送几个字符PLC就会接收几个字符。
作者:技成培训网(马乐)
版权为技成所有,未经同意盗取必究!
——END——
施耐德PLC应用,在程序中定义变量和数据!
施耐德PLC中编辑变量和数据:
(一)基本知识
1、变量分类
变量是在程序执行时可以修改的内存区域。Unity Pro 软件编程可以使用两种类型的变量:
1) 定位变量:是与 I/O 硬件模块输入输出通道相关联的,或者与内存引用相关联的变量。例如:“启动电机”与输入模板通道 %I 0.5.0 相关联,“启动电机”就是定位变量。
2) 非定位变量:是既不与I/O 硬件模块输入输出通道相关联,也不与内存引用地址相关联的变量,即没有地址关联的变量成为非定位变量。非定位变量在内存中的位置不可知。这种变量定义类型可以使您在编写程序时抛开地址的束缚,完全专注于您的应用。
2、通用数据类型和范围
BOOL/EBOOL : 布尔变量必须为 FALSE (0) 或 TRUE (1). EBOOL处理强制和边沿检测
WORD : 代表 “位串16”, 意味着数据长度为 16 位
INT : 代表整型数. 数值范围从 -32768 至 +32767
UINT : 代表无符号整型数. 数值范围从 0 至 65535
REAL : 代表浮点值. 数值范围从 -3.40e+38 至 3.40e+38
3、 通用数据类型的立即值语法
通常基本数据类型(EDT)的实例采用变量名或拓扑地址的方式引用,而在数据编辑器或程序段中也可以通过立即值的方式赋值和引用。如下图所示。
4、定义变量的三种方式
方式一,在项目浏览器中鼠标双击“变量和FB实例”,在弹出的‘数据编辑器窗口’定义,编辑、修改变量,如下图。
方式二,在项目浏览器中双击CPU或I/O模块,如下图查看相应模块的地址,在模块的I/O对象表格里定义,这种方式只能生成,不支持修改和删除。
方式三,在”程序编辑窗口”中定义,这种方式只能生成,不支持修改和删除。
(二)实际操作
1、在项目浏览器中点击“变量和FB实例”,在右侧“名称”下输入start,类型选 EBOOL,在下一行输入 stop,类型选 EBOOL,然后关闭窗口。如下图:
2、从硬件属性中书写:在项目浏览器中双击DDO3202k;左键点右侧“BMX DDO3202k”,选择I/O对象,再选择%Q,然后点击“更新网络”。在该界面右侧%Q0.2.0名称下,改写为cmd_motor,再用鼠标左键选中第2行,按着鼠标左键下拉,选择右侧Q0.2.1、Q0.2.2、Q0.2.3;然后在左侧“名称前缀”框中输入cmd_,点击“创建”。即可形成cmd_0、cmd_1、cmd_2;如下图:
3、关闭所有窗口,点击“变量和FB实例”,会显示刚才所有的定义变量名。
4、按保存按钮,保存项目。
相关问答
plc数据长度怎么确认?
确认PLC数据长度的方法取决于所使用的PLC系统和编程软件。一种常见的方法是查看PLC的数据表或标签,其中包含了每个数据项的长度信息。另一种方法是通过编程...
plc测量钢丝绳长度的方法?
PLC测量长度一般都是使用电子尺或接线式编码器。电阻尺可以直接测量出绝对长度、测量精确、使用简单等特点。我用的是良石技术的LS21-E4KT电阻尺模块,将电子尺...
用普通电机三菱plc用什么程序定长度?
选用相对旋转编码器,电机旋转的时候编码器会输出AB相高速脉冲,PLC可采集脉冲即可知道当前的位置,跟你需要的设定值进行比较即可控制电机走的长度。选用相对旋...
PLC测量长度用什么传感?-曼谷三儿的回答-懂得
用编码器来测量长度。
plc扫描周期是什么?
PLC扫描周期是指PLC输入、输出、程序扫描等周期的时间间隔。在PLC系统中,PLC需要不断地扫描所有的输入和输出模块,读取和更新IO信号,同时执行用户的程序,完成...
三菱PLC检测两个相邻脉冲之间的时间然后计算测速,程序怎么写?
不能兼顾精度和速度,可以采用高速计数测量长度,在一个相对长的时间求出平均速度。不能兼顾精度和速度,可以采用高速计数测量长度,在一个相对长的时间求出平均...
旋转编码器测长度怎样把他编到PLC程序里面?
用fc块把编码器输入值模拟量转换成数字量放到db块然后把这个db块和你的设定值做比较就可以了用fc块把编码器输入值模拟量转换成数字量放到db块然后把这个d...
plc的扫描周期是多少长时间?好心人告诉我?
PLC扫描周期长短与CPU运行速度、PLC硬件配置和用户程序长短有关.PLC扫描周期T=(输入—点时间*输入端子数)+(指令执行速度*指令的条数)+(输出一点的时间*...
plc字节长度?
PLC中的字节是二进制数据的单位。一个字节通常8位长。作为一个单位来处理的一个二进制数字串,是构成信息的一个小单位。最常用的字节是八位的字节,即它包含...
plc扫描周期是多少?
PLC(可编程逻辑控制器)的扫描周期是指PLC在执行完一次完整的程序运行周期(扫描)所需要的时间,通常以毫秒为单位。扫描周期取决于PLC的型号和配置,一般而言...