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. CodeForces 786B Legacy(线段树优化建图+最短路)

    [题目链接] http://codeforces.com/problemset/problem/786/B [题目大意] 给出一些星球,现在有一些传送枪,可以从一个星球到另一个星球, 从一个星球到另一 ...

  2. [SRM570]TheTiles

    题意:给一个$n\times m$的网格,对这个网格黑白染色,左上角为黑色.现在要用一些大小为$3$的L型图形覆盖这个网格,要求不能重复覆盖同一个格子,不能覆盖到障碍,L型可以进行旋转,但转角处格子必 ...

  3. 【分块】hdu5057 Argestes and Sequence

    分块,v[i][j][k]表示第i块内第j位是k的元素数.非常好写.注意初始化 要注意题意,①第i位是从右往左算的. ②若x没有第i位,则用前导零补齐10位.比如103---->00000001 ...

  4. 【二分答案】【分块答案】【字符串哈希】【set】bzoj2946 [Poi2000]公共串

    我们二分/分块枚举答案x,暴力把除了最短的字符串以外的其他字符串的x长度子串哈希搞出来,分别扔到set里. 然后暴力枚举最短的字符串的x长度字串,查看是否在全部的set里出现过. #include&l ...

  5. 8.2(java学习笔记)反射

    一.基础知识 对象是表示或封装一些数据,一个类被加载后JVM会创建一个对应该类的Class对象, 类的整个结构信息会被放在对应的对象中,通过这个对象我们可以获取改类的全部信息, 而这些操作称为反射. ...

  6. 求满足n^2>12000的n的最大值 Exercise05_13

    /** * @author 冰樱梦 * 时间:2018年下半年 * 题目:求满足n^2>12000的n的最大值 * */ public class Exercise05_13 { public ...

  7. linux下查看端口占用情况以及服务启动的目录

    1.先介绍几个命令: 1. lsof -i:80 查看80端口的占用情况 命令返回结果: COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ngin ...

  8. leetcode练习之No.1------ 两数之和Two Sum

    github地址:git@github.com:ZQCard/leetcode.git 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能 ...

  9. HTML5 canvas图形库 RGraph【转】

    RGraph是一个使用HTML5 Canvas标签实现的图表制作Library.利用该Library生成的Chart具有可交互性,当鼠标点击或移过时会显示相应的信息,可以动态加载Chart或对特殊点进 ...

  10. Vue组件进阶知识总结

    上一篇我们重点介绍了组件的创建.注册和使用,熟练这几个步骤将有助于深入组件的开发.另外,在子组件中定义props,可以让父组件的数据传递下来,这就好比子组件告诉父组件:“嘿,老哥,我开通了一个驿站,你 ...