迪文科技论坛

 找回密码
 立即注册
搜索
查看: 42|回复: 0

【开源】智能微波热解仪

[复制链接]

5

主题

6

回帖

579

积分

高级会员

Rank: 4

积分
579
发表于 4 天前 | 显示全部楼层 |阅读模式
一.介绍

    微波热解仪是一种用于实验室样品前处理的精密设备,主要用于通过高温高压的微波加热方式快速热解有机或无机样品,它的应用场景多用于如下三种:
    1.样品前处理
  • 将固体或复杂样品转化为液体形态,便于后续的色谱分析(如ICP-MS、AAS、HPLC等)。
  • 适用于重金属检测、元素分析、污染物等研究



   2.加速化学反应
  • 微波直接作用于极性分子(典型的就是水),通过分子摩擦产生热量,显著加快热解速度(传统方法需数小时,微波热解仅需几分钟到半小时),效率非常的高




   3.处理难溶物质
  • 可热解高温难熔材料(如合金)或顽固有机物(如塑料),这要是用传统的方式那是非常麻烦的,还得先做碎化处理





那我们现在来定位到微波热解仪本身,它的核心模块由如下几个部分构成:
    1.T5L主控制器+7寸1024*600的RGB触摸显示屏
    2.高温高压产生模块
    3.控温模块,实时监测并调节温度和压力,避免容器过压爆炸
    4.多工位并行处理模块
    5.分段式程设,预设热解方法(梯度升温、分段控压),适配不同样品类型,方法一旦创建,可以永久反复调用
    6.旋转机构等硬件





二.GUI设计

1.所有图片素材如下:



2.仪器上电后,将首先进入系统加载界面,在这里仪器做一些基本的初始化,使仪器处于就绪状态


3.加载完成后,将进入多用户,多角色选择界面,主要是分为了管理员(具有所有的权限), 组长, 实验员(只有基本的实验权限)



4.同时主界面上也可以进行网络配置,使用的是ESP8266+Airkiss配网机制

Airkiss配网界面如下:


5.若用户选择的是管理员或者组长,则需要密码验证,同时在此界面下也可以修改密码


6.验证通过后,用户将进入到热解模式选择界面,其中维护功能主要是仪器厂家调试, 数据记录等功能



7.不论是用户选择了高热量模式,还是选择了高功率模式,都将进入其对应的方法创建,调阅界面
高热量的:


高功率的:



8.用户创建了新的方法或者调用了老的已存方法后,将进入其对应的运行界面
高热量的:


高功率的:


9.然后就是前面所说的维护功能了
维护功能也是需要验证后才能进入的,密码和管理员密码一致的

下面这是调试功能



下面是记录调阅




三.代码设计

首先是在管理员验证界面需要做如下的处理,监听功率模块发过来的串口数据包
void role_win_handler()
{
        u16 val;
       
        if(!is_wait_respond)
                return;
        if((uart2_rx_len==0x59)&&(uart2_buf[0]==0x82))
        {
                skip_cnt++;
                if(skip_cnt==12)
                {
                        skip_cnt = 0;
                        is_wait_respond = 0;
                        if(uart2_buf[78]==0)
                        {
                                method_win_init();
                                set_win(mode==GTL?3:5);
                                val = 0;
                        }else
                        {
                                val = (mode==GTL?59:60);
                        }
                        sys_write_vp(ROLE_WIN_ERR_TIP_VP,(u8*)&val,1);
                }
        }
       
}



核心的加载对应方法

void method_win_init()
{
        u16 val = 0;
       
        sys_write_vp(METHOD_WIN_TIP_VP,(u8*)&val,1);
        is_method_win = 1;
        sys_write_vp(METHOD_WIN_NO_VP,(u8*)&cur_method_no,1);
        method_win_load(cur_method_no);

}



void method_win_load(u16 no)
{
        u16 addr = METHOD_WIN_STEP_START_VP;
        u8 i,j;
       
        sys_write_vp(METHOD_WIN_TMP_VP,(u8*)&cool_tmp,1);
        sys_write_vp(METHOD_WIN_TIME_VP,(u8*)&cool_time,1);
        if(!is_cloud_method)
        {
                METHOD_READ(&cur_method,no);
        }
        for(i=0;i<10;i++)
        {
                for(j=0;j<4;j++)
                {
                        sys_write_vp(addr,(u8*)&(cur_method.step[j]),1);
                        addr += METHOD_WIN_OFFSET;
                }
        }
       
        method_win_gray_invalid_step();
}
下面这是读取用户创建的方法参数

void method_win_read_params()
{
        u16 addr = METHOD_WIN_STEP_START_VP;
        u8 i,j;
       
        sys_read_vp(METHOD_WIN_TMP_VP,(u8*)&cool_tmp,1);
        sys_read_vp(METHOD_WIN_TIME_VP,(u8*)&cool_time,1);
        for(i=0;i<10;i++)
        {
                for(j=0;j<4;j++)
                {
                        sys_read_vp(addr,(u8*)&(cur_method.step[j]),1);
                        addr += METHOD_WIN_OFFSET;
                }
                if(mode==MODE_GTL)
                {
                        cur_method.step[0] = 0;
                }
        }
}


//实时监听用户方法界面的参数修改,针对修改项进行红色高亮显示

void method_win_scan()
{
        static u16 old_tip = 0xffff;
        static u8 input_pos = 0;
        u16 tip;
        u8 i;
       
        if(is_method_win==0)
                return;
       
        tip = 0;
        for(i=0;i<43;i++)//4*10+3=43
        {
                sys_read_vp(METHOD_WIN_LOAD_START_VP+METHOD_WIN_OFFSET*i,(u8*)&tip,1);
                if(tip==0xF800)
                {
                        input_pos = i+1;
                        if(i==0)
                                tip = 44;
                        else if(i==1)
                                tip = 41;
                        else if(i==2)
                                tip = 42;
                        else
                                tip = i-2;
                        break;
                }
        }
        if(input_pos&&(i==43))
        {
                if(role==ROLE_GENERAL)
                        method_win_load(cur_method_no);
                else
                {
                        method_win_read_params();
                        method_win_gray_invalid_step();
                }
                input_pos = 0;
        }
        if(old_tip!=tip)
        {
                sys_write_vp(METHOD_WIN_TIP_VP,(u8*)&tip,1);
                old_tip = tip;
        }
        sys_read_vp(METHOD_WIN_NO_VP,(u8*)&cur_method_no,1);
        if(old_method_no!=cur_method_no)
        {
                is_cloud_method = 0;
                method_win_load(cur_method_no);
                old_method_no = cur_method_no;
        }
       
}


GUI参考:
vs代码参考:
视频演示:https://b23.tv/4N54nwK

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2025-4-4 03:32 , Processed in 0.036732 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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