OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32/FPGA开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...
查看: 35057|回复: 104

在STM32上移植FreeModbus RTU的一点经验总结

  [复制链接]

  离线 

6

主题

27

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
394
金钱
394
注册时间
2014-4-1
在线时间
7 小时
发表于 2015-12-20 10:44:24 | 显示全部楼层 |阅读模式
    这几天因为工作需要,移植了modbus RTU到STM32来,之前也听说过modbus,但是没有深入了解过,还以为会像usb 那样复杂的,经过这几天的折腾,发现真的太简单了。为了防止过段时间又忘记了怎么移植,在这里把移植过程记录下来,也为了方便初次接触modbus的人。
    废话少说,首先去下载源码,我下载的是freemodbus-v1.5.0,解压后如图所示:


在demo文件夹中有很多移植好的例子,但是没有STM32的,不要紧,我们参考已有的例子来操作就可以了。在demo文件夹下新建一个文件夹,命名为STM32,将BARE文件夹里的文件全部复制过来。
    然后,我们建立一个STM32的工程,我用的是mdk4.72,关于怎么建立工程我就不啰嗦了,在工程里添加modbus 和 port两个文件夹,并在文件夹里添加需要的文件,这些modbus的是在modbus文件夹下面,port的是在刚才新建的那个stm32文件夹下,port.c是我从别的地方弄过来的,里面就是一个开中断和一个关中断的函数,可以不要,我的工程如图:
 


乍一看,也有十几个文件,其实这些文件内容不多,很好理解,而且需要修改的只有port文件夹下的portserial.c 和 porttimer.c 。这两个文件里面有几个空函数,我们看名字就知道这些函数的作用了。
portserial.c 如下:
[C] 纯文本查看 复制代码
#include \"port.h\"

/* ----------------------- Modbus includes ----------------------------------*/
#include \"mb.h\"
#include \"mbport.h\"

/* ----------------------- static functions ---------------------------------*/
static void prvvUARTTxReadyISR( void );
static void prvvUARTRxISR( void );

/* ----------------------- Start implementation -----------------------------*/
void
vMBPortSerialEnable( BOOL xRxEnable, BOOL xTxEnable )
{
    /* If xRXEnable enable serial receive interrupts. If xTxENable enable
     * transmitter empty interrupts.
     */
}

BOOL
xMBPortSerialInit( UCHAR ucPORT, ULONG ulBaudRate, UCHAR ucDataBits, eMBParity eParity )
{
    return FALSE;
}

BOOL
xMBPortSerialPutByte( CHAR ucByte )
{
    /* Put a byte in the UARTs transmit buffer. This function is called
     * by the protocol stack if pxMBFrameCBTransmitterEmpty( ) has been
     * called. */
    return TRUE;
}

BOOL
xMBPortSerialGetByte( CHAR * pucByte )
{
    /* Return the byte in the UARTs receive buffer. This function is called
     * by the protocol stack after pxMBFrameCBByteReceived( ) has been called.
     */
    return TRUE;
}

/* Create an interrupt handler for the transmit buffer empty interrupt
 * (or an equivalent) for your target processor. This function should then
 * call pxMBFrameCBTransmitterEmpty( ) which tells the protocol stack that
 * a new character can be sent. The protocol stack will then call 
 * xMBPortSerialPutByte( ) to send the character.
 */
static void prvvUARTTxReadyISR( void )
{
    pxMBFrameCBTransmitterEmpty(  );
}

/* Create an interrupt handler for the receive interrupt for your target
 * processor. This function should then call pxMBFrameCBByteReceived( ). The
 * protocol stack will then call xMBPortSerialGetByte( ) to retrieve the
 * character.
 */
static void prvvUARTRxISR( void )
{
    pxMBFrameCBByteReceived(  );
}
    根据注释,可以知道vMBPortSerialEnable是串口发送和接收中断的控制的,包括发送中断和接收中断,在这里,我们用的是RXNE 和 TXE中断,代码如下:
[C] 纯文本查看 复制代码
void vMBPortSerialEnable( BOOL xRxEnable, BOOL xTxEnable )
{
	if(TRUE==xRxEnable)
	{
		USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
	}
	else
	{
		USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);	
	}

	if(TRUE==xTxEnable)
	{
		USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
	}
	else
	{
	   USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
	}
}
    而 xMBPortSerialInit 函数显然是串口初始化的了,因为我在usart.c已经有一个串口初始化函数,这里直接调用该初始化函数usart_init(ulBaudRate);同时将return FALSE 改成 return TRUE; 注意这里我们只用了波特率这个参数,其他参数直接忽略,你也可以根据自己需要改一下。
然后 xMBPortSerialPutByte 和 xMBPortSerialGetByte 分别是发送和接收一个字节数据的函数,这里我直接调用库函数;
 
[C] 纯文本查看 复制代码
BOOL
xMBPortSerialPutByte( CHAR ucByte )
{
	USART_SendData(USART1, ucByte);
  while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)/*????·????ê??*/
  {
  
  }		
	return TRUE;
}

BOOL
xMBPortSerialGetByte( CHAR * pucByte )
{
	*pucByte = USART_ReceiveData(USART1);
	return TRUE;
}
    最后还有两个中断处理函数,把前面的static 去掉,因为我不想把我的串口中断函数放到这个文件。然后我们在stm32f10x_it.c添加串口中断函数,如下:
 
[C] 纯文本查看 复制代码
void USART1_IRQHandler(void)
{
	if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET)
	{		
		prvvUARTRxISR();
		USART_ClearITPendingBit(USART1, USART_IT_RXNE);
	}

	if(USART_GetITStatus(USART1, USART_IT_TXE) == SET)
	{
		prvvUARTTxReadyISR();
// 		USART_ClearITPendingBit(USART1, USART_IT_TXE);
	}
}
     至此,portserial.c处理完毕。
     porttimer.c的移植和portserial.c十分相似,但是要特别注意定时器中断的时间长度应该是3.5个字符时间,我这里只是简单粗暴的按照波特率是9600时候计算的。文件很短,直接上代码
[C] 纯文本查看 复制代码
BOOL
xMBPortTimersInit( USHORT usTim1Timerout50us )
{
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
  
  TIM_DeInit(TIM2);

#if 0 	
	TIM_TimeBaseStructure.TIM_Period = 0x7E54;		  //CLK==24MHz ((1000000000/9600)*11*3.5)/(1000/24) == 0x7e54
	TIM_TimeBaseStructure.TIM_Prescaler = 0x3;
#endif
  // ?????????¤·?????????7200/72M = 0.0001,????100us????????1
  //10us x 50 = 5ms,??5ms????????	
  TIM_TimeBaseStructure.TIM_Period = 50;
  TIM_TimeBaseStructure.TIM_Prescaler = (7200 - 1);	
	TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
// 	TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
	TIM_Cmd(TIM2, ENABLE);
	return TRUE;
}


void
vMBPortTimersEnable(  )
{	
	TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
	TIM_SetCounter(TIM2, 0);
	//TIM_Cmd(TIM2, ENABLE);
	TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
}

void
vMBPortTimersDisable(  )
{
	TIM_SetCounter(TIM2, 0);
	//TIM_Cmd(TIM2, DISABLE);
	TIM_ITConfig(TIM2, TIM_IT_Update, DISABLE);
}

void
TIMERExpiredISR( void )
{
    (void)pxMBPortCBTimerExpired();

}
     同样,在stm32f10x_it.c添加定时器中断处理函数,
[C] 纯文本查看 复制代码
void TIM2_IRQHandler(void)
{
	TIMERExpiredISR();
	TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
}

     然后,我们还需要自己写四个回调函数,分别是读输入寄存器函数、读写保持寄存器函数、读写线圈函数和读离散寄存器函数,一般只用读写保持寄存器函数即可,具体怎么实现可以参考demo文件夹里面众多的demo.c文件。
     
   附近是我的代码,屡试不爽,大家可以参考一下

 



















freemodbus-v1.5.0.zip

5.9 MB, 下载次数: 70204

UCOSII_MODBUSRTU_DEMO.zip

8.19 MB, 下载次数: 104091

回复

使用道具 举报

  离线 

13

主题

774

帖子

3

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2376
金钱
2376
注册时间
2015-7-26
在线时间
610 小时
发表于 2015-12-20 11:11:18 | 显示全部楼层
有用,谢谢分享!
我的博客:http://blog.csdn.net/itdo_just
回复 支持 反对

使用道具 举报

  离线 

72

主题

2719

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3445
金钱
3445
注册时间
2014-8-4
在线时间
677 小时
发表于 2015-12-20 11:17:17 | 显示全部楼层
谢谢分享STM32上移植FreeModbus RTU经验,mark备用~~~~~
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

  离线 

12

主题

125

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2013-1-5
在线时间
21 小时
发表于 2015-12-20 12:47:57 | 显示全部楼层
多谢楼主分享
天道酬勤
回复 支持 反对

使用道具 举报

  离线 

33

主题

469

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
3682
金钱
3682
注册时间
2013-10-4
在线时间
524 小时
发表于 2015-12-20 22:11:19 | 显示全部楼层
谢谢楼主分享
回复 支持 反对

使用道具 举报

  离线 

516

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
134732
金钱
134732
注册时间
2010-12-1
在线时间
1316 小时
发表于 2015-12-20 22:56:52 | 显示全部楼层
不错,谢谢分享。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

  离线 

13

主题

297

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2040
金钱
2040
注册时间
2012-5-26
在线时间
289 小时
发表于 2015-12-21 09:46:37 | 显示全部楼层
谢谢分享,最近可能要用到modbus TCP
活着才是王道!健康是一切的前提!
回复 支持 反对

使用道具 举报

  离线 

10

主题

79

帖子

0

精华

高级会员

Rank: 4

积分
734
金钱
734
注册时间
2013-8-28
在线时间
27 小时
发表于 2015-12-21 09:52:44 | 显示全部楼层
必须mark
回复 支持 反对

使用道具 举报

  离线 

4

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
177
金钱
177
注册时间
2013-4-9
在线时间
16 小时
发表于 2015-12-21 14:21:58 | 显示全部楼层
楼主不错!!!!
签名必须手写!
回复 支持 反对

使用道具 举报

  离线 

116

主题

7646

帖子

12

精华

资深版主

Rank: 8Rank: 8

积分
11208
金钱
11208
注册时间
2013-9-10
在线时间
368 小时
发表于 2015-12-28 10:16:50 | 显示全部楼层
NND,我移植这货如果调用打开了printf函数支持,程序就编译不通过,注释掉之后就可以编译通过,下载没法运行,不知道怎么跑的,仿真单步运行都进不了main函数,你有遇到过么?407上第一次移植的用的lib是V1.4版本的库,现在用的是V1.5版本的库,最近移植到103上面也不行,,直接不跑了,没法仿真,不知道这样的情况你有没遇到
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

  离线 

0

主题

2

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2015-12-30
在线时间
1 小时
发表于 2015-12-30 23:41:32 | 显示全部楼层
谢谢 正需要。。。
回复 支持 反对

使用道具 举报

  离线 

16

主题

118

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2486
金钱
2486
注册时间
2015-4-18
在线时间
263 小时
发表于 2016-1-3 19:56:28 | 显示全部楼层
非常谢谢了。。。。。。。。
回复 支持 反对

使用道具 举报

  离线 

16

主题

118

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2486
金钱
2486
注册时间
2015-4-18
在线时间
263 小时
发表于 2016-1-5 17:59:56 | 显示全部楼层
你个modebus 程序能直接与威纶触 摸屏通讯吗。。。。
回复 支持 反对

使用道具 举报

  离线 

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2016-1-10
在线时间
0 小时
发表于 2016-1-10 10:51:34 | 显示全部楼层
LZ的分析对我太有用了,刚开接触modbus,学习中,谢谢
回复 支持 反对

使用道具 举报

  离线 

6

主题

91

帖子

0

精华

高级会员

Rank: 4

积分
767
金钱
767
注册时间
2014-11-15
在线时间
91 小时
发表于 2016-1-10 16:47:33 | 显示全部楼层
串口直连PC时,用MODBUS调试精灵测试通过,修改至485模块后,由于485存在芯片的发送控制,代码会出现死机的情况,正在分析中。
回复 支持 反对

使用道具 举报

  离线 

5

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
191
金钱
191
注册时间
2014-12-17
在线时间
15 小时
发表于 2016-1-10 19:42:40 | 显示全部楼层
谢谢分享,正在准备学习STM32系统呢
回复 支持 反对

使用道具 举报

  离线 

0

主题

12

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2015-11-19
在线时间
3 小时
发表于 2016-1-11 16:03:38 | 显示全部楼层
Mark  Thanks!!
回复 支持 反对

使用道具 举报

  离线 

16

主题

118

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2486
金钱
2486
注册时间
2015-4-18
在线时间
263 小时
发表于 2016-1-11 18:08:37 | 显示全部楼层
Bula 发表于 2016-1-10 16:47
串口直连PC时,用MODBUS调试精灵测试通过,修改至485模块后,由于485存在芯片的发送控制,代码会出现死机的 ...

你用这个代码调试过吗。。。有没什么问题啊。。。
回复 支持 反对

使用道具 举报

  离线 

8

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
303
金钱
303
注册时间
2011-7-11
在线时间
32 小时
发表于 2016-1-11 23:49:28 | 显示全部楼层
mark了,以后用得上
回复 支持 反对

使用道具 举报

  离线 

6

主题

27

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
394
金钱
394
注册时间
2014-4-1
在线时间
7 小时
 楼主| 发表于 2016-1-15 17:22:43 | 显示全部楼层
八度空间 发表于 2015-12-28 10:16
NND,我移植这货如果调用打开了printf函数支持,程序就编译不通过,注释掉之后就可以编译通过,下载没法运 ...

我也遇到开了printf函数就编译出错,这个时候要加上一个void _ttywrch(int ch)函数就可以了,还有你说进不了main函数这个问题我觉得一般都是因为堆栈设置不对,或者一些其他的设置问题,这个问题我以前用51单片机的时候遇到过,比较麻烦。还有你移植到103上跑不了到底是哪里出问题,不妨贴出来一起研究一下
回复 支持 反对

使用道具 举报

  离线 

6

主题

27

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
394
金钱
394
注册时间
2014-4-1
在线时间
7 小时
 楼主| 发表于 2016-1-15 17:24:11 | 显示全部楼层
752151619 发表于 2016-1-5 17:59
你个modebus 程序能直接与威纶触 摸屏通讯吗。。。。

没试过,你可以试试,只要遵循相同的协议标准应该是没问题的
回复 支持 反对

使用道具 举报

  离线 

116

主题

7646

帖子

12

精华

资深版主

Rank: 8Rank: 8

积分
11208
金钱
11208
注册时间
2013-9-10
在线时间
368 小时
发表于 2016-1-16 08:01:45 | 显示全部楼层
菜鸟2 发表于 2016-1-15 17:22
我也遇到开了printf函数就编译出错,这个时候要加上一个void _ttywrch(int ch)函数就可以了,还有你说进 ...

在F407库函数V1.4版本移植那个可以跑,之后再移植一遍就没法跑了,main函数进步了,仿真怎么都没有跑起来,又不是进入HardFault_Handler()函数,明天发代码上来
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

  离线 

6

主题

91

帖子

0

精华

高级会员

Rank: 4

积分
767
金钱
767
注册时间
2014-11-15
在线时间
91 小时
发表于 2016-1-16 08:35:49 | 显示全部楼层
752151619 发表于 2016-1-11 18:08
你用这个代码调试过吗。。。有没什么问题啊。。。

已解决了,问题出在 portserial.c中,是由于库函数的返回值改变了所致。

xMBPortSerialGetByte( CHAR * pucByte)
{
    while (USART_GetFlagStatus(USART3, USART_IT_RXNE) == RESET);
    *pucByte = (u8)USART_ReceiveData(USART3);
    return TRUE;
}

就是那个等待中断的返回值,原来写成了 == 0,检查了库函数代码后,修改成RESET,一切OK!
回复 支持 反对

使用道具 举报

  离线 

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2015-11-24
在线时间
32 小时
发表于 2016-1-18 16:42:21 | 显示全部楼层
感谢楼主 MARK 备用
回复 支持 反对

使用道具 举报

  离线 

53

主题

112

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
413
金钱
413
注册时间
2013-4-10
在线时间
78 小时
发表于 2016-1-24 00:01:26 | 显示全部楼层
第一个寄存器的数读不上来,求分析,解决!谢谢!
04:输入寄存器
/* ----------------------- Defines ------------------------------------------*/
#define REG_INPUT_START 0
#define REG_INPUT_NREGS 4

/* ----------------------- Static variables ---------------------------------*/
static USHORT   usRegInputStart = REG_INPUT_START;
static USHORT   usRegInputBuf[REG_INPUT_NREGS]={0x1111,0x2222,0x3333,0x4444};
/* ----------------------- Start implementation -----------------------------*/
11111.png 3.png

03:保持寄存器
/* ----------------------- Defines ------------------------------------------*/
#define REG_HOLDING_START 0x0000
#define REG_HOLDING_NREGS 8
uint16_t usRegHoldingBuf[REG_HOLDING_NREGS]= {0x147b,0x3f8e(变量),0x147b,0x400e,0x1eb8,0x4055,0x147b,0x408e};


2.png 4.png

打铁还需自身硬@ing
回复 支持 反对

使用道具 举报

suzhao2008 该用户已被删除
发表于 2016-1-24 10:58:08 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

  离线 

0

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2013-3-8
在线时间
25 小时
发表于 2016-1-25 22:34:33 | 显示全部楼层

谢谢分享STM32上移植FreeModbus RTU经验
回复 支持 反对

使用道具 举报

  离线 

2

主题

9

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2016-1-14
在线时间
6 小时
发表于 2016-1-27 19:30:24 | 显示全部楼层
楼主你好,我想问下我现在做的课题是通过USB传输的PLC Modbus协议移植与验证。然后我也是个新手。老师给我的代码是说通过串口传输的Modbus代码,叫我自己弄一个通过USB传输的Modbus协议移植。我想问下Modbus源码是不是说不需要我们 自己去编写的?我要做的是怎么用USB去传输?
回复 支持 反对

使用道具 举报

  离线 

2

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2015-12-29
在线时间
13 小时
发表于 2016-1-27 23:32:12 | 显示全部楼层
mark  谢谢LZ分享
路漫漫,书多多,stm32的朋友请加群383260480交流,一起进步
回复 支持 反对

使用道具 举报

  离线 

1

主题

5

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2016-1-4
在线时间
11 小时
发表于 2016-1-28 14:55:02 | 显示全部楼层
mark一下,以后用到慢慢看
回复 支持 反对

使用道具 举报

  离线 

0

主题

1

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2016-2-26
在线时间
0 小时
发表于 2016-2-26 09:45:53 | 显示全部楼层
能问一个问题么?就是用modbus协议的话从机地址是怎么写到板子里的呢?如果是用拨码开关设置的话那主机又是从哪里读取的呢?
回复 支持 反对

使用道具 举报

  离线 

30

主题

707

帖子

1

精华

新手入门

积分
16
金钱
16
注册时间
2013-3-14
在线时间
52 小时
发表于 2016-2-26 10:08:14 | 显示全部楼层
mark,备用。楼主大赞。
回复 支持 反对

使用道具 举报

  离线 

0

主题

3

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2016-2-26
在线时间
7 小时
发表于 2016-2-26 10:47:55 | 显示全部楼层
好帖。谢谢楼主分享
回复 支持 反对

使用道具 举报

  离线 

0

主题

8

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2012-6-18
在线时间
2 小时
发表于 2016-3-15 14:48:21 | 显示全部楼层
本帖最后由 zjczm 于 2016-3-15 14:52 编辑

文章很好。学习了!
to 楼主,我下载下来的压缩文件,解压后出错。楼主能否重传一下???
回复 支持 反对

使用道具 举报

  离线 

0

主题

2

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2016-3-16
在线时间
6 小时
发表于 2016-3-16 16:11:58 | 显示全部楼层
谢谢,很有用
回复 支持 反对

使用道具 举报

长春515 该用户已被删除
发表于 2016-3-20 11:45:41 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

  离线 

9

主题

102

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2054
金钱
2054
注册时间
2014-3-30
在线时间
302 小时
发表于 2016-3-21 18:03:38 | 显示全部楼层
mark ,学习学习!
从不在失败面前说不,你就会成为人们眼中的大神!!
回复 支持 反对

使用道具 举报

  离线 

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2016-3-7
在线时间
79 小时
发表于 2016-3-29 10:20:57 | 显示全部楼层
楼主强悍,我与组态王试过可用,美中不足的是 02 读离散寄存器 指令不能用
回复 支持 反对

使用道具 举报

  离线 

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2014-9-4
在线时间
12 小时
发表于 2016-4-1 00:02:08 | 显示全部楼层
多谢分享
回复 支持 反对

使用道具 举报

  离线 

16

主题

332

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1179
金钱
1179
注册时间
2013-12-14
在线时间
526 小时
发表于 2016-4-1 09:11:16 | 显示全部楼层
有用,mark一下。
半导体->模拟电路->数字电路->单片机->汇编->C->操作系统->java
回复 支持 反对

使用道具 举报

  离线 

0

主题

52

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1977
金钱
1977
注册时间
2015-8-26
在线时间
151 小时
发表于 2016-4-1 09:16:28 | 显示全部楼层
先顶后看,好习惯
回复 支持 反对

使用道具 举报

  离线 

4

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2015-12-4
在线时间
16 小时
发表于 2016-4-5 09:00:36 | 显示全部楼层
楼主威武
回复 支持 反对

使用道具 举报

  离线 

10

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
149
金钱
149
注册时间
2014-10-13
在线时间
15 小时
发表于 2016-4-25 16:14:22 | 显示全部楼层
学习一下
回复 支持 反对

使用道具 举报

  离线 

9

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
128
金钱
128
注册时间
2014-5-28
在线时间
16 小时
发表于 2016-4-28 17:04:31 | 显示全部楼层
在modbus相关的几个文件里,有好几个函数里,有
OS_CPU_SR cpu_sr=0;
这个定义,只是定义了,但从未使用。
回复 支持 反对

使用道具 举报

  离线 

6

主题

27

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
394
金钱
394
注册时间
2014-4-1
在线时间
7 小时
 楼主| 发表于 2016-7-11 10:59:00 | 显示全部楼层
cxjvae 发表于 2016-1-27 19:30
楼主你好,我想问下我现在做的课题是通过USB传输的PLC Modbus协议移植与验证。然后我也是个新手。老师给我 ...

modbus源码是不用我们去编写的,不过有一部分与应用相关的需要稍微修改一下,用串口或者USB或者 用TCP/IP都是可以的
回复 支持 反对

使用道具 举报

  离线 

2

主题

49

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
391
金钱
391
注册时间
2016-5-26
在线时间
35 小时
发表于 2016-7-18 18:08:15 | 显示全部楼层
MARK一下
回复 支持 反对

使用道具 举报

  离线 

13

主题

30

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
228
金钱
228
注册时间
2011-10-27
在线时间
11 小时
发表于 2016-7-19 08:50:00 | 显示全部楼层
mark  dfadfadfas
回复 支持 反对

使用道具 举报

  离线 

0

主题

10

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2016-7-18
在线时间
5 小时
发表于 2016-7-19 09:08:04 | 显示全部楼层
有用的帖子
回复 支持 反对

使用道具 举报

  离线 

15

主题

61

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
274
金钱
274
注册时间
2016-7-15
在线时间
88 小时
发表于 2016-7-19 11:48:20 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

  离线 

7

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2014-11-16
在线时间
18 小时
发表于 2016-7-21 16:01:27 | 显示全部楼层
太棒了,谢谢lz,正想睡觉呢,送来了枕头
回复 支持 反对

使用道具 举报

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

本版积分规则




关闭

正点原子双11大促销上一条 /1 下一条

正点原子公众号

QQ|联系我们|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-11-16 21:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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