zyl182001 发表于 2023-9-20 22:49:18

【米尔瑞萨RZ/G2L开发板-创新应用】化学反应釜远程人机界面

本帖最后由 zyl182001 于 2023-9-20 23:24 编辑

【米尔瑞萨RZ/G2L开发板-创新应用】化学反应釜远程人机界面

使用QML与C++混合编程,开发基于MODBUS 的主机程序,实现一个远程控制界面,操作另一端的化学反应釜,控制反应釜的温度、压力和反应时间。

设定反应釜的温度50~300摄氏度,压力0.5~3个大气压,运行时间0~99分钟,控制反应釜运行,实时显示温度、压力和时间的设定值和瞬时值,运行时间到自动停止,产生故障报故障错误。

开发板跟反应釜通讯采用modbusTCP主机控制功能,移植libmodbus库,为了通讯顺畅,跟从机的通讯用一个独立的线程完成,在modbuspollthread.cpp函数中实现,界面设计在main.qml中完成,它们中间通讯通过信号和槽以及调用属性方法进行。

头文件类函数声明

#ifndef MODBUSPOLLTHREAD_H
#define MODBUSPOLLTHREAD_H

#include <QObject>
#include <QThread>
#include "modbus.h"
//#include <QSerialPort>
//#include <QSerialPortInfo>
#include <QDebug>
#include <QTimer>
#include <QStringList>
#include <QThread>
#include <QtQml>
class ModbusPollThread : public QObject
{
    Q_OBJECT
public:
    explicit ModbusPollThread(int slaveID = 1, QObject *parent = nullptr);
    ~ModbusPollThread();
    void Serial_search_function();
    void modbus_update_text();
    static void stBusMonitorAddItem( modbus_t * modbus,
                                     uint8_t isOut, uint8_t slave, uint8_t func, uint16_t addr,
                                     uint16_t nb, uint16_t expectedCRC, uint16_t actualCRC );

    //显示接受内容在右上角
    static void stBusMonitorRawData( modbus_t * modbus, uint8_t * data,
                                     uint8_t dataLen, uint8_t addNewline,uint8_t );

    Q_INVOKABLE void connnectModbusPoll();// 连接ModbusPoll,供QML调用
    Q_INVOKABLE void disconnnectModbusPoll();// 关闭ModbusPoll,供QML调用
    Q_INVOKABLE void sendMsg();//向服务端发送数据,供QML调用
    Q_INVOKABLE void readModbus(uint addr);//向服务端发送数据,供QML调用
    Q_INVOKABLE void writeModbus(uint addr, uint data);//向服务端发送数据,供QML调用
    Q_INVOKABLE void clearHistory();//向服务端发送数据,供QML调用
signals:
//    void SIGNAL_SENDGETSLAVEINFO(QString);      //发送获取到的从机信息给UI
//    void signal_SENDGETSLAVEDATA(uint, uint);         // 发送获取到的从机数据给UI
    void sendData(QVariant add, QVariant arr);         // 发送获取到的从机数据给UI
    void sendDataAll(QVariantList array);         // 发送获取到的从机数据给UI
//    void signal_enable();                     // 使能行编辑和按钮
//    void signal_disable();                      // 失能行编辑和按钮
public slots:
    void initPollThread();
    void ClosePollThread();
    void modbus_Poll_work();

//    void connnectModbusPoll(QString portName,int baud);
//    void disconnnectModbusPoll();

//    void readModbus(uint addr);
//    void writeModbus(uint addr, uint16_t data);

private:
    QThread*    m_pollThread;
    bool      isWork;                     //是否连接成功
    modbus_t    *my_bus;                  //定义第一个modbus类
    modbus_mapping_t *mb_mapping = NULL;    //modbus相关的寄存器
    QTimer      *Time_one;                  //modbus数据更新时钟
    int         m_slaveId;               //查询从机ID
};

#endif // modbusPollThread_H

反应釜客户端用Modbus slave软件模拟,可以接收查看主机传来的控制信息,也可把温度压力和其它运行状态发给主机。


运行环境是开发板和电脑连在同一个路由器上,程序要连接的远程IP设为电脑的IP,电脑虚拟机编译好的程序通过WIFI传到开发板上,开发板配置HDMI输出,通过一个HDMI二进一出分配器连到电脑显示器上,旧显示器可能需要把开发板的输出分辨率刷新率的降下来。USB鼠标插上去就可以用了,界面操作用到。





想在开发板上增加一些运行库以便能够实现动画和虚拟键盘功能,没想到出奇的难,依赖太多,怎么也编不通,过一阵子接着研究吧。
运行操作视频




页: [1]
查看完整版本: 【米尔瑞萨RZ/G2L开发板-创新应用】化学反应釜远程人机界面