网站首页 > 博客文章 正文
上一篇文章我们搞清楚了固定长度报文,和不固定长度报文通过时间来判断报文的起始与结束的原理,本文我们先对固定长度报文方式进行编程。
1、寄存器设定
编写程序之前我们先看看对应的特殊位寄存器应该如何设置。
SMB30 = 2#00001001=16#9
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#10011100 =16#9C
1) 不使用中断条件作为检测信息的开始。第1位。SM87.1=0
2) 当SMW92中的定时时间超出时终止接收。第2、位。SM87.2=1
3) 定时器是信息定时器。第3位。SM87.3=1
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 = 6
由于我们设定SM87.3为1确定使用固定报文长度方式,假设报文长度为6个字符,那么在9600bps通讯速率下1个字符(10个位)的接收需要1.04ms,6个字符的接收就需要6.24ms,因此将SMW92设定成6表示从接收到第一个字符开始后6ms停止接收信息,同时空闲4ms后(SMW90 = 4)接收到的第一个字符是新信息的开始。
SMB94 = 255
SMB94定义接收缓冲区大小,此处定义为最大255字节。(注:接收缓冲区是用来存放接收到的数据的区域,最大255字节,大家可以根据通讯情况自由定义。)
2、程序编写
以上就是固定报文长度方式下接收数据的程序,此处我们设定的报文长度是6个字符,下面我们通过串口调试软件给PLC发送7个字符长度(AA 1122 BB 23 45 C1)的一个报文看看会发生什么情况。
由图 2-4状态表监控结果我们可以发现我们只能接收到6个字符,第7个字符C1并没有接收到。
(未完待续)
作者:马乐
技成培训原创,未经授权不得转载,违者必究!
——END——
猜你喜欢
- 2024-09-21 1750. 删除字符串两端相同字符后的最短长度
- 2024-09-21 C++趣味实用小实例:不使用变量实现求字符串长度的函数
- 2024-09-21 哪种网络密码安全性更高(哪些密码最安全)
- 2024-09-21 为提高安全性,LastPass现在要求用户的密码长度至少达到12字符
- 2024-09-21 excel函数利用FIND函数和MID函数组合提取文本中间指定长度的文本
- 2024-09-21 尚学堂知识整理:java字符串创建和长度
- 2024-09-21 MySQL中varchar类型字段最大长度是多少
- 2024-09-21 C/C++面试宝典:求字符串的最大长度回文
- 2024-09-21 Java中的String,有没有长度限制?
- 2024-09-21 python笔记8:静静一起来学习-字符串相关方法
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)