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. Servlet 3.1 规范

    在线版目录 Servlet3.1规范翻译——前言 Servlet3.1规范翻译——概览 Servlet3.1规范翻译——Servlet Context Servlet3.1规范翻译——Response ...

  2. Oracle 后台进程 详细说明

    一. 进程概述 先来看一下Oracle 11g 的架构图. 看起来比较模糊,我已经上传到了csdn 的下载. 是个pdf 文件, 2m 多. 那个看起来比较清楚. 也对每个进程做了解释. 下载地址:O ...

  3. 【后缀数组】poj3693 Maximum repetition substring

    sa在清空方面存在一些奇怪的问题……难以ac.(留坑?)

  4. 1.3(学习笔记)Servlet获取表单数据

    一.Servlet获取表单数据 表单提交数据经由Servlet处理,返回一个处理结果显示在页面上, 那么如何获取表单提交的参数进出相应的处理呢? 主要用到以下方法: String  getParame ...

  5. 5.4 集合的排序(Java学习笔记)(Collections.sort(),及Arrays.sort()底层分析)

    1.Comparable接口 这个接口顾名思义就是用于排序的,如果要对某些对象进行排序,那么该对象所在的类必须实现 Comparabld接口.Comparable接口只有一个方法CompareTo() ...

  6. Spring IOC 中三种注入方式

    项目错误知识点记录 正文 最近在项目的时候,用到Spring框架,Spring框架提供了一种IOC的自动注入功能,可以很轻松的帮助我们创建一个Bean,这样就省的我们四处写new Object()这样 ...

  7. 线程协作-Semaphore并发限制

    Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源.

  8. 【java】File的使用:将字符串写出到本地文件,大小0kb的原因

    实现方法: 暂时写一种方法,将字符串写出到本地文件,以后可以补充更多种方法: public static void main(String[] args) { /** * ============== ...

  9. nodeJs+socket.io

    1.先安装npm和node 2.安装socket.io npm install socket.io 3.html <!DOCTYPE html> <html lang="e ...

  10. python获取系统信息,

    1 操作系统系统综合信息cur_sysinfo=platform.uname()浏览器信息cur_browserinfo=self.driver.capabilities['version']浏览器新 ...