深圳市中科世为科技有限公司论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 3231|回复: 0

SuperView FlyThingsOS 智能显示屏上移植modbus协议支持串口RTU功能

[复制链接]

5

主题

6

帖子

23

积分

新手上路

Rank: 1

积分
23
发表于 2018-7-23 16:35:58 | 显示全部楼层 |阅读模式
本帖最后由 小师妹 于 2018-7-23 16:35 编辑

SuperView 串口屏 运行的操作系统是中科世为基于Linux 开发的FlyThings OS;系统提供集成GUI开发环境,方便客户快速开发应用。

官网链接: www.zkswe.com ;

开发者页面:doc.zkswe.com;

淘宝页面:shop434237749.taobao.com


modbus开源代码下载

可从github上下载libmodbus源码,然后先按照github说明完成configure ;

当然也可以下载我们配置好的第三方库文件:

https://github.com/zkswe/thirdPart/tree/master/libmodbus

将代码放入jni目录下的modbus目录:

* 注意新建项目后,系统默认打开的是串口模式,需要在main.cpp 里面注释掉串口的启动部分


  1. void onEasyUIInit(EasyUIContext *pContext) {

  2.         // 初始化时打开串口

  3.         // modbus 注释掉串口应用

  4.         //UARTCONTEXT->openUart(CONFIGMANAGER->getUartName().c_str(), CONFIGMANAGER->getUartBaudRate());

  5. }



  6. void onEasyUIDeinit(EasyUIContext *pContext) {

  7.         // modbus 注释掉串口应用

  8.         //UARTCONTEXT->closeUart();

  9. }



  10. const char* onStartupApp(EasyUIContext *pContext) {

  11.         return "mainActivity";

  12. }
复制代码
libmodbus RTU的接口介绍

modbus 上下文: modbus_t

通过modbus_t 可以操作写入,读取等操作。

1.新建一个modbus_t的上下文,在mainLogic.cc 里面添加如下代码:


  1. #include "modbus/modbus.h"



  2. modbus_t* mctx;
复制代码
在onUI_init()  里面添加mctx的初始化:

  1. static void onUI_init(){

  2.     //Tips :添加 UI初始化的显示代码到这里,如:mText1->setText("123");

  3.         mctx = modbus_new_rtu("/dev/ttyS1", 9600, 'N', 8, 1); // Z11s平台为ttyS1,Z6s平台为ttyS2; 9600波特率,无校验,8数据位,1停止位;

  4.         modbus_set_slave(mctx, 1);   // 设置从设备地址为1

  5.         modbus_connect(mctx);    // 链接

  6.         modbus_set_byte_timeout(mctx, 5,0);    // 设置数据超时为5秒,0 us

  7. }
复制代码

modbus_new_rtu:建立一个modbus RTU链接

modbus_set_slave:设置slave的设备地址

modbus_connect:modbus 链接

modbus_set_byte_timeout:设置modbus超时

写数据

modbus_write_register  如果需要切换设备地址,需要先调用  modbus_set_slave;

读数据

modbus_read_registers 如果需要切换设备地址,需要先调用  modbus_set_slave

样例程序:

  1. static bool onButtonClick_ButtonRead(ZKButton *pButton) {

  2.     LOGD(" ButtonClick ButtonRead !!!\n");

  3.         addr = atoi(mEdittextAddrPtr->getText().c_str());

  4.         reg = atoi(mEdittextRegPtr->getText().c_str());

  5.         modbus_set_slave(mctx, addr);

  6.         UINT16 buff[2]={0};

  7.         int ret = modbus_read_registers(mctx, reg,1, buff);

  8.         LOGD("read ret %d buff %x,%x",ret,buff[0],buff[1]);



  9.         mEdittextDataPtr->setText((int)buff[0]);

  10.     return true;

  11. }



  12. static bool onButtonClick_ButtonWrite(ZKButton *pButton) {

  13.     //LOGD(" ButtonClick ButtonWrite !!!\n");

  14.         addr = atoi(mEdittextAddrPtr->getText().c_str());

  15.         reg = atoi(mEdittextRegPtr->getText().c_str());

  16.         data = atoi(mEdittextDataPtr->getText().c_str());

  17.         modbus_set_slave(mctx, addr);

  18.         modbus_write_register(mctx, reg, data);

  19.     return true;

  20. }
复制代码

RTU测试工具界面:


终端显示界面





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|深圳市中科世为科技有限公司 ( 粤ICP备17144184号 )

GMT+8, 2022-1-22 18:58 , Processed in 0.027755 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表