2196|1

7

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

MSP430WARE++的使用3:modbus模块的调用方法 [复制链接]

MSP430WARE是一套基于C++语言的开源的MSP430层次化软件架构,支持多种外设。本文将介绍modbus模块驱动程序的调用方法。

   
1、硬件原理图

    使用modbus模块驱动程序需要与MSP430单片机的UART0端口相连接

2、使用方法
    a、加入驱动程序
    选中modbus
文件夹,右键点击“Exclude from Build”即可。

    modbus驱动程序由多个个文件组成,如下图所示。其中
RSP1_config.hpp为
RSP1的配置文件,
RSP1.cpp为
RSP1类的源程序,
RSP1.hpp为
RSP1类的头文件。


    b、使能外设
    在config.hpp中使能外设modbus,其源程序如下:
        
#define PROTOCOL_MODBUS
1


    c、驱动程序的配置。

        可以对下列选项进行设置,解释如下:
        
MODBUS_REG_INPUT_START:输入寄存器起始地址
        
MODBUS_REG_INPUT_NREGS:输入寄存器个数(双字节)
        MODBUS_REG_HOLDING_START:保持寄存器起始地址

        MODBUS_REG_HOLDING_NREGS:保持寄存器个数(双字节)

        
MODBUS_MODE:模式,可以为
MB_RTU(二进制模式)
                                 MB_ASCII(ASCII模式)

                                 
MB_TCP(TCP模式)
        MODBUS_SLAVE_ID:从地址

        MODBUS_BAUD:波特率
        
MODUBS_PARITY:效验位,可以为
MB_PAR_NONE(无效验)
                                     MB_PAR_ODD(奇效验)

                                     MB_PAR_EVEN(偶效验)           




    根据项目的实际需求,更改
modbus_config.hpp配置文件,其更改后的源程序如下:
        #define MODBUS_REG_INPUT_START   1

        
#define MODBUS_REG_INPUT_NREGS   
(2 * 16)

        #define MODBUS_REG_HOLDING_START 1



        #define MODBUS_REG_HOLDING_NREGS (2 * 64)
        
#define MODBUS_MODE
MB_RTU
  


        #define MODBUS_SLAVE_ID1


        #define MODBUS_BAUD 115200


        #define MODUBS_PARITY   MB_PAR_NONE

   
d、类的派生
    已在PTL层设置完毕,不需要派生。



    e、对象的声明

    已在PTL层声明完毕,不需要声明。

   
f、其它操作
    modbus模块自身占用了UART0和TIMERA,使用时,应在c
onfig.hpp中进行屏蔽,源程序如下:
        
#define INTERNAL_PERIPHERAL_CLOCK_MODE 1
        #define INTERNAL_PERIPHERAL_UART0_MODE 0

        #define INTERNAL_PERIPHERAL_TIMERA_MODE 0



    g、调用方法

    在主循环的第1行调用,如下语句:
        
Target.PTL.Modbus.Dispose();
    可在主循环的任意位置,改变输入寄存器或者保持寄存器的数值,以备主modbus调用,样例代码如下:

        while(1)


{


Target.PTL.Modbus.Dispose();


if (Target.PTL.Modbus.flag == True)


{



Target.PTL.Modbus.flag = False;


//收到写保持寄存器数据




}


//读保持寄存器



//读输入寄存器




//喂狗


Target.HAL.WatchDog.Feed();


}



    3、CModbus类成员变量和成员函数的说明
    成员变量:
        uint16 usRegInputStart;                            输入寄存器起始地址uint16 usRegInputBuf[MODBUS_REG_INPUT_NREGS];      输入寄存器缓冲Buffer
uint16 usRegHoldingStart;                          保持寄存器起始地址
uint16 usRegHoldingBuf[MODBUS_REG_HOLDING_NREGS];  保持寄存器缓冲Buffer
    成员函数
        
CModbus(void);                                     构造函数

void Dispose(void);                                在主循环的第1行调用

    注1:本文中示例代码用绿色标注。

    注2:本文中与使用密切相关的成员变量与成员函数用红色标注。









最新回复

很好,代码部分如果能再规整点就好了。   详情 回复 发表于 2015-9-25 16:25
 
点赞 关注

回复
举报

9795

帖子

24

TA的资源

版主

沙发
 
很好,代码部分如果能再规整点就好了。
 
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表