搜索
bottom↓
回复: 180
打印 上一主题 下一主题

简单的MODBUS协议实现一主机对多从机轮询的示例(主从机均为51单片机,485通讯,PROTEUS仿

  [复制链接]

出0入0汤圆

跳转到指定楼层
1
发表于 2011-2-9 03:11:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在开发产品的时候做的一个通讯测试工装,就是做一个简易小巧的模块安装在产品测试架上方便跑流水线,模块作为主机轮询若干产品。这样就省去了使用计算机加485转换器的麻烦。
在工装设计之前做了这么一个仿真示例,展示主机与从机之间应用简易的MODBUS 04命令进行轮询会话的过程。PROTEUS设计中有标示,程序中代码有注释,希望能对需要的朋友有所帮助。

今天我小改了下,给每个51从设备增加了一个I2C接口的ADC0831,它的用法大家都懂得,就是为了增加一个采样信号,主机通过协议来轮询这个采样信号,解析后显示在主机的LCD屏的对应位置上。

C代码、HEX文件、PROTEUS设计ourdev_615093XEN4TE.rar(文件大小:178K) (原文件名:POLLING-new.rar)

PROTEUS设计运行 (原文件名:POLLING.JPG)

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

2
发表于 2011-2-9 06:17:02 | 只看该作者

出0入0汤圆

3
发表于 2011-2-9 06:24:41 | 只看该作者
马克思

出0入0汤圆

4
发表于 2011-2-9 07:07:09 | 只看该作者
mk

出0入0汤圆

5
发表于 2011-2-9 08:22:52 | 只看该作者
很好!

出0入0汤圆

6
发表于 2011-2-9 09:10:38 | 只看该作者
回复【楼主位】lylatyou 张伯伦
-----------------------------------------------------------------------

学习,3Q

出0入0汤圆

7
发表于 2011-2-9 09:15:51 | 只看该作者
mark

出0入0汤圆

8
发表于 2011-2-9 11:26:36 | 只看该作者
mark

出0入0汤圆

9
发表于 2011-2-9 12:09:49 | 只看该作者
好东东,留名

出0入0汤圆

10
发表于 2011-2-9 12:29:04 | 只看该作者
mark

出0入0汤圆

11
发表于 2011-2-9 12:55:21 | 只看该作者
mark

出0入0汤圆

12
发表于 2011-2-9 13:06:01 | 只看该作者
mark!~

出0入0汤圆

13
发表于 2011-2-9 16:10:50 | 只看该作者
mark

出0入0汤圆

14
发表于 2011-2-9 18:26:58 | 只看该作者
mark

出0入4汤圆

15
发表于 2011-2-9 19:13:21 | 只看该作者
MODBUS标记,谢谢

出0入0汤圆

16
发表于 2011-2-9 21:12:11 | 只看该作者

出0入0汤圆

17
 楼主| 发表于 2011-2-10 03:10:08 | 只看该作者
修改了下,从设备加了个ADC采集信号,主设备用LCD把轮询到的采样信号显示出来。

出0入0汤圆

18
发表于 2011-2-10 07:02:14 | 只看该作者
mark

出0入0汤圆

19
发表于 2011-2-10 10:26:02 | 只看该作者
mark

出0入0汤圆

20
发表于 2011-2-12 11:00:18 | 只看该作者
认真学习下借鉴

出0入0汤圆

21
发表于 2011-2-12 13:14:14 | 只看该作者
呵呵  不错的  学习下

出0入0汤圆

22
发表于 2011-2-12 15:38:56 | 只看该作者
mark

出0入0汤圆

23
发表于 2011-2-16 15:02:27 | 只看该作者
学习了。

出0入0汤圆

24
发表于 2011-2-16 15:15:56 | 只看该作者
谢谢。。。。。。

出0入0汤圆

25
发表于 2011-2-24 13:00:14 | 只看该作者
无私的朋友,可以留下QQ吗,学习学习。

出0入0汤圆

26
发表于 2011-2-28 20:24:38 | 只看该作者
呵呵,好强大

出0入0汤圆

27
发表于 2011-3-1 08:56:40 | 只看该作者
mark!

出215入118汤圆

28
发表于 2011-3-1 09:35:12 | 只看该作者
mark

出0入0汤圆

29
发表于 2011-3-11 19:06:26 | 只看该作者
不错,谢谢楼主无私的共享,学习了!

出0入0汤圆

30
发表于 2011-3-11 19:34:46 | 只看该作者
mark

出0入0汤圆

31
发表于 2011-3-14 01:38:34 | 只看该作者
马克思

出0入0汤圆

32
发表于 2011-3-14 09:00:33 | 只看该作者
mark

出0入0汤圆

33
发表于 2011-3-26 15:17:17 | 只看该作者
mark

出0入0汤圆

34
发表于 2011-3-26 15:28:36 | 只看该作者
标记

出0入0汤圆

35
发表于 2011-3-27 11:25:26 | 只看该作者
适合我这菜鸟!谢谢LZ

出0入0汤圆

36
发表于 2011-3-31 16:05:36 | 只看该作者
mark

出0入0汤圆

37
发表于 2011-3-31 17:22:30 | 只看该作者
谢谢楼主,学习了

出0入0汤圆

38
发表于 2011-3-31 19:43:36 | 只看该作者
mark,顶起

出0入0汤圆

39
发表于 2011-4-1 20:57:19 | 只看该作者
回复【楼主位】lylatyou  张伯伦
-----------------------------------------------------------------------

楼主你好,我是个初学者正研究这个程序

请问这个子程序void mdproc(uchar b)
{        Uint16 temp16_1,temp16_2;
        if(nodeok==0)
        {        if(b==send101[0])
                {        nodeok=1;
                        revptr=1;
                        mrx[0]=b;
                }
        }
        else if(revptr<11)
        {        mrx[revptr++]=b;
        }
        else
        {
                revptr=0;
                nodeok=0;
                temp16_1=Crc16(mrx,9);
                temp16_2=mrx[9];
                temp16_2<<=8;
                temp16_2|=mrx[10];
                if(temp16_1==temp16_2)
                {        crcok=1;
                        //rcnt=~rcnt;
                        //rcnt=~rcnt; // generate a pulse to the counter in proteus when received correct frame
                }
                                               
        }
这句temp16_2|=mrx[10]是不是有问题,还有procok,crcok这两个变量分都代表什么

出0入0汤圆

40
发表于 2011-4-3 16:48:32 | 只看该作者
mark

出0入0汤圆

41
发表于 2011-4-3 17:05:27 | 只看该作者
楼主能不能介绍一下协议,超时和重发。热拔插会不会死机

出0入0汤圆

42
 楼主| 发表于 2011-4-3 23:25:03 | 只看该作者
LS的,MODBUS是一个软件的协议,如果能解决硬件的抗静电过压等问题,热插拔是不会有问题的。

超时与重发都是你自己写代码来控制的。比如你发送一个请求帧出去后开始计时,收到对应的ID设备的有效回复后,关闭计时器并清除及时,然后重复下一次操作。如果在计时上限没有收到有效的回复,则掉包计数器加1,然后重发并重新计时,掉包计数器达到你预定的数值后,则置位通讯错误信号。。。。。起始MODBUS可以理解为一种思想,很多都是自己编程实现的,当然也有现成的标准MODBUS协议包可以直接来用,现实中为了优化,只使用少量的功能号。

出0入0汤圆

43
发表于 2011-4-3 23:38:58 | 只看该作者
这个要顶呀。

出0入0汤圆

44
发表于 2011-4-18 09:55:12 | 只看该作者
多谢楼主,好东西啊

出0入0汤圆

45
发表于 2011-4-23 18:58:05 | 只看该作者
mark

出0入0汤圆

46
发表于 2011-4-25 16:20:15 | 只看该作者
谢谢!

出0入0汤圆

47
发表于 2011-5-3 15:41:27 | 只看该作者
好,谢谢楼主共享

出0入0汤圆

48
发表于 2011-9-1 11:28:15 | 只看该作者
mark谢谢楼主共享

出0入0汤圆

49
发表于 2011-9-1 11:40:56 | 只看该作者
学习,3Q

出0入0汤圆

50
发表于 2011-9-1 11:47:10 | 只看该作者
留上脚印,谢LZ

出0入0汤圆

51
发表于 2011-9-1 11:56:20 | 只看该作者
回复【51楼】Bicycle 单车
留上脚印,谢lz
-----------------------------------------------------------------------

+1

出0入0汤圆

52
发表于 2011-9-1 13:45:17 | 只看该作者
mark

出0入0汤圆

53
发表于 2011-9-1 14:23:43 | 只看该作者
严重顶!

出0入0汤圆

54
发表于 2011-9-14 17:23:34 | 只看该作者
mark

出0入0汤圆

55
发表于 2011-9-17 14:53:35 | 只看该作者
mark

出0入0汤圆

56
发表于 2011-9-17 16:38:02 | 只看该作者
mark,谢谢

出0入0汤圆

57
发表于 2011-9-26 11:26:32 | 只看该作者
多谢!

出0入0汤圆

58
发表于 2011-10-11 17:23:03 | 只看该作者
LZ请问这种多机通信中的“轮询”啥意思?难道是逐个扫描?

出0入97汤圆

59
发表于 2011-10-22 14:48:37 | 只看该作者
mark

出0入0汤圆

60
发表于 2011-10-22 15:11:30 | 只看该作者
mark

出0入0汤圆

61
发表于 2011-10-22 18:03:19 | 只看该作者
mark

出0入0汤圆

62
发表于 2011-10-22 18:19:00 | 只看该作者
modbus mark

出0入0汤圆

63
发表于 2011-10-22 19:15:07 | 只看该作者
mark

出0入0汤圆

64
发表于 2011-10-22 20:58:14 | 只看该作者
记号

出0入0汤圆

65
发表于 2011-11-10 22:48:09 | 只看该作者
谢谢楼主

出0入0汤圆

66
发表于 2011-12-8 12:40:24 | 只看该作者
回复【楼主位】lylatyou 张伯伦
-----------------------------------------------------------------------

好帖子!

出0入0汤圆

67
发表于 2011-12-8 13:24:32 | 只看该作者
必顶!

出0入0汤圆

68
发表于 2011-12-8 17:44:31 | 只看该作者
mark

出0入0汤圆

69
发表于 2011-12-8 18:02:42 | 只看该作者
回复【40楼】liu_xf 新发
-----------------------------------------------------------------------

超时和重发在modbus协议里面讲得比较清楚啦。协议我想你有的,如果没有,看我发的主题,有上传。

另:freemodbus源程序里面对重发和超时做得比较好,我正在移植到430.

出0入0汤圆

70
发表于 2011-12-8 18:19:48 | 只看该作者
顶一个!mark!

出0入0汤圆

71
发表于 2011-12-8 18:20:23 | 只看该作者
呵呵

出0入0汤圆

72
发表于 2011-12-8 18:25:47 | 只看该作者
好东西 ,学习学习

出0入0汤圆

73
发表于 2011-12-8 20:57:30 | 只看该作者
这个挺好啊

出0入0汤圆

74
发表于 2011-12-8 22:02:38 | 只看该作者
学习学习

出0入0汤圆

75
发表于 2011-12-8 23:17:44 | 只看该作者
mark

出0入0汤圆

76
发表于 2011-12-10 10:26:45 | 只看该作者
狂顶啊,正在学习!

出0入0汤圆

77
发表于 2011-12-14 16:13:02 | 只看该作者
if(ruf1[3]==0xed)       
                {
                 LCD_Write_String(1,5,"456");
                 delay_ms(500);

                if((addr==0x10)&&(ruf1[2]==0x0)){ FLAG1=1;        }
                if((addr==0x10)&&(ruf1[2]==0xff)) {FLAG1=0;        }
                 LCD_Write_String(1,5,"####");

                  delay_ms(500);
                if((addr==0x20)&&(ruf1[2]==0x0)) {FLAG2=0;}
                if((addr==0x20)&&(ruf1[2]==0xff)){ FLAG2=1;}
       

                   LCD_Write_String(1,5,"ruf1[3]");
          
           }}

出0入0汤圆

78
发表于 2012-1-17 11:10:57 | 只看该作者
来学习下楼主的思想!

出0入0汤圆

79
发表于 2012-1-17 14:40:58 | 只看该作者
顶一下

出0入0汤圆

80
发表于 2012-1-25 22:38:02 | 只看该作者
mark,以后有用

出0入0汤圆

81
发表于 2012-1-26 15:38:25 | 只看该作者
非常有用...可以拿来做多芯片机器

出0入0汤圆

82
发表于 2012-2-6 09:53:39 | 只看该作者

出0入0汤圆

83
发表于 2012-2-7 21:41:56 | 只看该作者
mark

出0入0汤圆

84
发表于 2012-2-19 14:54:34 | 只看该作者
可以看看

出0入85汤圆

85
发表于 2012-2-19 15:08:46 | 只看该作者
mark

出0入0汤圆

86
发表于 2012-2-21 16:24:27 | 只看该作者
mark 一定要加crc!

出0入0汤圆

87
发表于 2012-2-22 16:40:18 | 只看该作者
学习一下,谢谢分享

出0入0汤圆

88
发表于 2012-2-22 16:53:09 | 只看该作者
好资料啊!谢谢

出0入0汤圆

89
发表于 2012-2-28 14:45:26 | 只看该作者
想了解一下校验部分是怎样做的

出0入0汤圆

90
发表于 2012-3-3 09:06:50 | 只看该作者
谢谢楼主!

出0入0汤圆

91
发表于 2012-4-21 16:34:10 | 只看该作者
我想要啊,能把所有程序什么的发我邮箱吗?921905701@qq.com

出0入0汤圆

92
发表于 2012-5-2 21:24:47 | 只看该作者
楼主大哥,这是老论坛附件了 下载不了,能发到我邮箱:583362324@qq.com 急需要!  论坛管理者连续看了一个星期杂还是不能下载! 郁闷,纠结 下载不了 就暂封了

出0入0汤圆

93
发表于 2012-5-3 08:10:08 | 只看该作者
正在学习modbus,用51上传到PC机的modbus模拟器。求解中

出0入0汤圆

94
发表于 2012-5-3 09:14:17 | 只看该作者
不错啊,mark

出0入0汤圆

95
发表于 2012-5-4 11:32:42 | 只看该作者
来支持下。感谢!

出0入0汤圆

96
发表于 2012-5-15 15:22:13 | 只看该作者
mark
                                 

出0入0汤圆

97
发表于 2012-5-15 15:31:35 | 只看该作者
不错啊      

出0入0汤圆

98
发表于 2012-5-15 15:55:44 | 只看该作者
MARK!!!!!!!!!!!!

出0入16汤圆

99
发表于 2012-5-15 16:51:34 来自手机 | 只看该作者
下来研究一下架构

出0入0汤圆

100
发表于 2012-10-13 20:22:49 | 只看该作者
研究一下楼主的思路!
学艺不精,代码看了很多不懂啊!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-23 20:42

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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