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. Axis2 解析

    代码生成    Java to WSDL:WSDL to Java:XSD to WSDL:WSDL to XML:WSDL to SOAP:WSDL to Service: Apache Axis2 ...

  2. 软件工程中的反面模式(anti-pattern)

    软件设计 抽象倒置(Abstraction inversion):不把用户需要的功能直接提供出来,导致他们要用更上层的函数来重复实现 用意不明(Ambiguous viewpoint):给出一个模型( ...

  3. [BZOJ2753]滑雪与时间胶囊

    第一问直接把可以走的边连起来bfs一遍即可 第二问可以用类似kruskal的方法,只不过排序的依据应该变为第一关键字为终点高度(从大到小),第二关键字为边权(从小到大),只排序可以走的边 因为同样高度 ...

  4. 【计算几何】【状压dp】Codeforces Round #226 (Div. 2) D. Bear and Floodlight

    读懂题意发现是傻逼状压. 只要会向量旋转,以及直线求交点坐标就行了.(验证了我这俩板子都没毛病) 细节蛮多. #include<cstdio> #include<algorithm& ...

  5. 1.1(学习笔记)JSP(Java Server Pages)基础(脚本元素、指令元素)

    一.JSP简介 JSP全称为Java Server Pages,是一种动态网页开发技术,可以在HTML界面中嵌入java代码, 实现动态的提供数据.访问JSP时服务器会将JSP翻译成Servlet,访 ...

  6. Scala实战高手****第6课 :零基础实战Scala集合操作及Spark源码解析

    本课内容1.Spark中Scala集合操作鉴赏2.Scala集合操作实战 --------------------------------------------------------------- ...

  7. UTF8、UTF16、UTF16-LE、UTF16-BE、UTF32都是些什么?

    下述内容大部分引用自CSDN: Unicode 是 unicode.org 制定的编码标准,目前得到了绝大部分操作系统和编程语言的支持.unicode.org 官方对 Unicode 的定义是:Uni ...

  8. Word绘制跨行表格

    如图“用户评价电影数目”,我们需要均分第一行,选中这三个个,设置了表个高度0.5cm,但是发现上面的一个比较考上,我们需要找到水平竖直居中,那么双击表格,打开表格工具,有设计和布局,切换到布局就找到了 ...

  9. ARM“庖丁解牛”之存储器管理单元MMU

    转:http://blog.sina.com.cn/s/blog_a07635070101bcbt.html 最近笔者详细地学习了由杜春雷老师编写的<ARM体系结构与编程>.对ARM存储管 ...

  10. javascript专业八级测试答案整理

    前几天社区的群里森破发了一个这样的链接: http://ourjs.com/detail/52fb82e13bd19c4814000001 做了一遍后突然对人生感到了迷茫,本着不能只有我一个人伤心的原 ...