硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4435|回复: 36
收起左侧

[客户分享] 最近改了个modbus主站的代码 ,发03功能码没读到数据,QQ:928135752,望各位不吝赐

[复制链接]

1

主题

10

回帖

1

积分

新手上路

积分
1
QQ
发表于 2016-11-29 16:43:49 | 显示全部楼层 |阅读模式
最近改了个modbus主站的代码 ,发03功能码没读到数据,,望各位不吝赐教。QQ:928135752(附代码)

Modbus主站DEMO.zip

7.98 MB, 下载次数: 4071

主站demo代码

回复

使用道具 举报

2

主题

76

回帖

82

积分

初级会员

积分
82
发表于 2016-11-30 19:58:48 | 显示全部楼层
什么东西???
回复

使用道具 举报

1

主题

10

回帖

1

积分

新手上路

积分
1
QQ
 楼主| 发表于 2016-12-1 11:11:32 | 显示全部楼层

回 a20084666 的帖子

a20084666:什么东西??? (2016-11-30 19:58) 
你好  ,就是用modbus主站发03功能码 读智能仪表的数据  ,读不上来。
回复

使用道具 举报

1

主题

10

回帖

1

积分

新手上路

积分
1
QQ
 楼主| 发表于 2016-12-1 13:13:50 | 显示全部楼层

回 a20084666 的帖子

a20084666:什么东西??? (2016-11-30 19:58) 
噫 你是合肥的啊 我是安庆的 老乡加个qq吧 有时间探讨下问题,928135752
回复

使用道具 举报

0

主题

1

回帖

0

积分

新手上路

积分
0
发表于 2016-12-3 10:19:05 | 显示全部楼层
借鉴一下楼主的思路
回复

使用道具 举报

2

主题

76

回帖

82

积分

初级会员

积分
82
发表于 2016-12-3 14:22:03 | 显示全部楼层

回 张扬飘雪 的帖子

张扬飘雪:噫 你是合肥的啊 我是安庆的 老乡加个qq吧 有时间探讨下问题,928135752 (2016-12-01 13:13) 
安庆那里的
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2016-12-3 20:54:01 | 显示全部楼层
[s:141][s:141][s:141][s:141][s:141][s:141]
回复

使用道具 举报

1

主题

10

回帖

1

积分

新手上路

积分
1
QQ
 楼主| 发表于 2016-12-6 14:26:18 | 显示全部楼层

回 a20084666 的帖子

a20084666:安庆那里的 (2016-12-03 14:22) 
桐城市的
回复

使用道具 举报

1

主题

10

回帖

1

积分

新手上路

积分
1
QQ
 楼主| 发表于 2016-12-6 14:28:15 | 显示全部楼层

回 千里足下 的帖子

千里足下:借鉴一下楼主的思路 (2016-12-03 10:19) 
[s:142]
回复

使用道具 举报

1

主题

10

回帖

1

积分

新手上路

积分
1
QQ
 楼主| 发表于 2016-12-11 15:22:56 | 显示全部楼层

回 jdsxt 的帖子

jdsxt:[s:141][s:141][s:141][s:141][s:141][s:141]
 (2016-12-03 20:54) 
[s:147][s:147]
回复

使用道具 举报

0

主题

1

回帖

0

积分

新手上路

积分
0
发表于 2016-12-16 17:35:16 | 显示全部楼层
我最经也在搞,485控制4路的继电器,然后自定义协议或者Modbus
回复

使用道具 举报

0

主题

2

回帖

0

积分

新手上路

积分
0
发表于 2016-12-20 16:10:44 | 显示全部楼层
看看
回复

使用道具 举报

6

主题

90

回帖

108

积分

初级会员

积分
108
QQ
发表于 2016-12-21 18:00:29 | 显示全部楼层
楼主,妹子让我喊你回家暖床[s:151]
回复

使用道具 举报

0

主题

17

回帖

17

积分

新手上路

积分
17
发表于 2016-12-22 16:20:44 | 显示全部楼层
借鉴一下楼主的思路
回复

使用道具 举报

1

主题

10

回帖

1

积分

新手上路

积分
1
QQ
 楼主| 发表于 2016-12-26 08:28:26 | 显示全部楼层

回 第九度 的帖子

第九度:楼主,妹子让我喊你回家暖床[s:151] (2016-12-21 18:00)
告诉那些妹子死心吧,
楼主最近外面又有了好多彩色的Flags
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2016-12-26 11:18:07 | 显示全部楼层
看看好不好啊
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2016-12-28 14:24:27 | 显示全部楼层
看看
回复

使用道具 举报

0

主题

1

回帖

0

积分

新手上路

积分
0
发表于 2017-2-8 17:23:47 | 显示全部楼层
谢谢分享~~~~~
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2017-2-10 14:56:40 | 显示全部楼层
看看怎么回事
回复

使用道具 举报

2

主题

24

回帖

30

积分

新手上路

积分
30
发表于 2017-2-14 17:03:35 | 显示全部楼层
看一下楼主的东西,最近也在搞这个 。
回复

使用道具 举报

13

主题

38

回帖

77

积分

初级会员

积分
77
发表于 2017-2-16 10:37:31 | 显示全部楼层
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2017-2-17 13:35:16 | 显示全部楼层
回复一下看一下,正在搞这个
回复

使用道具 举报

3

主题

22

回帖

31

积分

新手上路

积分
31
发表于 2017-2-23 13:00:03 | 显示全部楼层
做的东西应该比较实用
回复

使用道具 举报

0

主题

1

回帖

0

积分

新手上路

积分
0
发表于 2017-2-26 21:34:45 | 显示全部楼层
看看
回复

使用道具 举报

8

主题

13

回帖

65

积分

初级会员

积分
65
发表于 2017-3-2 09:42:59 | 显示全部楼层
是什么东西
回复

使用道具 举报

1

主题

35

回帖

38

积分

新手上路

积分
38
发表于 2017-3-7 16:13:36 | 显示全部楼层
帮顶
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2017-3-10 22:51:57 | 显示全部楼层
...................
回复

使用道具 举报

8

主题

21

回帖

45

积分

新手上路

积分
45
发表于 2017-3-11 22:47:45 | 显示全部楼层
看看
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2017-3-24 10:48:05 | 显示全部楼层
帮顶
回复

使用道具 举报

13

主题

56

回帖

95

积分

初级会员

积分
95
发表于 2017-4-19 16:37:27 | 显示全部楼层
俺精通MODBUS主站+从站编程。
我是新手,请多多关照。
回复

使用道具 举报

13

主题

56

回帖

95

积分

初级会员

积分
95
发表于 2017-4-19 16:38:46 | 显示全部楼层
俺精通MODBUS协议主站+从站编程。我目前的工程项目基本上都用MODBUS主站+从站协议进行通信。
我是新手,请多多关照。
回复

使用道具 举报

13

主题

56

回帖

95

积分

初级会员

积分
95
发表于 2017-4-19 16:55:49 | 显示全部楼层
你检查一下,用示波器确信数据是否到达端口。

    你的MODBUS主站有几个缺陷:

      (1)、你的主站的架构貌似只能读1个从站吧,如果想读N个从站的话,比较困难。
      (2)、你的主站怎么没有体现出超时时间呢?
                   不外乎主站呼叫从站,可能有3种情况:
                        (2.1)主站收到从站正确的应答报文
                          (2.2)主站贴到从站错误的报文
                          (2.3)主站没有收到从站的应答报文。

                   程序中没有体现2.2和2.3
我是新手,请多多关照。
回复

使用道具 举报

13

主题

56

回帖

95

积分

初级会员

积分
95
发表于 2017-4-19 16:59:00 | 显示全部楼层
定义MODBUS主站状态机
enum MODBUS_HOSTS_STATUS
{   
    enum_MODBUS_STATUS_1,   
    enum_MODBUS_STATUS_2,
    enum_MODBUS_STATUS_3,   
    enum_MODBUS_STATUS_4,
    enum_MODBUS_STATUS_RECV_OVER ,
    enum_MODBUS_STATUS_RECV_ERROR ,
    enum_MODBUS_STATUS_TIME_OUT ,
    enum_MODBUS_STATUS_6,   
    enum_MODBUS_STATUS_7,
   
};




void MBHosts_Init(void);
void MBHosts_ReadCoilRegisters(uint8_t DeviceAddr , uint16_t startAddr , uint16_t registerAmount , uint8_t RepeatCount , MODBUS_HOSTS_QUEUE *Queue);
void MBHosts_ReadDiscreteRegisters(uint8_t DeviceAddr , uint16_t startAddr , uint16_t registerAmount , uint8_t RepeatCount , MODBUS_HOSTS_QUEUE *Queue);
void MBHosts_ReadInputRegisters(uint8_t DeviceAddr , uint16_t startAddr , uint8_t registerAmount , uint8_t RepeatCount , MODBUS_HOSTS_QUEUE *Queue);
void MBHosts_ReadHoldingRegisters(uint8_t DeviceAddr , uint16_t startAddr , uint8_t registerAmount , uint8_t RepeatCount , MODBUS_HOSTS_QUEUE *Queue);
void MBHosts_ForceSingleCoil(uint8_t DeviceAddr , uint16_t startAddr , uint16_t On_Off , uint8_t RepeatCount , MODBUS_HOSTS_QUEUE *Queue);
void MBHosts_PresetSingleHoldingRegister(uint8_t DeviceAddr , uint16_t startAddr , uint16_t Value , uint8_t RepeatCount , MODBUS_HOSTS_QUEUE *Queue);
void MBHosts_ForceMultipleCoil(uint8_t DeviceAddr , uint16_t startAddr , uint16_t registerAmount , uint8_t Data_Buffer[] , uint8_t RepeatCount , MODBUS_HOSTS_QUEUE *Queue);
void MBHosts_PresetMultipleHoldingRegisters(uint8_t DeviceAddr , uint16_t startAddr , uint8_t registerAmount , int16_t Data_Buffer[] , uint8_t RepeatCount , uint8_t CodeFunc , MODBUS_HOSTS_QUEUE *Queue);




  以下为MODBUS主站轮巡程序

void USART2_MODBUS_Hosts_Poll(void)
{   
    uint16_t i;
   
    switch (MB_USART2.MBHosts_Query_isr)
    {        
        case enum_MODBUS_STATUS_1:
            if (!Queue_Empty())
            {
                Out_Queue(&USART2_MBHOSTSQueue);
                MB_USART2.MBHosts_Query_isr = enum_MODBUS_STATUS_2;
            }
            break;   
        
        case enum_MODBUS_STATUS_2:   
            MB_USART2.MBHosts_Query_isr = enum_MODBUS_STATUS_3;
            for (i = 0 ; i < USART2_MBHOSTSQueue.SendByteCount ; i++)
                MB_USART2.send_buffer = USART2_MBHOSTSQueue.Data;
            MB_USART2.sendCount = USART2_MBHOSTSQueue.SendByteCount;
            USART2_Begin_Send();

            #ifdef __DEBUG_stm32f407__
                USART2_MODBUS_send_count++;
            #endif            
            break;        
               
        case enum_MODBUS_STATUS_RECV_OVER:
            //TIM_Cmd(TIM5, DISABLE);   
            //TIM_SetCounter(TIM5,0x0000);   

            MB_USART2.MBHosts_Poll_Time = 0x00;        
            MB_USART2.MBHosts_Query_isr = enum_MODBUS_STATUS_7;
            break;        
        
        case enum_MODBUS_STATUS_RECV_ERROR:
        case enum_MODBUS_STATUS_TIME_OUT:
            TIM_Cmd(TIM5, DISABLE);
            TIM_SetCounter(TIM5,0x0000);

            MB_USART2.MBHosts_Poll_Time = 0x00;
            if (--USART2_MBHOSTSQueue.RepeatCount >= 1)
                MB_USART2.MBHosts_Query_isr = enum_MODBUS_STATUS_6;                    
            else
                MB_USART2.MBHosts_Query_isr = enum_MODBUS_STATUS_7;
            break;

    }            
}
我是新手,请多多关照。
回复

使用道具 举报

0

主题

1

回帖

0

积分

新手上路

积分
0
发表于 2017-10-11 14:19:29 | 显示全部楼层
学习一下
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2017-11-5 11:49:11 | 显示全部楼层
学习
回复

使用道具 举报

5

主题

179

回帖

194

积分

初级会员

积分
194
发表于 2017-11-14 21:57:56 | 显示全部楼层
单步调试吧
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-10 12:55 , Processed in 0.406016 second(s), 34 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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