网站首页 > 技术教程 正文
1、 报文
在开始具体讲解PLC如何接收数据之前,我们首先要向大家介绍报文这个概念,所谓报文就是一段完整的信息,图1?1所示为报文的一种格式。
在通讯的过程中无论是发送还是接收都是一个报文一个报文为单位的进行的,发送之所以简单就是因为我们只要将准备在发送缓冲区的数据一次性的全部发送出去就好,一次发送一个报文,而接收就不同了,我们要判断一个报文的起始与结束,还要判断接收到的这个报文是否在传输的过程中因为干扰等原因产生错误。
2、单个报文的判断方法
如何判断一段报文的起始与结束呢?我们常用的有两种方法。
第一通过给报文设定固定的起始字符和结束字符,只要接收到起始字符既是一段报文的开始,只要收到结束字符既是一段报文的结束。
第二通过空闲时间判断,超过空闲时间没有接收到数据,我们就认为是一段报文已经结束,之后接收的数据就算新的报文。
那么本文我们还是先给大家讲解如何通过起始字符和结束字符来接收数据。
3、通过字符判断
在编写程序之前我们首先要明确我们使用的特殊位寄存器的状态,下面我们逐个按要求进行设置,这里要注意我们统一使用S7-200CPU的端口0。
SMB30 = 2#00001001 =16#9
1) 自由口模式。第0、1位
2) 通讯速率9600bps。第2、3、4位
3) 每个字符的数据位是8位。第5位
4) 不选用奇偶效验。第6、7位
SMB87 = 2#11100000 = 16#E0
1) 不使用中断条件作为检测信息的开始。第1位。
2) 不使用空闲时间方式检测报文的开始结束。第2、3、4位。
3)使用结束字符检测报文的结束。第5位。
4) 使用起始字符检测报文的开始。第6位。
5)允许信息接收功能。第7位。
注:第0位为无效位不使用。
SMB88 =16# AA
用16进制AA作为报文的起始字符,只要PLC接收到字符AA说明一段报文的开始。
SMB89 = 16#BB
用16进制BB作为报文的结束字符,只要PLC接收到字符BB说明报文接收完毕停止接收。
SMB94 = 255
SMB94定义接收缓冲区大小,此处定义为最大255字节。(注:接收缓冲区是用来存放接收到的数据的区域,最大255字节,大家可以根据通讯情况自由定义。
4、程序编写
开始程序编写之前让我们首先了解一下接收指令的使用。
RCV接收指令有两个管脚,TBL和PORT。
PORT:通讯端口编号,如果用0端口则写0,如果用1端口则写1.
TBL:定义接收缓冲区的起始地址,如果TBL中写VB100,同时接收的数据是两个字节,则VB100中的数值为2,同时VB101和VB102用来存放接收到的数据。
下面我们来看程序的具体写法。
5、接收测试
程序我们就编写完成了,主要是对特殊位寄存的设定,另外增加一个接收指令用于接收数据就好,下面我们用PLC接收几组发自电脑的数据,来具体了解通过起始、结束字符判断报文的方式来接收数据的使用方法。
1) 接收测试1
首先我们使用串口调试软件发送一段报文16进制的aa 11 22 ff 23 bb一共6个字节。根据我们上面的讲解,此段报文中aa是报文的起始字符,表示报文的开始bb是报文的结束字符,表示该段报文的结束,起始字符和结束字符之间是要发送给PLC的数据内容,当然现在我们发送的数据是没有任何含义的,如图5?1所示。
图5?2所示是Step7 MicroWin的状态表监控到的数据,因为我们设定的起始地址是VB100一共发送了6个字节的数据,所以数据的存放是从VB101到VB106中。这里可能有人要问那VB100中应该是6啊为什么是0呢?这个主要是因为在接收指令RCV之前我使用的SM0.0因此当一次数据接收完成后,就重新进入接收状态,这时会将Vb100中的数值清空,所以VB100始终是0。
2) 接收测试2
上面我们已经成功使用S7-200PLC接收到了电脑发送的数据现在我们用电脑发送一组没有起始字符的报文看看会出现什么情况,此次我们发送数据dd 11 22 ff 23 bb如图5?3中内容所示。
通过图5?4我们可以发现PLC没有接收到任何数据,原因就是PLC没有检测到起始字符
3) 接收测试3
本次我们发送给PLC的数据既有起始字符,也有结束字符,只是在结束字符后我们再增加2个字节的数据,看看会出现什么情况,这次我们发送aa 11 22 bb 23 45。
由图5?6我们可以发现电脑发送的数据PLC只能接收到aa 11 22 bb,而23 45这两个字节由于出现在报文的结束字符之后PLC就无法识别了。
连载中。。。
注:这是一套关于RS-485的系列文章,前两篇已经发表过,有兴趣的朋友可以往前翻阅查找,相信通过这一系列的文章知识解说,大家会对RS-485的认识上升一个等级。
作者:马乐
版权为技成所有,未经同意盗取必究!
——END——
猜你喜欢
- 2024-11-07 不懂485通讯?那高手的经典系列文章你一定要看!数据接收2/系列4
- 2024-11-07 S7-200smart 与超声波流量计之间的MODBUS通讯
- 2024-11-07 「玩转485」之数据的发送 485怎么传输数据
- 2024-11-07 PLC串口转网口的设备都有哪些? plc串口转网口的设备都有哪些
- 2024-11-07 写给初学者的博途教程(MODBUS-RTU通讯组态指令应用)
- 2024-11-07 RS-485总线扫盲贴!轻轻松松简简单单带你玩转RS-485
- 2024-11-07 灵活扩展-RS232串口I/O模块推荐 rs232串口接口定义
- 2024-11-07 「技术」清楚简单,一种串口触摸屏的开发流程和方法介绍
- 2024-11-07 西门子S7-200 SMART自由口通信参数如何设置?编写发送接收程序
- 2024-11-07 VB绘制实时曲线 vb曲线控件
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)