欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-09 15:22:16
...

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目录:

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

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

void onEasyUIInit(EasyUIContext *pContext) {
	// 初始化时打开串口
	// modbus 注释掉串口应用
	//UARTCONTEXT->openUart(CONFIGMANAGER->getUartName().c_str(), CONFIGMANAGER->getUartBaudRate());
}

void onEasyUIDeinit(EasyUIContext *pContext) {
	// modbus 注释掉串口应用
	//UARTCONTEXT->closeUart();
}

const char* onStartupApp(EasyUIContext *pContext) {
	return "mainActivity";
}

libmodbus RTU的接口介绍

modbus 上下文: modbus_t 

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

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

#include "modbus/modbus.h"

modbus_t* mctx;

在onUI_init()  里面添加mctx的初始化:

static void onUI_init(){
    //Tips :添加 UI初始化的显示代码到这里,如:mText1->setText("123");
	mctx = modbus_new_rtu("/dev/ttyS1", 9600, 'N', 8, 1); // Z11s平台为ttyS1,Z6s平台为ttyS2; 9600波特率,无校验,8数据位,1停止位;
	modbus_set_slave(mctx, 1);   // 设置从设备地址为1
	modbus_connect(mctx);    // 链接
	modbus_set_byte_timeout(mctx, 5,0);    // 设置数据超时为5秒,0 us
}

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


样例程序:

static bool onButtonClick_ButtonRead(ZKButton *pButton) {
    LOGD(" ButtonClick ButtonRead !!!\n");
	addr = atoi(mEdittextAddrPtr->getText().c_str());
	reg = atoi(mEdittextRegPtr->getText().c_str());
	modbus_set_slave(mctx, addr);
	UINT16 buff[2]={0};
	int ret = modbus_read_registers(mctx, reg,1, buff);
	LOGD("read ret %d buff %x,%x",ret,buff[0],buff[1]);

	mEdittextDataPtr->setText((int)buff[0]);
    return true;
}

static bool onButtonClick_ButtonWrite(ZKButton *pButton) {
    //LOGD(" ButtonClick ButtonWrite !!!\n");
	addr = atoi(mEdittextAddrPtr->getText().c_str());
	reg = atoi(mEdittextRegPtr->getText().c_str());
	data = atoi(mEdittextDataPtr->getText().c_str());
	modbus_set_slave(mctx, addr);
	modbus_write_register(mctx, reg, data);
    return true;
}

RTU测试工具界面:

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

终端显示界面

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