OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2951|回复: 15

modbus串口问题

[复制链接]

2

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2016-9-26
在线时间
16 小时
发表于 2016-12-22 08:21:27 | 显示全部楼层 |阅读模式
1金钱
Modbus移植到自己的板子上,如果单用串口1,收发是正常的。单用串口2,收发也是好用的。但是两个串口同时打开,就只能用串口2收发,而串口1无法收到值数(两者并不是同时进行)。想问如何处理?或者是freemodbus里还有什么是需要设置的?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

19

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2015-8-23
在线时间
20 小时
发表于 2016-12-22 09:06:21 | 显示全部楼层
回复

使用道具 举报

15

主题

406

帖子

0

精华

高级会员

Rank: 4

积分
795
金钱
795
注册时间
2015-3-26
在线时间
151 小时
发表于 2016-12-22 10:06:18 | 显示全部楼层
优先级
回复

使用道具 举报

0

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2016-12-22
在线时间
8 小时
发表于 2016-12-22 10:13:06 | 显示全部楼层
freemodbus采用的是状态机机制,一个状态机同一时刻只能有一个状态,有可能是串口1接收完成进入了其他状态,串口2就无法正常接收了!
回复

使用道具 举报

2

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2016-9-26
在线时间
16 小时
 楼主| 发表于 2016-12-22 10:34:34 | 显示全部楼层
亮仔同学 发表于 2016-12-22 10:13
freemodbus采用的是状态机机制,一个状态机同一时刻只能有一个状态,有可能是串口1接收完成进入了其他状态 ...

同一时刻,我用USB转TTL接的只有一个串口啊。。如果是这样的情况,比如我先接了串2,通了,我重启后,接串1,串1该通啊……可是不管怎么弄,都只有串口2可用,串口1没法动。
回复

使用道具 举报

2

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2016-9-26
在线时间
16 小时
 楼主| 发表于 2016-12-22 10:34:54 | 显示全部楼层

我并没有同时接俩串口……也要设优先级?
回复

使用道具 举报

2

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2016-9-26
在线时间
16 小时
 楼主| 发表于 2016-12-22 11:10:38 | 显示全部楼层
我刚才调试时,发现我串口1根本没有调用eMBRTUSend。。。这是为何?
回复

使用道具 举报

50

主题

193

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-4-11
在线时间
141 小时
发表于 2016-12-22 11:19:14 | 显示全部楼层
krystal 发表于 2016-12-22 11:10
我刚才调试时,发现我串口1根本没有调用eMBRTUSend。。。这是为何?

我最近也在学习MODBUS通信,请问,我主机发送指令,从机只能接收第一个字节是为什么?需要怎么修改呢?能贴出你接收那块的代码让我学习下吗?不胜感激!
回复

使用道具 举报

15

主题

406

帖子

0

精华

高级会员

Rank: 4

积分
795
金钱
795
注册时间
2015-3-26
在线时间
151 小时
发表于 2016-12-22 11:43:14 | 显示全部楼层
我自己写的 modbus算法,纯硬件解决方案,每个485需要一个串口和一个定时器
回复

使用道具 举报

50

主题

193

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-4-11
在线时间
141 小时
发表于 2016-12-22 13:44:19 | 显示全部楼层
xyl210xyl 发表于 2016-12-22 11:43
我自己写的 modbus算法,纯硬件解决方案,每个485需要一个串口和一个定时器

能发出来让我学习学习吗?
我定时5ms,每次发10个字节,只能收到一个字节就进中断了。
然后状态都初始化了,收不到后边的字节。
我定时时间长点 也是这样的。
回复

使用道具 举报

15

主题

406

帖子

0

精华

高级会员

Rank: 4

积分
795
金钱
795
注册时间
2015-3-26
在线时间
151 小时
发表于 2016-12-22 17:43:04 | 显示全部楼层
滴丶滴 发表于 2016-12-22 13:44
能发出来让我学习学习吗?
我定时5ms,每次发10个字节,只能收到一个字节就进中断了。
然后状态都初始 ...

你定时怎么实现的?
回复

使用道具 举报

50

主题

193

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-4-11
在线时间
141 小时
发表于 2016-12-22 19:16:10 | 显示全部楼层
xyl210xyl 发表于 2016-12-22 17:43
你定时怎么实现的?

定时怎么实现?
就写了一个定时器,40ms,时间到了就进入中断函数, 在进行数据处理等时,会不断初始化定时器。
回复

使用道具 举报

6

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
293
金钱
293
注册时间
2016-1-7
在线时间
54 小时
发表于 2016-12-23 00:02:08 | 显示全部楼层
那就用asci方式也挺靠谱的,拆分数据包
回复

使用道具 举报

15

主题

406

帖子

0

精华

高级会员

Rank: 4

积分
795
金钱
795
注册时间
2015-3-26
在线时间
151 小时
发表于 2016-12-23 09:33:10 | 显示全部楼层
滴丶滴 发表于 2016-12-22 19:16
定时怎么实现?
就写了一个定时器,40ms,时间到了就进入中断函数, 在进行数据处理等时,会不断初始化 ...

40ms的依据是什么
回复

使用道具 举报

2

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2016-9-26
在线时间
16 小时
 楼主| 发表于 2016-12-23 13:30:31 | 显示全部楼层
总算找到原因了。因为函数用的是公共函数,所以把串口1和串口2的收写在了一起,导致在串口1收的时候,值又被第二次的赋值给盖了。。。低级错误啊……
回复

使用道具 举报

7

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2015-9-16
在线时间
10 小时
发表于 2016-12-24 11:21:11 | 显示全部楼层
FREEMB不支持复用
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-26 11:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表