在我们开始详细解释PLC如何接收数据之前,我们首先要向大家介绍一下报文的概念。所谓消息,就是一条完整的信息。消息格式如图1-1所示。
图1-1
通信过程中,发送和接收都是一次一条消息进行。发送之所以简单,是因为我们只需要将发送缓冲区中准备好的数据一次性发送出去即可。发送消息和接收消息是不同的。我们需要确定消息的开始和结束,还要确定接收到的消息在传输过程中是否由于干扰或其他原因而出现错误。
2、单条消息的判断方法
如何判断消息的开始和结束?我们常用的方法有两种。
首先,通过为消息设置固定的起始字符和结束字符,只要接收到起始字符就是消息的开始,只要接收到结束字符就是消息的结束。
其次,从空闲时间来判断,如果在空闲时间之后没有收到数据,我们就认为一条消息结束了,之后收到的数据就被认为是一条新消息。
3、按人物判断
在写程序之前,我们首先要明确我们所使用的特殊位寄存器的状态。接下来我们就根据需要来一一设置。这里需要注意的是,我们统一使用S7-200CPU的0端口。
SMB30=2#00001001=16#9
图3-1
1)自由口模式。 0、1 号
2)通讯速率9600bps。 2、3、4 号
3)每个字符的数据位为8位。 5号
4) 不使用奇偶校验。 6号和7号
SMB87=2#11100000=16#E0
图3-2
1) 不要使用中断条件作为检测信息的开始。 1号。
2) 不使用空闲时间方法来检测消息的开始和结束。 2号、3号和4号。
3) 使用结束符来检测消息的结束。 5号。
4) 使用起始字符来检测消息的开始。 6号。
5) 允许信息接收功能。 7号。
注:位0 是无效位,未使用。
SMB88=16#AA
使用十六进制AA 作为消息的起始字符。只要PLC接收到字符AA,就表示一条消息的开始。
SMB89=16#BB
使用十六进制BB 作为消息的结束符。只要PLC收到字符BB,就表示消息已接收并停止。
SMB94=255
SMB94定义了接收缓冲区大小,这里定义为最大255字节。 (注:接收缓冲区是用来存储接收到的数据的区域,最大为255字节,您可以根据通讯情况自由定义。
4. 编程
在开始编程之前,我们先来了解一下接收指令的使用。
图4-1
RCV 有两个引脚用于接收指令,TBL 和PORT。
PORT:通讯端口号,如果使用端口0则写0,如果使用端口1则写1。
TBL:定义接收缓冲区的起始地址。如果VB100写在TBL中,同时接收到的数据是两个字节,则VB100中的值为2。同时VB101和VB102用于存储接收到的数据。
我们来看看程序的具体编写方法。
5、接收测试
程序已经写完了,主要是设置特殊位寄存器。另外,我们可以添加一条接收指令来接收数据。接下来我们用PLC从计算机接收几组数据来详细了解一下过程。如何使用通过判断报文的起始字符和结束字符来接收数据的方法。
1) 验收测试1
首先我们使用串口调试软件发送一条十六进制的消息aa 11 22 ff 23 bb,共6个字节。根据我们上面的解释,这一段消息中的aa是消息的起始字符,表示消息的开始。 bb是消息的结束符,表示消息段的结束。起始字符和结束字符之间是要发送给PLC的数据内容,当然我们现在发送的数据没有任何意义,如图5-1所示。
图5-1
Step7 MicroWin状态表监控的数据如图5-2所示。因为我们设置的起始地址是VB100,总共发送了6个字节的数据,所以数据存储的是从VB101到VB106。这里可能有人要问,为什么VB100要为6呢?为什么是0?这主要是因为我在接收RCV命令之前使用了SM0.0。因此,当一次数据接收完成后,会重新进入接收状态。此时,VB100中的值将被清除,因此VB100始终为0。
图5-2
2) 验收测试2
以上我们已经成功使用S7-200PLC接收计算机发送的数据。现在我们用计算机发送一组不带起始字符的消息,看看会发生什么。这次我们发送数据dd 11 22 ff 23 bb如图5-如图3所示。
图5-3
从图5-4中我们可以发现,PLC没有接收到任何数据,因为PLC没有检测到起始符。
图5-4
3) 验收测试3
这次我们发送给PLC的数据既有开始字符,也有结束字符。我们只需在结束字符后添加2 个字节的数据,看看会发生什么。这次我们发送aa 11 22 bb 23 45 。
图5-5
从图5-6中我们可以发现,PLC只能接收到计算机发送的数据中的aa 11 22 bb,而23 45这两个字节则无法被PLC识别,因为它们出现在报文结束符之后。
图5-6
连载了。
注:这是有关RS-485的系列文章。前两篇文章已发表。有兴趣的朋友可以阅读、搜索。相信通过本系列文章的知识讲解,大家会对RS-485有更好的了解。一个级别。
用户评论
终于等到大师的第四篇了!这篇文章简直是485通讯的救星,终于把数据接收搞懂了!
有18位网友表示赞同!
485通讯太难懂了,看了大师的文章感觉豁然开朗!
有14位网友表示赞同!
期待后续系列文章,希望能早点看到关于数据发送的讲解!
有12位网友表示赞同!
大师的文章思路清晰,讲解详细,强烈推荐给所有想要学习485通讯的朋友!
有6位网友表示赞同!
这篇文章真的太棒了!终于把数据接收的原理弄明白了!
有14位网友表示赞同!
大师的文章太实用了!终于可以解决485通讯的数据接收问题了!
有18位网友表示赞同!
485通讯真是个头疼的问题,幸亏有大师的文章指点迷津!
有10位网友表示赞同!
期待大师的下一篇文章,希望可以继续深入讲解485通讯!
有15位网友表示赞同!
学习485通讯,大师的文章是最好的参考!
有8位网友表示赞同!
这篇文章简直就是485通讯的宝典!
有15位网友表示赞同!
这系列文章真的太经典了,强烈推荐给大家!
有13位网友表示赞同!
终于搞懂了数据接收,真是太感谢大师了!
有14位网友表示赞同!
大师的文章真是深入浅出,让我对485通讯有了更深的理解!
有13位网友表示赞同!
485通讯的学习之路漫漫,幸亏有大师的指引!
有11位网友表示赞同!
数据接收部分终于搞懂了,接下来要继续学习数据发送了!
有18位网友表示赞同!
期待大师的下一篇文章,希望可以讲解一些485通讯的应用场景!
有18位网友表示赞同!
这篇文章简直是485通讯的入门必读!
有13位网友表示赞同!
终于找到了一个靠谱的485通讯学习资料!
有15位网友表示赞同!
大师的文章真的太棒了,强烈推荐给大家!
有8位网友表示赞同!
485通讯不再是难题,感谢大师的经典系列文章!
有19位网友表示赞同!