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_MODBUS1
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,使用时,应在config.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:本文中与使用密切相关的成员变量与成员函数用红色标注。
原创性文章,转载请注明出处 http://user.qzone.qq.com/2756567163。
版权声明:本文为博主原创文章,未经博主允许不得转载。
MSP430WARE++的使用3:modbus模块的调用方法
标签:msp430 msp430ware++ c++ modbus ti