设为首页收藏本站
查看: 961|回复: 0

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

[复制链接]

4

主题

2

回帖

208

积分

中级会员

积分
208
zyl182001 发表于 2023-9-20 22:49:18 | 显示全部楼层 |阅读模式
本帖最后由 zyl182001 于 2023-9-20 23:24 编辑

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

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

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

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

程序.png [color=rgba(0, 0, 0, 0.85)]
头文件类函数声明

#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软件模拟,可以接收查看主机传来的控制信息,也可把温度压力和其它运行状态发给主机。
modbus从机.png

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


环境.jpg
开发板显示.jpg

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




回复

使用道具 举报

您需要登录后才可以回帖 登录

本版积分规则

Archiver|手机版|小黑屋|米尔科技论坛   

GMT+8, 2024-10-11 13:00 , Processed in 0.053138 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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