抖音粉丝群1
『7x24小时有问必答』


置顶/标星公众号,不错过每一条消息
大家知道S7‑200 SMART的串口可以配置为自由模式,这给通讯实现提供了很大方便,当启用接收消息RCV时消息帧的长度限定为不超过255字节,但当ADU长度超过255字节时怎么完成通讯?



1.概述

S7‑200 SMART CPU集成 RS485 端口(端口 0)或CM01 信号板 (SB) RS232/RS485 端口(端口 1)配置成自由口通讯,并启用接收中断(对于端口 0 为中断事件 23,对于端口 1 为中断事件 24)时。
CPU 会在接收消息完成事件(可设置为:结束字符检测、字符间定时器、消息定时器、最大字符计数)到来后终止接收消息功能并生成接收中断。如当接收到的字符数达到设置的最大字符数(端口 0对应SMB94,端口 1对应SMB194)。
而接收缓冲区最大可设置为255字节,这就决定了接收到的应用数据单元(ADU)长度不能大于255字节。那有没有办法接收超过255字节的ADU?本文给大家介绍一种方法。

2.字符中断

方法的核心就是使用接收字符中断控制接收数据。启用接收字符中断(对于端口 0 为中断事件8,对于端口 1 为中断事件 25),接收每个字符时都会产生中断。执行连接到接收字符事件的中断例程之前,接收到的字符存入 SMB2,自由端口模式下接收到的每一个字符都会存入这一位置,便于用户程序访问。

由于接收中断并不启用,接收指令的结束条件无法通过设置接收消息控制字节(端口 0对应SMB87,端口 1对应SMB187)完成,所以需编写接收超时程序来判断ADU帧的结束

3.示例程序

端口初始化

示例程序使用端口0自由模式,参数配置为波特率9600、数据位8位、停止位1位、无奇偶校验(SMB30=2#1001), 接收消息控制字节SMB30=2#10000000。要接收的最大字符数SMB94=255,即使程序没有使用字符计数消息终止。

2.png

启动端口 0 发送完成中断(事件9) 、端口 0 接收字符中断(事件8)以及定时中断 0(SMB34 控制时间间隔,设置为最大255ms)(事件10)。

3.png
此定时中断 0作为接收超时定时功能的实现,在接收消息过程中,在接收字符中断程序中不停复位定时中断 0。当消息所有字符接收完后,定时中断将在设定的255ms后动作,然后执行定时中断程序处理接收到的数据(如帧校验、PDU移入数据存储区等)。

接收字符中断程序

在程序的开始通过调用ATCH指令复位定时器中断0,因为重新连接时,定时中断功能会清除先前连接的所有累计时间,并开始重新计时。

4.png

然后通过控制指针把接收到的字符(SMB2)放入VB102开始的接收缓冲区

5.png
注意当以较高波特率(38.4 Kbps 到 115.2 Kbps)使用字符中断时,字符到达的时间间隔会非常短。例如,波特率为 38.4 Kbps 时的字符到达为 260  微秒,57.6 Kbps 时为 173 微秒,115.2   时为 86 微秒。这就要确保接收字符中断程序执行时间足够短,以避免字符丢失。

定时器0中断程序

端口空闲时,定时中断程序会被周期的(255ms)调用执行,所以如果未接收到数据应该跳过PDU处理程序的执行,及判断VW100=0 执行JMP。
当接收完ADU处理PDU时首先通过复位SM87.7禁用接收消息功能,处理完后再置位SM87.7以启用接收消息功能。

6.png

3.接收测试

通过串口调试软件发送包含1155个字符的data.txt文本到PLC

7.png

地址MW10表示接收到的字符数

8.gif


推荐阅读:


最后
若觉得文章对你有帮助,随手点在看、分享转发,也是支持和鼓励。

扫描下面二维码、关注后,在底部菜单中可查看更多内容!  


长按识别图中二维码关注


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码