yodrome 发表于 2014-12-10 09:48:23

威纶触摸屏MODBUS通讯如何区分一组数据?

本帖最后由 yodrome 于 2014-12-10 11:03 编辑

我用的威纶TK6070IP跟我的STM8通过RS232连,屏上烧的他们的范例。
屏会不停的发送指令过来,一次8个字节。
我的STM8是通过串口接收中断来接收,然后存到一个数组里。现在发现数组里存的8个字节并不和发过来的第一个字节到第八个字节一一对应的。
应该如何处理,让我知道什么时候开始接收,什么时候结束一组字节的接收。

MODBUS RTU协议里说的等待T1-T2-T3的时间判断开始接收一组数据,这个在单片机里如何实现呢。

semonpic 发表于 2014-12-10 10:50:24

你应该移植一个modbus 协议到你的STM32 里。

modbus 协议已经规定如何定义一帧数据。
modbus RTU 是,超过3.5个字符间隔没有新数据,就认为一帧结束。至于这一帧是不是完整的,还得上层软件校验。
modbus ASSIC这个我没用过,不清楚。

yodrome 发表于 2014-12-10 11:03:02

semonpic 发表于 2014-12-10 10:50
你应该移植一个modbus 协议到你的STM32 里。

modbus 协议已经规定如何定义一帧数据。


你好,我移植了MODBUS协议到我的板子里。
我用的也是MODBUS RTU。
我看MODBUS RTU协议里说的,开头的T1-T2-T3-T4等待时间来判断一组数据的开始,这个在代码里应该如何实现呢。
我看的范例里是没有这个判断的

semonpic 发表于 2014-12-10 11:08:13

yodrome 发表于 2014-12-10 11:03
你好,我移植了MODBUS协议到我的板子里。
我用的也是MODBUS RTU。
我看MODBUS RTU协议里说的,开头的T1-T ...

freemodbus 的做法是,有数据来,立即打开定时器,每接受一个字符,清零定时器。当定时器超时,认为一帧数据完成

seeyou2013 发表于 2014-12-10 17:47:21

确定你的串口接收函数是好的吗?? ---------------------这边弄过直接一般接收就可以了,不过关t1t2t3直接组帧就可以通信了

也移植过那个freemodbus      你可以参照坛子里坛友xukai1010****的帖子很实用,方便移植

yodrome 发表于 2014-12-10 17:59:01

seeyou2013 发表于 2014-12-10 17:47
确定你的串口接收函数是好的吗?? ---------------------这边弄过直接一般接收就可以了,不过关t1t2t3直 ...

我测试下来应该就是我的串口接收函数出问题了。
能接收数据,中断也能进来。
但是存下来的缓存用的Recev_buff 里的数据不对。
不知道怎么处理

seeyou2013 发表于 2014-12-10 18:01:18

yodrome 发表于 2014-12-10 17:59
我测试下来应该就是我的串口接收函数出问题了。
能接收数据,中断也能进来。
但是存下来的缓存用的Recev_ ...

串口接收函数找到问题就好了 ,先解决这个在调试下面呗下班了88
页: [1]
查看完整版本: 威纶触摸屏MODBUS通讯如何区分一组数据?