指针和固定大小缓冲区_RS-485通讯:如何对固定长度报文方式来编程?这种专业好文不多见...

上一篇文章我们搞清楚了固定长度报文,和不固定长度报文通过时间来判断报文的起始与结束的原理,本文我们先对固定长度报文方式进行编程。

1、寄存器设定

编写程序之前我们先看看对应的特殊位寄存器应该如何设置。

SMB30 = 2#00001001=16#9

c2c5fa86528f3b16343ffe5b27f0fa3f.png

图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#10011100 =16#9C

6072bc55aa5f8735677485deaaddd4c1.png

图1-2

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、程序编写

be15147e0a18d541ef85c2b48b979ac7.png

图2-1

af1b7215a270e4ee2deded782bdebf22.png

图2-2

以上就是固定报文长度方式下接收数据的程序,此处我们设定的报文长度是6个字符,下面我们通过串口调试软件给PLC发送7个字符长度(AA 1122 BB 23 45 C1)的一个报文看看会发生什么情况。

bb3f6589836624ccbba1a50928cac9ec.png

图2-3

36a0d26d9beee4cfcf296e0d703b2cbc.png

图 2-4

由图 2-4状态表监控结果我们可以发现我们只能接收到6个字符,第7个字符C1并没有接收到。

(未完待续)

作者:马乐

技成培训原创,未经授权不得转载,违者必究!

——END——

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值