搜索
bottom↓
回复: 20

FreeModBus for AVR IAR工程

[复制链接]

出0入0汤圆

发表于 2013-7-26 18:20:37 | 显示全部楼层 |阅读模式
M128
PD3 INT3/TXD1
PD2 INT2/RXD1

9600 8 N 1 与 Modbus Poll连接地址为1

通信过程中PA7 LED闪烁

为了减小代码空间目前只来了寄存器读与写功能

可以通过头文件打开其它功能

IAR 5.40环境下 代码尺寸为3.8K

本帖子中包含更多资源

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

x

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

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2013-7-26 18:27:10 | 显示全部楼层
好东西,顶起。。。。。

出0入0汤圆

 楼主| 发表于 2013-7-26 18:31:20 | 显示全部楼层
之前自己用if自己写的MOdbus不是特别稳定
配置起来还费劲,直接用别人现成的
在ATMEGA8上用它应该没有压力。

出0入0汤圆

发表于 2013-8-6 13:59:56 | 显示全部楼层
正需要,多谢!

出0入0汤圆

 楼主| 发表于 2013-8-8 17:48:47 | 显示全部楼层
本帖最后由 worldsing 于 2013-8-8 17:53 编辑

再传一个精简版本的:

本帖子中包含更多资源

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

x

出0入0汤圆

 楼主| 发表于 2013-8-8 17:49:27 | 显示全部楼层
本帖最后由 worldsing 于 2013-8-8 17:50 编辑

1、硬件连接:
M128
PD3 INT3/TXD1  ---> PC 232COM Pin 2
PD2 INT2/RXD1  ---> PC 232COM Pin 3
GND                  ---> PC 232COM Pin 5

2、Modbus Poll软件配置:
软件下载地址:http://www.cnblogs.com/worldsing/p/3231855.html

9600 8 N 1 与 Modbus Poll连接地址为1


3、状态:
通信过程中PA7 LED闪烁

4、代码信息:只留RTU模式 优化代码

ModbusUser.c      用记功能代码
ModbusFun.c       整合FreeModbus的功能c代码文件;
ModbusRTU.c       Modbus的RTU模式桢处理,整理FreeModbus去除ASCII模式;
ModbusPort.c      关于硬件的移植包括串口、定时器、桢队列功能实现(目前是单桢处理);
                  (此文件是ATMEGA128硬件的代码,其它CPU需要自己移植)

FreeModBus会功能打开时IAR 5.40环境下 代码尺寸为:
5 287 bytes of CODE memory (+ 12 range fill )
941 bytes of DATA memory (+ 14 absolute )

#define MB_FUNC_HANDLERS_MAX                                  ( 16 )//使用的功能码数量

#define MB_FUNC_OTHER_REP_SLAVEID_BUF                   ( 8 )

#define MB_FUNC_OTHER_REP_SLAVEID_ENABLED           (  1 ) //报告从设备功能

#define MB_FUNC_READ_INPUT_ENABLED                       (  1 ) //读输入寄存器功能

#define MB_FUNC_READ_HOLDING_ENABLED                   (  1 ) //读保持寄存器功能

#define MB_FUNC_WRITE_HOLDING_ENABLED                 (  1 ) //写操持寄存存功能

#define MB_FUNC_WRITE_MULTIPLE_HOLDING_ENABLED  (  1 )//写多个操持寄存存功能

#define MB_FUNC_READ_COILS_ENABLED                        (  1 )//读线圈

#define MB_FUNC_WRITE_COIL_ENABLED                       (  1 )//写线圈

#define MB_FUNC_WRITE_MULTIPLE_COILS_ENABLED      (  1 )//写多个线圈

#define MB_FUNC_READ_DISCRETE_INPUTS_ENABLED      (  1 )//读离散输入

#define MB_FUNC_READWRITE_HOLDING_ENABLED         (  1 )//读写多个寄存器


//2013/08/08
优化port.c和rtu.c

出0入0汤圆

 楼主| 发表于 2013-8-8 17:52:39 | 显示全部楼层

出0入0汤圆

发表于 2013-8-9 15:33:23 | 显示全部楼层

出0入0汤圆

发表于 2013-8-12 11:26:53 | 显示全部楼层
这里面有modbusTCP部分吗?

出0入0汤圆

 楼主| 发表于 2013-8-16 17:48:59 | 显示全部楼层
MicroPLC 发表于 2013-8-12 11:26
这里面有modbusTCP部分吗?

被我删除了

出0入0汤圆

 楼主| 发表于 2013-8-16 17:53:51 | 显示全部楼层
这回把User.c和function.c合并了,同样的配置,Flash 下降,RAM反了长了点。

4 880 bytes of CODE memory (+             12 range fill )
   977 bytes of DATA memory (+ 14 absolute )

出0入0汤圆

 楼主| 发表于 2013-8-16 18:04:50 | 显示全部楼层
//2013/08/16
线圈BUG解决(后来发现不一定是BUG)
1、eMBException eMBFuncWriteCoil( UCHAR * pucFrame, USHORT * usLen )中的
    usRegAddress++;行注释掉,否则输出线圈0永远无法输出,其它的线圈错位。
  
2、eMBException eMBFuncWriteCoil( UCHAR * pucFrame, USHORT * usLen )中的写操作
   while循环改加入 usBitOffset += 8; 否则8以后的线圈无法进行写操作。
  while( iNCoils > 0 ){
          xMBUtilSetBits( ucRegCoilsBuf, usBitOffset,
                        ( uint8_t )( iNCoils > 8 ? 8 : iNCoils ),
          *pucRegBuffer++ );
          iNCoils -= 8;
          usBitOffset += 8;
          }         

3、细读后发现,usRegAddress++在每个操作下都有,有可能是原版就是有意这么写的,但这样
有违背MODBU协议,也有就是地址0的所有东西是没法操作到的,修改的版本中已可以操作0址
址。
4、合并User.c和rtu.c



出0入0汤圆

 楼主| 发表于 2013-8-16 18:08:04 | 显示全部楼层


本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2013-10-17 20:33:37 | 显示全部楼层
支持,顶顶顶顶

出0入0汤圆

 楼主| 发表于 2013-10-20 21:17:15 | 显示全部楼层
liangws201 发表于 2013-10-17 20:33
支持,顶顶顶顶

出0入0汤圆

发表于 2013-10-20 22:23:48 | 显示全部楼层
有没有用ICC AVR写的FreeMODBUS呢,我想要参考一下!

出0入0汤圆

 楼主| 发表于 2013-10-23 09:20:03 | 显示全部楼层
JudeTse 发表于 2013-10-20 22:23
有没有用ICC AVR写的FreeMODBUS呢,我想要参考一下!

把Port.c改就行了,很简单的

出0入0汤圆

发表于 2015-8-25 15:22:48 | 显示全部楼层
学习中。。。。。。。。。。。。。。。。。。。

出0入0汤圆

发表于 2016-4-2 17:10:21 | 显示全部楼层
谢谢分享!

出0入0汤圆

发表于 2021-5-27 21:23:51 | 显示全部楼层
采用状态机要好很多。

出0入0汤圆

发表于 2022-8-14 12:33:43 | 显示全部楼层
楼主,我有个128A modbus调试,联系我,有偿
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-17 06:31

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

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