搜索
bottom↓
楼主: xukai871105

STM32 移植FreeModbus 详细过程

  [复制链接]

出0入0汤圆

发表于 2013-1-23 19:18:33 | 显示全部楼层
先收藏了!!

出0入0汤圆

发表于 2013-1-25 09:54:46 | 显示全部楼层
先谢楼主提供这么好的文章!!

出0入0汤圆

发表于 2013-1-25 10:05:21 | 显示全部楼层
呵呵,还可以

出0入0汤圆

发表于 2013-1-25 10:19:14 | 显示全部楼层
一直在用自定义的协议,这个有利于节省开发时间。

出0入0汤圆

发表于 2013-1-26 11:20:18 | 显示全部楼层
好贴,收藏学习!

出0入0汤圆

发表于 2013-1-28 17:12:16 | 显示全部楼层
这种精神才是我们论坛里面该有的精神。。。支持!!!!!

出0入0汤圆

 楼主| 发表于 2013-1-28 20:01:08 | 显示全部楼层
t2008101037 发表于 2013-1-28 17:12
这种精神才是我们论坛里面该有的精神。。。支持!!!!!

谢谢您的回复,我一定认真保持!

出0入0汤圆

发表于 2013-2-5 15:10:49 | 显示全部楼层
首先感谢楼主无私的开源精神,本人跟着楼主的步骤成功将freemodbus移植到C8T6,但是一旦使能IIC后MODBUS就不能通讯,望楼主能指点一二。IIC只在上电和掉电的时候进入中断,怎么会影响通讯呢?

出0入0汤圆

发表于 2013-2-6 00:17:29 来自手机 | 显示全部楼层
好资料,收藏

出0入0汤圆

发表于 2013-2-6 09:35:56 | 显示全部楼层
谢谢,学习 !!!

出0入8汤圆

发表于 2013-2-6 11:24:20 | 显示全部楼层
谢谢收藏了, 也许以后用的到。

出0入0汤圆

发表于 2013-2-6 12:11:58 | 显示全部楼层

哈哈 好贴啊

出0入0汤圆

发表于 2013-2-6 18:00:56 | 显示全部楼层
能用232上吗?

出0入0汤圆

 楼主| 发表于 2013-2-7 14:53:19 | 显示全部楼层
william_rain 发表于 2013-2-6 18:00
能用232上吗?

当然可以,PC机做主机,只能有一个从机,这个是RS232性质决定的!

出0入0汤圆

发表于 2013-2-14 13:06:20 | 显示全部楼层
标记一下,学习。

出0入0汤圆

发表于 2013-2-14 14:25:04 | 显示全部楼层
make一下。。。。

出0入0汤圆

发表于 2013-2-14 20:40:15 | 显示全部楼层
谢谢楼主。

出0入0汤圆

 楼主| 发表于 2013-2-14 21:55:26 | 显示全部楼层
peter_yu 发表于 2013-2-14 20:40
谢谢楼主。

不客气,最近几天花了点时间研究MODBUS TCP
没想到还是很复杂的,研究之后又结果再和大家分享!

出0入0汤圆

发表于 2013-2-21 18:48:56 | 显示全部楼层
modbus先记号,这个LZ相当的强

出0入0汤圆

发表于 2013-3-5 14:55:01 | 显示全部楼层
这个真当是好啊,楼主大牛

出0入0汤圆

发表于 2013-3-5 16:03:56 | 显示全部楼层
酷帖含金量就是高啊。。。哈哈哈哈

出0入0汤圆

发表于 2013-3-5 17:41:33 | 显示全部楼层
调试成功,如果STM32中有两个串口要用到freemodbus,该如何是好啊

出0入0汤圆

发表于 2013-3-6 11:35:18 | 显示全部楼层
发现保持寄存器对应地址的数值不停的变化。
在程序里设置
usRegHoldingBuf[0] = 123;
usRegHoldingBuf[1] = 456;

用MODBUS POLL调试发现 usRegHoldingBuf[0] usRegHoldingBuf[1]的值会变0,而usRegHoldingBuf[2],usRegHoldingBuf[3]的值会变123,456  

出0入0汤圆

发表于 2013-3-6 11:50:55 | 显示全部楼层
奇怪了,把寄存器单独定义在另一个文件里不行,定义到MAIN函数所在的文件就可以了

出0入0汤圆

发表于 2013-3-6 18:59:04 | 显示全部楼层
   

出0入0汤圆

发表于 2013-3-6 20:40:55 | 显示全部楼层
xukai871105 发表于 2013-2-14 21:55
不客气,最近几天花了点时间研究MODBUS TCP
没想到还是很复杂的,研究之后又结果再和大家分享! ...

期待楼主TCP版的FreeModbus。。。。。。

出0入0汤圆

发表于 2013-3-10 22:02:16 | 显示全部楼层
xukai871105 发表于 2012-8-17 11:08
我就是使用freemodbus和屏通(一家台湾的触摸屏公司)的触摸屏通信的!

其他的屏,例如西门子,欧姆龙的也 ...

请问,如果通过freemodbus把stm32采集到的数据送到触摸屏上显示,该怎么操作呢?freemodbus只能做从机,不能主动发起响应,是不是触摸屏定时发起读寄存器指令啊?

出0入0汤圆

发表于 2013-3-10 22:03:39 | 显示全部楼层
谢谢楼主,好东西,正好好好学习一下!

出0入0汤圆

发表于 2013-3-11 12:23:01 | 显示全部楼层
多謝分享

出0入0汤圆

 楼主| 发表于 2013-3-11 13:05:23 | 显示全部楼层
Baldwin 发表于 2013-3-10 22:02
请问,如果通过freemodbus把stm32采集到的数据送到触摸屏上显示,该怎么操作呢?freemodbus只能做从机, ...

触摸屏做主机!STM32做从机!

出0入0汤圆

发表于 2013-3-11 14:17:04 | 显示全部楼层
xukai871105 发表于 2012-8-17 11:08
我就是使用freemodbus和屏通(一家台湾的触摸屏公司)的触摸屏通信的!

其他的屏,例如西门子,欧姆龙的也 ...


这个freemodbus与屏通讯的时候是做从机?



===================================
米事了,刚翻到最后几页,看到了答案。。

出0入0汤圆

发表于 2013-3-11 15:07:41 | 显示全部楼层
好帖子,必须顶啊

出0入0汤圆

发表于 2013-3-11 16:24:23 | 显示全部楼层
有空还真有必要亲自动手实现一下modbus

出0入0汤圆

发表于 2013-3-11 16:54:56 | 显示全部楼层

好贴,收藏学习!

出0入0汤圆

发表于 2013-3-11 22:30:00 | 显示全部楼层
xukai871105 发表于 2013-3-11 13:05
触摸屏做主机!STM32做从机!

参考LZ的程序,FreeModbus已经能初步调试了,然后把它加入到我的项目中时出现了问题,特请教lz

在主函数中,Read_ADC()主要进行5路AD采样,函数中可能运算的时间太长,导致modbus通信出错,请问这是什么原因造成的。有什么改进方法吗?  
stm32(从机)    触摸屏(上位机)。

while(1)
{
   eMBPoll();
   Read_ADC();       
}

出0入0汤圆

发表于 2013-3-12 09:38:05 | 显示全部楼层
支持楼主等待楼主继续

出0入0汤圆

发表于 2013-3-13 09:57:25 | 显示全部楼层
先来跟着楼主搞下,开始咯。。。有问题得随时来问。

出0入0汤圆

 楼主| 发表于 2013-3-13 11:54:52 | 显示全部楼层
vichoice 发表于 2013-3-13 09:57
先来跟着楼主搞下,开始咯。。。有问题得随时来问。

先来跟楼主搞下。。。。。。。

出0入0汤圆

发表于 2013-3-13 16:44:58 | 显示全部楼层
xukai871105 发表于 2013-3-13 11:54
先来跟楼主搞下。。。。。。。

表误会,就是来跟着你的步伐做。

出0入0汤圆

发表于 2013-3-13 23:51:36 | 显示全部楼层
非常受用, 感谢楼主!
只是我在使用的时候发现必须将portserial.c中下面这段代码启用, 否则在加入总线的时候因为overrun导致整个通讯建立不了. 启用后测试没有再也没发现通讯问题. 不知道其他人有遇到整个问题没有.

  //测试看是否可以去除 2012-07-23
  //溢出-如果发生溢出需要先读SR,再读DR寄存器 则可清除不断入中断的问题
  /*
  if(USART_GetFlagStatus(USART1,USART_FLAG_ORE)==SET)
  {
    USART_ClearFlag(USART1,USART_FLAG_ORE); //读SR
    USART_ReceiveData(USART1);              //读DR
  }
  */

出0入0汤圆

 楼主| 发表于 2013-3-14 09:07:33 | 显示全部楼层
caicaizuo1 发表于 2013-3-13 23:51
非常受用, 感谢楼主!
只是我在使用的时候发现必须将portserial.c中下面这段代码启用, 否则在加入总线的时候 ...

我倒是没有遇到这个问题,程序在某个产品上使用了,约有半年。
我在程序中的确是去除了这段代码,没有问题,尚不清楚原因!

出0入0汤圆

发表于 2013-3-14 16:27:09 | 显示全部楼层
期待楼主能移植成功modbus_tcp

出0入0汤圆

发表于 2013-3-15 10:43:57 | 显示全部楼层
xukai871105 发表于 2012-8-18 22:23
多谢啊,混了那么久还没有一个帖子穿上裤子!
感觉穿上裤子的难度和写SCI论文难度差不多啊!

我也是用freemodbus做下位机,nmodbus做上位机,之前在ucos-II下跑了freemodbus效果很不错比之前自己写的效果好多了

出0入0汤圆

 楼主| 发表于 2013-3-16 20:07:59 | 显示全部楼层
disheng0425 发表于 2013-3-15 10:43
我也是用freemodbus做下位机,nmodbus做上位机,之前在ucos-II下跑了freemodbus效果很不错比之前自己写的 ...

我也是这样做的,的确很好用!

出0入0汤圆

发表于 2013-3-16 21:43:05 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2013-3-18 20:46:08 | 显示全部楼层
xukai871105 发表于 2012-8-12 20:00
五 定时器相关部分代码编写
        定时器的作用前面已经说明了,在这里就罗列一下相关的移植代码。定时器 ...

你好,现在我的FreeMODBUS 1.5已经移植成功了,可是对于四个回调函数与实际的电路板接口怎么联系起来还没有什么思路,能不能提供一个例程或者方法,多谢。

出0入0汤圆

 楼主| 发表于 2013-3-18 20:55:30 | 显示全部楼层
yfustbyf 发表于 2013-3-18 20:46
你好,现在我的FreeMODBUS 1.5已经移植成功了,可是对于四个回调函数与实际的电路板接口怎么联系起来还没 ...

四个回调函数和实际电路板连接我想并没有实际的关系,但是可以这样说或许是你的问题!

例如访问输入寄存器,输入寄存器对应传感器的检测结果,只有只读功能!
那么还需要一个传感器检测函数,循环读取AD结果,并把AD结果保存到输入寄存器数组中!
这样才可以建立传感器检测结果和输入寄存器的对应关系!

请注意MODBUS寄存器和单片机中的寄存器不是一个概念,MODBUS寄存器仅是一个RAM中的数组!
和具体的硬件电路其实没有直接关系,但有间接关系!

出0入0汤圆

发表于 2013-3-18 21:08:56 | 显示全部楼层
xukai871105 发表于 2013-3-18 20:55
四个回调函数和实际电路板连接我想并没有实际的关系,但是可以这样说或许是你的问题!

例如访问输入寄存 ...

嗯,谢谢你的回答,还是有些不清楚,我举个例子,比如我现在有一个传感器的数据(一位),该数据存放到变量Data中,那么我主机怎么样通过发送指令将数据读回?也就是说在如下的回调函数中,我怎样将变量Data和里面的变量联系在一起?移植的程序见下面。

eMBErrorCode
eMBRegInputCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs )
{
    eMBErrorCode    eStatus = MB_ENOERR;
    int             iRegIndex;

    if( ( (UINT16)usAddress >= REG_INPUT_START )
        && ( usAddress + usNRegs <= REG_INPUT_START + REG_INPUT_NREGS ) )
    {
        iRegIndex = ( int )( usAddress - usRegInputStart );
        while( usNRegs > 0 )
        {
            *pucRegBuffer++ = ( unsigned char )( usRegInputBuf[iRegIndex] >> 8 );
            *pucRegBuffer++ = ( unsigned char )( usRegInputBuf[iRegIndex] & 0xFF );
            iRegIndex++;
            usNRegs--;
        }
    }
    else
    {
        eStatus = MB_ENOREG;
    }
   
    return eStatus;
}

出0入0汤圆

发表于 2013-3-22 14:44:38 | 显示全部楼层
请问LZ,做modbus主机时,有什么好的推荐吗?

出0入0汤圆

发表于 2013-3-22 17:03:11 | 显示全部楼层
你叫徐凯,你是我高中同学吗,我们一起在正源读过书,我叫贺国全。qq317298937

出0入0汤圆

 楼主| 发表于 2013-3-23 14:11:16 | 显示全部楼层
yfustbyf 发表于 2013-3-18 21:08
嗯,谢谢你的回答,还是有些不清楚,我举个例子,比如我现在有一个传感器的数据(一位),该数据存放到变 ...

你可以在其他地方操作usRegInputBuf这个数组即可!

出0入0汤圆

 楼主| 发表于 2013-3-23 14:12:01 | 显示全部楼层
Baldwin 发表于 2013-3-22 14:44
请问LZ,做modbus主机时,有什么好的推荐吗?

抱歉,我暂时也没有什么好想法!难道我们可以自己写一个,然后开源!!
呵呵,我的个人想法!

出0入0汤圆

 楼主| 发表于 2013-3-23 14:13:10 | 显示全部楼层
quanguoheme 发表于 2013-3-22 17:03
你叫徐凯,你是我高中同学吗,我们一起在正源读过书,我叫贺国全。qq317298937 ...

呵呵,叫徐凯的真的是太多了!我在无锡读的高中!也在无锡的大学,还在无锡读的研究生!天啊,一直没有离开这个城市!

出0入0汤圆

发表于 2013-3-24 13:12:40 | 显示全部楼层
xukai871105 发表于 2013-3-23 14:11
你可以在其他地方操作usRegInputBuf这个数组即可!

你好,你说的我明白,现在就是不是特别清楚得到的数据怎么和usRegInputBuf数组一一对应,比如我得到四个布尔值,怎么和usRegInputBuf数组内的元素对应?比如usRegInputBuf[0]应该存放什么?

出0入0汤圆

 楼主| 发表于 2013-3-24 14:27:53 | 显示全部楼层
yfustbyf 发表于 2013-3-24 13:12
你好,你说的我明白,现在就是不是特别清楚得到的数据怎么和usRegInputBuf数组一一对应,比如我得到四个 ...

这个你可以自己定义,这个不在modbus规范里面!usRegInputBuf[0]的长度是16位的,你可以选择任意的4位存放bool变量!

出0入0汤圆

发表于 2013-3-24 15:31:28 | 显示全部楼层
牛人!相当厉害啊~~~

出0入0汤圆

发表于 2013-3-28 17:33:45 | 显示全部楼层
这样的好贴要顶啊

出0入0汤圆

发表于 2013-3-28 18:42:41 | 显示全部楼层
-  -基本都是自己编, freemodbus还是太麻烦了

出0入0汤圆

发表于 2013-3-29 08:29:21 | 显示全部楼层
跟着学习下!

出0入0汤圆

发表于 2013-3-29 08:45:56 | 显示全部楼层
标记一下  

出0入0汤圆

 楼主| 发表于 2013-3-29 21:21:29 | 显示全部楼层
limxuzheng 发表于 2013-3-28 18:42
-  -基本都是自己编, freemodbus还是太麻烦了

我觉得两种方法都是可以的!
不排斥任何一种方法,只要满足你的项目需求并留有一定的扩展性即可!

出0入0汤圆

发表于 2013-3-30 10:59:27 | 显示全部楼层
xukai871105 发表于 2013-3-29 21:21
我觉得两种方法都是可以的!
不排斥任何一种方法,只要满足你的项目需求并留有一定的扩展性即可! ...

楼主,那个Modbus poll 具体应该怎么设置,比如response timeout , Delay Between Polls,slave ID ,address应该寄存器地址,那个从机地址哪里设置?

出0入0汤圆

 楼主| 发表于 2013-3-30 20:37:29 | 显示全部楼层
hhjjstu 发表于 2013-3-30 10:59
楼主,那个Modbus poll 具体应该怎么设置,比如response timeout , Delay Between Polls,slave ID ,addr ...

从机地址是程序中设定的,例如程序中设定从机地址为1,那么slaver ID自然为1
寄存器地址,在示例代码中address的起始地址为0,结束地址为7,请注意寄存器数量不是默认的10,而是8.
其他的设置可以保持默认!

出0入0汤圆

发表于 2013-3-31 20:29:58 | 显示全部楼层
对于楼主的帖子,十分敬佩和感激。看了几遍,有以下不解!
1、对于楼主的串口代码,关于初始化PA9和PA10感到不解,看了FreeModbus源码也是这么写的,请楼主解惑
2、对于楼主关于485初始化也只有PD8,也感到很困惑,请楼主详解。
感激不尽!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-4-1 09:30:25 | 显示全部楼层
kingdekong 发表于 2013-3-31 20:29
对于楼主的帖子,十分敬佩和感激。看了几遍,有以下不解!
1、对于楼主的串口代码,关于初始化PA9和PA10感 ...

PA9和PA10为 STM32F系列的USART的接收和发送口

PD10为RS485形式的发送或接收控制口,该端口可以使用任意的IO口。由于RS485使用的过程中只能寻则发送或接收的一种状态,所有FreeModbus一直保持接收状态,直到需要发送数据时才短暂开启发送状态!

出0入0汤圆

发表于 2013-4-1 12:48:44 | 显示全部楼层
xukai871105 发表于 2013-2-14 21:55
不客气,最近几天花了点时间研究MODBUS TCP
没想到还是很复杂的,研究之后又结果再和大家分享! ...

请问485的RO、DI口是接在PA9和PA10上吗?

出0入0汤圆

发表于 2013-4-1 12:50:32 | 显示全部楼层
xukai871105 发表于 2013-4-1 09:30
PA9和PA10为 STM32F系列的USART的接收和发送口

PD10为RS485形式的发送或接收控制口,该端口可以使用任意 ...

请问485的RO、DI口是接在PA9和PA10上吗?

出0入0汤圆

 楼主| 发表于 2013-4-1 17:20:58 | 显示全部楼层
kingdekong 发表于 2013-4-1 12:50
请问485的RO、DI口是接在PA9和PA10上吗?

应该可以那样操作的,组成485通信!

出0入0汤圆

发表于 2013-4-1 17:38:15 | 显示全部楼层
modbus tcp 不复杂啊,跟485比就是少了最后的CRC校验,然后前边加了6个字节,前面两个是包个数,第六个表示后面的字节数,就这么简单,它不需要校验,因为TCPIP协议下它本身就是校验的,所以应用层就不需要校验了。。

出0入0汤圆

 楼主| 发表于 2013-4-1 19:52:33 | 显示全部楼层
bjyw 发表于 2013-4-1 17:38
modbus tcp 不复杂啊,跟485比就是少了最后的CRC校验,然后前边加了6个字节,前面两个是包个数,第六个表示 ...

言简意赅,学习一下!我前段时间分析了uIP,还自己写了以太网协议栈,稍加整理应该modbus tcp就可以出来了!

出0入0汤圆

发表于 2013-4-2 10:21:25 | 显示全部楼层
yzhu 发表于 2012-8-14 00:12
好文呀,这个要顶。
不过我认为最好是带个RTOS,将FreeModbus作为一个任务来运行,同时再运行其它任务,以 ...

楼上说的很有道理,在开发STM2时,考虑引入RTOS是很不错的一种方式

出0入0汤圆

发表于 2013-4-2 10:48:51 | 显示全部楼层
好资料,绝对要顶

出0入0汤圆

发表于 2013-4-2 11:49:20 | 显示全部楼层
xukai871105 发表于 2013-4-1 19:52
言简意赅,学习一下!我前段时间分析了uIP,还自己写了以太网协议栈,稍加整理应该modbus tcp就可以出来 ...

请教一下楼主,关于功能码0x11 ,报告从机ID, 对应主机应该发送什么样的数据格式   ,从机应该回复什么样的数据格式?

出0入0汤圆

 楼主| 发表于 2013-4-2 13:42:00 | 显示全部楼层
hhjjstu 发表于 2013-4-2 11:49
请教一下楼主,关于功能码0x11 ,报告从机ID, 对应主机应该发送什么样的数据格式   ,从机应该回复什么样 ...

我需要求证一下,modbus中的确有这个定义,但是freemodbus中好像没有这个功能函数!
我回头看看代码!

出0入0汤圆

 楼主| 发表于 2013-4-2 13:43:33 | 显示全部楼层
libaiwzj 发表于 2013-4-2 10:21
楼上说的很有道理,在开发STM2时,考虑引入RTOS是很不错的一种方式

难道上传的示例工程中是没有RTOS的,我记得我加了一个uCOS在里面的,难道是我搞错了!

出0入0汤圆

发表于 2013-4-2 14:19:47 | 显示全部楼层
好东西 mark

出0入0汤圆

发表于 2013-4-8 13:28:36 | 显示全部楼层
楼主辛苦,多谢,跑起来了

出0入0汤圆

发表于 2013-4-8 22:30:43 | 显示全部楼层
这个东西灰常的有用,工作中经常要用到。顶一个

出0入0汤圆

 楼主| 发表于 2013-4-9 08:25:35 | 显示全部楼层
没想到这个帖子有那么多人回复,虽然这个modbus是老技术了,但是还是没有应用前景的!争取300楼!

出0入0汤圆

发表于 2013-4-9 10:38:38 | 显示全部楼层
有master的例程就更好了

出0入0汤圆

发表于 2013-4-16 17:41:18 | 显示全部楼层
用lwip+modbusTCP灰常方便

出0入0汤圆

发表于 2013-4-17 08:21:41 | 显示全部楼层
请问楼主,您的485RO、DI口接在哪个串口上?

出0入0汤圆

 楼主| 发表于 2013-4-17 12:39:49 | 显示全部楼层
kingdekong 发表于 2013-4-17 08:21
请问楼主,您的485RO、DI口接在哪个串口上?

可以接在UART1上,也可以接在UART2上,另外RS485的收发也可以接在任意一个Io口!

出0入0汤圆

发表于 2013-4-17 13:03:17 | 显示全部楼层
多谢楼主分享!

出0入0汤圆

发表于 2013-4-17 17:32:15 | 显示全部楼层
学习了,

出0入0汤圆

发表于 2013-4-20 09:33:58 | 显示全部楼层
其实我想用CAN的,485与modbus配合良好,CAN没有合适的上层协议,can与modbus不合适

出0入0汤圆

 楼主| 发表于 2013-4-20 16:47:47 | 显示全部楼层
yaoyyie2003 发表于 2013-4-20 09:33
其实我想用CAN的,485与modbus配合良好,CAN没有合适的上层协议,can与modbus不合适 ...

CANOpen.非常好!

出0入0汤圆

发表于 2013-4-20 19:14:48 | 显示全部楼层
楼主好人啊!!!

出0入0汤圆

发表于 2013-4-22 11:21:02 | 显示全部楼层
牛啊 做规约转换器的人才 前途无量

出0入0汤圆

发表于 2013-4-25 15:45:25 | 显示全部楼层
请问LZ:您的代码在RS232下,或RS485应该都适用吧?

出0入0汤圆

 楼主| 发表于 2013-4-25 15:53:50 | 显示全部楼层
xh2008email 发表于 2013-4-25 15:45
请问LZ:您的代码在RS232下,或RS485应该都适用吧?

RS232 RS485通用

RS485使用的时候需要增加一个收发控制IO!

出0入0汤圆

发表于 2013-4-25 16:23:12 | 显示全部楼层
我要用SP3485接在串口1或串口2上,连收发控制IO都不要?

出0入0汤圆

发表于 2013-4-25 16:30:49 | 显示全部楼层
谢谢分享

出0入0汤圆

 楼主| 发表于 2013-4-25 16:34:53 | 显示全部楼层
xh2008email 发表于 2013-4-25 16:23
我要用SP3485接在串口1或串口2上,连收发控制IO都不要?

SP3485当然要收发控制IO了,不然要么接收要么发送!

出0入0汤圆

发表于 2013-4-26 09:48:09 | 显示全部楼层
xuxi2009 发表于 2012-8-12 23:37
哇塞原来是新鲜出炉的帖子,做了几个产品,都是自己定的协议,感觉很乱,想来个一统江湖的办法,就想到了mo ...

谢谢无私贡献的精神,是不是我可以这样理解,这个协议是通过UART来控制单片机的状态???

出0入0汤圆

发表于 2013-4-26 11:23:57 | 显示全部楼层
xukai871105 发表于 2012-8-12 20:00
五 定时器相关部分代码编写
        定时器的作用前面已经说明了,在这里就罗列一下相关的移植代码。定时器 ...

最近在搞,老板说给我最多两天搞好,我只有来长姿势。。。。
谢谢先。。。

出0入0汤圆

发表于 2013-4-26 14:27:26 | 显示全部楼层
刚好在做这方面的工作,借鉴了!

出0入0汤圆

发表于 2013-4-26 17:06:33 | 显示全部楼层
本帖最后由 365mcu 于 2013-4-26 17:27 编辑

有个问题请教:
我移植好了能用,但是比如我读保持寄存器u16 usRegHoldingBuf[REG_HOLDING_NREGS]={0x0810,0x0720,0x0630,0x0540,0x0450,0x0360,0x0270,0x0180};
最多只能读7个数,从第usRegHoldingBuf【1】~【7】;求教。。。为什么不能读8个??

【是PLC的起始地址为0x0001】而程序里面设置的保持寄存器起始地址为0,所以只要将保持寄存器起始地址设置为0x0001即可读到和写入全部字符。
也可以修改mbfuncholding.c中的usRegAddress++;相应的注释掉,然后起始地址设置为0x0000也可以。

出0入0汤圆

发表于 2013-4-26 22:01:42 | 显示全部楼层
Flyback 发表于 2012-9-12 14:12
你好

我参考了你的代码移植到STM32上,运行正常,读出的线圈状态也是对的,但是我发现从Feemodbus网站上 ...

你好,我也是参照了《STM32 移植FreeModbus 详细过程》一问,在STM32F103ZE上移植FREEMODBUS,现在出现能发送不能接受的情况,你在移植过程遇到类似的情况没有。能说下你移植过程中遇到了哪些问题吗?怎么解决这些问题的?QQ:378746087

出0入0汤圆

发表于 2013-4-27 10:35:12 | 显示全部楼层
kingdekong 发表于 2013-4-26 22:01
你好,我也是参照了《STM32 移植FreeModbus 详细过程》一问,在STM32F103ZE上移植FREEMODBUS,现在出现能 ...

断点跟踪。。。看看在哪里返回的是什么错误,以及出错前后代码分析。。。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-20 02:00

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

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