MSP430WARE++的使用3:modbus模块的调用方法
    MSP430WARE是一套基于C++语言的开源的MSP430层次化软件架构,支持多种外设。

本文将介绍modbus模块驱动程序的调用方法。

1、硬件原理图

    使用modbus模块驱动程序须要与MSP430单片机的UART0port相连接。

/V111a7Bl0251Ar/UuA1Xjks5S.*LFtPgMTou7DDjLh.lL3QkrGEj*6mW7c!/o/dCsAAAAAAAAA&ek=1&kp=1&pt=0&bo=kQI8AZECPAEDACU!&su=1174392641&sce=0-12-12&rf=2-9" style="margin:0px; padding:0px; border-width:0px; border-style:none; vertical-align:top; width:500px; height:241px; float:none">

    

    2、用法
    a、增加驱动程序

    选中modbus目录,右键点击“Exclude from Build”就可以。 
    modbus驱动程序由多个个文件组成。例如以下图所看到的。当中RSP1_config.hpp为RSP1的配置文件。RSP1.cpp为RSP1类的源程序,RSP1.hpp为RSP1类的头文件。

/V111a7Bl0251Ar/z4EI36T7.fbfH0wT0ibdRR.xEPMyAqelWUq20DZjhXA!/o/dBQAAAAAAAAA&ek=1&kp=1&pt=0&bo=pwDGAKcAxgADACU!&su=1174445521&sce=0-12-12&rf=2-9" style="margin:0px; padding:0px; border-width:0px; border-style:none; vertical-align:top; width:167px; height:198px">

    

    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模块的调用方法的更多相关文章

  1. discuz x3在DIY模块中调用伪静态不成功,显示动态链接的解决办法

    discuz x3在DIY模块中调用伪静态不成功,显示动态链接,然而其他的链接正常显示伪静态. 后台启用伪静态后,发现论坛版块.帖子点击链接,伪静态正常显示,然后在门户首页DIY显示的帖子,点进去后发 ...

  2. Node.js(window)基础(2)——node环境下的模块,模块间调用

    参考:http://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/00143450241959 ...

  3. [笔记]Python中模块互相调用的例子

    python中模块互相调用容易出错,经常是在本地路径下工作正常,切换到其他路径来调用,就各种模块找不到了. 解决方法是通过__file__定位当前文件的真实路径,再通过sys.path.append( ...

  4. Python引用多个模块,调用模块中的函数时,要注意的地方

    转自:http://blog.csdn.net/yjk13703623757/article/details/70237463 python模块是”从下到上”导入(import)的. 例如: a.py ...

  5. day4-不同目录间模块的调用

    1.前言 上文已经讲述了软件项目开发目录规范的若干事项,现在问题来了,我们遵循了项目目录设计规范,不同目录下设计了不同的函数和模块,怎么实现对这些模块的调用,使其为项目整体所用呢?本章节讲述的绝对路径 ...

  6. python开发调用基础:模块的调用&制作包&软件开发规范

    一,包的调用 #!/usr/bin/env python #_*_coding:utf-8_*_ #调用 glance[1..4]\api\policy.py 路径 # policy.py 内容 # ...

  7. Javascript模块化编程(一)模块的写法最佳实践六、输入全局变量 独立性是模块的重要特点,模块内部最好不与程序的其他部分直接交互。 为了在模块内部调用全局变量,必须显式地将其他变量输入模块。

    Javascript模块化编程,已经成为一个迫切的需求.理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块但是,Javascript不是一种模块化编程语言,它不支持类clas ...

  8. MSP430WARE++的使用2:RSP1 driver的调用方法

        MSP430WARE是一套基于C++语言的开源的MSP430层次化软件架构,支持多种外设.本文将介绍雷达測速芯片RSP1驱动程序的调用方法.     1.硬件原理图      採用下图所看到的 ...

  9. Python_selenium PO模式下 Tesecase 的相同执行代码做成selenium_base_case公共模块及调用

    作用: PO模式下 Tesecase 的相同执行代码做成selenium_base_case公共模块及调用,提高代码简洁度,实现同样效果. 框架结构: 代码简单实践: common模块下 seleni ...

随机推荐

  1. APP换肤

    一.需求说明 当一个APP用户量大的时候,就需要给不同的用户做标签,用来彰显身份.比如QQ的会员,VIP等不同的皮肤功能. 二.实现方法. 所谓不同的皮肤,就是不同的权限(身份)显示不同的本地或者网络 ...

  2. python url拼接

    import datetime,requests import json,time,urllib import hashlib self.url_domain = “www.baidu,com/” u ...

  3. STL之vector4

    描述 将一个n行m列矩阵元素输入存储后并输出. 部分代码已经给出,请补充完整,提交时请勿包含已经给出的代码. int main() { vector< vector<int> > ...

  4. N进制加法

    我是网络公司的一名普通程序员,英文名Steven,发音比较像“师弟”,自从入职培训自我介绍后,大家就称我为“二师弟”,我喜欢看科幻小说,也喜欢做梦,有一次梦到外星球,发现外星人使用的并非10进制/16 ...

  5. FrameLayout 布局

    (一) 1.效果图:颜色一直在改变,实现霓虹灯的效果 2.activity_main.xml <?xml version="1.0" encoding="utf-8 ...

  6. Oracle TRCA 工具 说明 10046

    本篇文章主要介绍了"Oracle TRCA 工具 说明 ",主要涉及到Oracle TRCA 工具 说明 方面的内容,对于Oracle TRCA 工具 说明 感兴趣的同学可以参考一 ...

  7. microsoft sql server - online Resources 在线资源

  8. 【POI】对于POI无法处理超大xls等文件,官方解决方法【已解决】【多线程提升速率待定】

    本次使用POI处理xlsx文件,莫名的遇到了一个无法逾越的问题. 总共71个xlsx文件,单个文件最大达到50M以上,71个xls文件摆在那里就有3-4G的大小. 在起始处理的时候,发现原本适用于正常 ...

  9. CSS:超出省略三部曲

    overflow:hidden; 超出隐藏 white-space:nowrap;   不让换行,直到<br /> text-overflow:ellipsis;  超出显示省略号... ...

  10. BigDecimal的精度舍入模式详解

    BigDecimal舍入模式介绍: 舍入模式在java.math.RoundingMode 里面: RoundingMode.CEILING :向正无限大方向舍入的舍入模式.如果结果为正,则舍入行为类 ...