msOS学习之路(2)

2023-05-16

基于msOS自动回火机的实现

1 简介

1.1 背景

基于msOS自动回火机的实现的实例是学习msOS比较好的入门实例,它包括msOS界面的设计、数据库的使用、系统节拍的使用、按键的使用、系统节拍使用等,通过这个例子可以很好的对msOS的使用有个大概的了解。

1.2 自动会火机简介

自动回火机是一个基于msOS系统开发的温度计时控制系统,可应用于焊接、回炉加热设备的控制,从A0口读取模拟量转为温度值并能够实时显示到菜单界面中,OUT1为加热状态控制端口,OUT2为保温控制端口。自动回火机能够实现升温计时,保温计时以及降温计时。在升温、保温以及降温过程中,能够在界面显示当前的状态。保温时间、保温值、降温值可根据用户需求进行修改。 整个项目主要分为两个部分,一个是界面的设计,另一个是逻辑业务的设计。

2 界面设计

2.1 界面组成部分

实现的界面效果如下图所示。该界面的控件包括4个Lable和3个TextBox,这三个TextBox是可调的分别是保温时间、保温的温度和降温的目标温度。图中长方形圈起来的为lable控件,只可读,而椭圆圈的为TextBox控件,是可读可写的。
在这里插入图片描述

2.2 界面的实现过程

界面的实现分的过程分为三个步骤:

(1)首先在AppStruct的Menu中添加需要增加的界面,这个结构体在menu.h和data.h中,两个地方都要修改,如下图所示
在这里插入图片描述
(2)创建界面初始化函数,在这个界面中直接设置界面要要显示的内容,添加控件等,实现的函数代码如下,包括控件的创建、添加,界面背景的创建。

void InitWorkForm(void)
{
	static Label TemperatureUpTimeLabel;  // 升温时间
    static Label CurrentTemperatureLabel; // 当前温度
	static TextBox TemperatureHoldTimeTextBox;  // 保温时间
	static TextBox TemperatureHoldTextBox;  // 保温温度
	static Label TemperatureDownTimeLabel;  // 降温时间
	static TextBox TemperatureDownTextBox;  // 降温目标温度
	
    static Label TemperatureStateLabel;
    static const string TemperatureStateString[] = {"升温","保温","降温","待机"};
    
    System.Gui.Form.Init(&App.Menu.WorkForm);
    App.Menu.WorkForm.BackTextPointer = "升温:   S    ℃"
                                        "保温:   S    ℃"
                                        "降温:   S    ℃"
                                        "状态:         ";

    // 加热时间
    System.Gui.Form.AddLabel(&App.Menu.WorkForm, &TemperatureUpTimeLabel);
    TemperatureUpTimeLabel.DataPointer = (void *)(&App.Data.TemperatureUpTime);
    TemperatureUpTimeLabel.Type = GuiDataTypeIntDec;
    TemperatureUpTimeLabel.Digits = 2;
    TemperatureUpTimeLabel.X = 7;
    TemperatureUpTimeLabel.Y = 0;

    // 当前温度
    System.Gui.Form.AddLabel(&App.Menu.WorkForm, &CurrentTemperatureLabel);
    CurrentTemperatureLabel.DataPointer = (void *)(&App.Data.CurrentTemperature);
    CurrentTemperatureLabel.Type = GuiDataTypeIntDec;
    CurrentTemperatureLabel.X = 13;
    CurrentTemperatureLabel.Y = 0;

    // 保温时间
    System.Gui.Form.AddTextBox(&App.Menu.WorkForm, &TemperatureHoldTimeTextBox);
    TemperatureHoldTimeTextBox.DataPointer = (void *)(&App.Data.TemperatureHoldTime);
    TemperatureHoldTimeTextBox.Type = GuiDataTypeIntDec;
    TemperatureHoldTimeTextBox.DataMax = 360;
    TemperatureHoldTimeTextBox.DataMin = 0;
    TemperatureHoldTimeTextBox.DataBigStep = 10;
    TemperatureHoldTimeTextBox.DataStep = 1;
    TemperatureHoldTimeTextBox.X = 7;
    TemperatureHoldTimeTextBox.Y = 1;
		
    // 保温温度
    System.Gui.Form.AddTextBox(&App.Menu.WorkForm, &TemperatureHoldTextBox);
    TemperatureHoldTextBox.DataPointer = (void *)(&App.Data.TemperatureHold);
    TemperatureHoldTextBox.Type = GuiDataTypeIntDec;
    TemperatureHoldTextBox.DataMax = 900;
    TemperatureHoldTextBox.DataMin = 300;
    TemperatureHoldTextBox.DataBigStep = 100;
    TemperatureHoldTextBox.DataStep = 10;
    TemperatureHoldTextBox.X = 13;
    TemperatureHoldTextBox.Y = 1;

    // 降温时间
    System.Gui.Form.AddLabel(&App.Menu.WorkForm, &TemperatureDownTimeLabel);
    TemperatureDownTimeLabel.DataPointer = (void *)(&App.Data.TemperatureDownTime);
    TemperatureDownTimeLabel.Type = GuiDataTypeIntDec;
    TemperatureDownTimeLabel.X = 7;
    TemperatureDownTimeLabel.Y = 2;

    // 降温温度
    System.Gui.Form.AddTextBox(&App.Menu.WorkForm, &TemperatureDownTextBox);
    TemperatureDownTextBox.DataPointer = (void *)(&App.Data.TemperatureDown);
    TemperatureDownTextBox.Type = GuiDataTypeIntDec;
    TemperatureDownTextBox.DataMax = 900;
    TemperatureDownTextBox.DataMin = 300;
    TemperatureDownTextBox.DataBigStep = 100;
    TemperatureDownTextBox.DataStep = 10;
    TemperatureDownTextBox.X = 13;
    TemperatureDownTextBox.Y = 2;

    // 状态显示
    System.Gui.Form.AddLabel(&App.Menu.WorkForm, &TemperatureStateLabel);
    TemperatureStateLabel.DataPointer = (void *)(&App.Data.TemperatureState);
    TemperatureStateLabel.Type = GuiDataTypeSnString;
    TemperatureStateLabel.Align = GuiDataAlignRight;
    TemperatureStateLabel.StringBlockPointer = TemperatureStateString;
    TemperatureStateLabel.X = 15;
    TemperatureStateLabel.Y = 3;

}

3 逻辑业务中实现

逻辑业务的设计主要读取读取模拟量,通过端口控制加入和夹子的控制,在整系统中我设置了四个状态进行考虑,分别为升温、保温、降温和待机转态,这四个状态我是以全局变量的形式保存在数据库中的。在逻辑业务中每当到达1s之后就就读取模拟量的输入,并显示在显示屏上,同时也判断当前的状态,比如刚开始按键开始的时候,就设置为升温状态,这时候,控制温度的端口和控制夹子的端口也打开。在节拍中实现的代码如下,这部分的代码只是实现了通过按键控制的模式。

static void AppSystick100(void) // 每10ms扫描一次
{
    float AdcData;
    int TemporaryData;
    static byte Time10msNumberFlag = 0;   
    
    Time10msNumberFlag++;
    
    if(Time10msNumberFlag == 100)//1
    {						
        Time10msNumberFlag = 0;
        TemporaryData = App.Data.Adc.A0;
        if (TemporaryData >= 744)
            AdcData = TemporaryData - 744;
        else
            AdcData = 0;
        AdcData = AdcData * 50 / 186 + 300;		
        App.Data.CurrentTemperature = AdcData;//显示温度
				
        if (App.Data.TemperatureState == TemperatureUpState)
        {
            App.Data.DO.Y0 = on;  //启动夹子
            App.Data.DO.Y1 = on;  //开始加热 
            App.Data.TemperatureUpTime++;   // 升温时间
				
            if (App.Data.CurrentTemperature >= App.Data.TemperatureHold)//温度超过设定阈值
            {
                App.Data.TemperatureState = TemperatureHoldState;  //设置保温为保温状态,停止计时,进入保温状态          
            }		
        }
		else if (App.Data.TemperatureState == TemperatureHoldState)
        {
            App.Data.TemperatureHoldTime--;      //保温倒计时
            App.Data.DO.Y1 = off;         //结束加热
            App.Data.DO.Y2 = on;          //开始保温
            
            if (App.Data.TemperatureHoldTime<=0) //保温结束
            {
                App.Data.TemperatureHoldTime = App.Data.InitTemperatureHoldTime;  //重新读取保温时间
                App.Data.DO.Y2 = off;     //结束保温
                App.Data.TemperatureState = TemperatureDownState;// 设置为降温状态,进行降温	
            }
            	
        }
		else if (App.Data.TemperatureState == TemperatureDownState)
        {
            App.Data.TemperatureDownTime++;//降温计时
            
            if (App.Data.TemperatureDown >= App.Data.CurrentTemperature) //当前温度低于设定的降温温度
            {				
                PostMessage(MessageKey, KeyLongStop);	//抛一个按键消息,结束降温计时 
                System.Device.Misc.SetBeep(true); //蜂鸣器打开
                System.Device.Timer.Start(0, TimerSystick, 100, BeepOff);
            }
        }
		 
	}       	
}

在实现以上代码之前首先在数据库中添加我们需要增加的变量,在使用过程中我发现,对于需要在显示屏上显示的数据变量,最好定义在数据库中,这样可以方便进行读写和显示。需要注意的是,在系统节拍中使用蜂鸣器最好是使用定时器来实现。

4 总结

通过这个案列,让我对msOS的系统有了更深入的了解,也在系统界面与逻辑业务的使用变得更清晰了。通过这个实例,让我学会了界面、业务使用和IO口的使用。总之,通过这个例子让我学习到了很多不光是msOS的知识,也慢慢的发现msOS使用的一些套路,在此,特别感谢同事的帮助。

2018年7月

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

msOS学习之路(2) 的相关文章

  • 移植Android recovery升级(1)介绍

    Android OTA升级大家都有接触过 xff0c 网上也有很多说明文章 xff0c 我这边把Android OTA升级的架构移植到嵌入式设备上 对Android OTA说明文章 xff0c 我感觉比较好的是 xff1a https bl
  • 网络操作系统 第二章 用户和组管理

    习题 1 WIndows SErver 2008中的用户有那些类型 xff1f 系统默认的用户有那些 xff1f 1 xff09 用户账号 xff0c 用户组 2 xff09 管理员组 xff0c 备份操作员组 xff0c 超级用户组 xf
  • 数据增强可视化 transfrom Python中三个图像增强库

    深入浅出Python中三个图像增强库的使用 目录 介绍ImgaugAlbumentationsSOLT结论 介绍 本文中探索三个流行的 Python 图像增强库 图像分类器通常在训练更多的图像时表现得更好 在图像分类模型中 xff0c 一个
  • Mixup和CutMix数据增强

    见论文 xff1a a Unified Analysis of Mixed Sample Data Augmentation A Loss Function Perspective 2208 09913v1 pdf arxiv org
  • Transductive和Inductive的区别

    关于Transductive和Inductive 维基百科上有一段简洁扼要的定义 xff1a Transduction is reasoning from obeserved specific training cases to speci
  • win10用vncviewer远程登陆ubuntu桌面 GNOME

    一 xff1a 安装GNOME桌面 sudo apt install ubuntu desktop gnome panel gnome settings daemon metacity nautilus gnome terminal y 其
  • ros远程桌面使用x11vnc启动rviz办法

    元学习论文总结 小样本学习论文总结 2017 2019年计算机视觉顶会文章收录 AAAI2017 2019 CVPR2017 2019 ECCV2018 ICCV2017 2019 ICLR2017 2019 NIPS2017 2019 1
  • LaTeX教程(一)Tex Live 2018的使用教程

    元学习论文总结 小样本学习论文总结 2017 2019年计算机视觉顶会文章收录 AAAI2017 2019 CVPR2017 2019 ECCV2018 ICCV2017 2019 ICLR2017 2019 NIPS2017 2019 l
  • encoder-decoder模型

    元学习论文总结 小样本学习论文总结 2017 2019年计算机视觉顶会文章收录 AAAI2017 2019 CVPR2017 2019 ECCV2018 ICCV2017 2019 ICLR2017 2019 NIPS2017 2019 先
  • 元学习(Meta-Learning) 综述及五篇顶会论文推荐

    元学习论文总结 小样本学习论文总结 2017 2019年计算机视觉顶会文章收录 AAAI2017 2019 CVPR2017 2019 ECCV2018 ICCV2017 2019 ICLR2017 2019 NIPS2017 2019 元
  • FewRel数据集

    元学习论文总结 小样本学习论文总结 2017 2019年计算机视觉顶会文章收录 AAAI2017 2019 CVPR2017 2019 ECCV2018 ICCV2017 2019 ICLR2017 2019 NIPS2017 2019 F
  • python的字符串截取||取字符串前三位

    元学习论文总结 小样本学习论文总结 2017 2019年计算机视觉顶会文章收录 AAAI2017 2019 CVPR2017 2019 ECCV2018 ICCV2017 2019 ICLR2017 2019 NIPS2017 2019 s
  • Android系统启动流程 -- bootloader、linux kernel、android

    转载 xff1a http blog csdn net arnoldlu article details 8264721 目录 xff1a 第一部分 xff1a Bootloader启动 一 Bootloader的定义和种类 二 Arm特定
  • 小样本学习数据集||Omniglot和miniImagenet||MAML算法测试

    元学习论文总结 小样本学习论文总结 2017 2019年计算机视觉顶会文章收录 AAAI2017 2019 CVPR2017 2019 ECCV2018 ICCV2017 2019 ICLR2017 2019 NIPS2017 2019 小
  • 怎么撰写研究内容

    元学习论文总结 小样本学习论文总结 2017 2019年计算机视觉顶会文章收录 AAAI2017 2019 CVPR2017 2019 ECCV2018 ICCV2017 2019 ICLR2017 2019 NIPS2017 2019 在
  • element 树形表格报Error: for nested data item, row-key is required

    element树形表格报以上这个错 xff0c 按网上的说法改 roke key 去掉element版本号前的 都不行 xff0c 最后发现在每条数据里加上一个id属性就可以了 xff0c 我数据本身没有id这个字段
  • Js 中的定时器

    定时器 前言一 定时器二 定时器具体内容三 定时器实例总结 前言 通过定时器自动的做一些事情 xff0c 例如发送网络请求 一 定时器 定时器 xff1a 定时器可以设定时间自动的做某件事情 定时器是一种方法 xff0c 不是对象 xff0
  • 【面经】常见机考类型汇总

    一 筑基篇 xff08 掌握数组 xff0c 字符串操作等基本操作 xff09 1 数组 目标 xff1a 掌握数组的正序遍历 xff0c 逆序遍历 xff0c 数组的排序等 典型例题 xff1a 提取不重复的整数 牛客题霸 牛客网 2 字
  • ONOS架构中的YANG、P4 Runtime

    本文总结自毛健炜的 ONOS架构中的YANG P4 Runtime 的演讲 ONOS xff0c 全称是开放网络操作系统 xff0c 通常以控制器的身份为人所知 它是由ON LAB组织发起的一个开源项目 xff0c 在与ONF组织合并之后
  • PID控制算法的原理剖析

    我的微信公众号 xff08 ID xff1a 00后开发者 xff09 从00后的角度出发 xff0c 专注但不局限于分享电气 嵌入式 机器视觉以及芯片行业的算法 技术文章和最新资讯 如果想查看更多内容 xff0c 可以关注我的微信公众号

随机推荐

  • flask 报错 sqlalchemy.exc.ArgumentError: Mapper mapped class BaseModel->base_model could not assemble

    报错信息 sqlalchemy exc ArgumentError Mapper mapped class BaseModel gt base model could not assemble any primary key columns
  • rospy-编写简单的服务端和客户端

    最近一直在实习公司做课程 xff0c 记录一些笔记和自己写的代码 基础知识和代码解释参考wiki 创客制造和其他博客 xff0c 侵删 背景知识 服务 service ROS中的通信方式有四种 主题 topic 服务 service 参数服
  • 树莓派 3B+ 蓝牙无法使用问题

    最近想用树莓派3B 43 做个小玩意 xff0c 结果发现蓝牙功能不可用 xff0c 图标消失且不能发现设备 xff0c 几乎试了网上所有方法都不行 最后参考了这个帖子恢复了蓝牙功能 xff1a SOLVED Bluetooth icon
  • 电源管理芯片之 Regulator用法。

    有问题请加 xff1a Q群 xff1a 241359063 共同走向创业学习之旅 原创 xff1a kylin zeng http blog chinaunix net uid 23795897 html 转载请注明原创出处 xff0c
  • 如何查看ssh登录日志信息

    less var log secure grep 39 Accepted 39 正常登录日志信息 正常退出 密码错误登录 三次密码登陆失败 输入密码时 xff0c 主动退出 为了安全期间 xff1a 我们只允许xxx xxx xxx xxx
  • C语言笔记-25-网络-TCP网络编程

    C语言笔记 25 网络 TCP网络编程 文章目录 C语言笔记 25 网络 TCP网络编程前言一 TCP编程模型概括二 inet工具htonlinet pton 三 TCP编程模型代码TCP服务端TCP客户端 总结 前言 自学笔记 xff0c
  • Failed to load nodelet [/camera/realsense2_camera] of type [realsense2_camera/RealSenseNodeFactory]

    输入 xff1a roslaunch realsense2 camera rs rgbd launch 报错 xff1a 报错原因 xff1a 是找不到realsense2 camera包 xff0c 在安装D435的包时 xff0c 以为
  • 十七、基于软核和CAN搭建FPGA在线升级系统设计

    1 系统搭建 系统主要包含 xff1a MicroBlaze软核处理器 xff0c Axi Can控制器 xff0c Axi lite user用户通信接口 xff0c MIG DDR3控制器 xff0c 中断控制器等 设计使用Can接收上
  • 【OpenCV】cv::Mat位深和通道,CV_8UC1等

    位深 每个像素由多少位来存储 是一个精度问题 xff0c 一般图片是8bit xff08 位 xff09 的 xff0c 则深度是8 通道 每个像素点能存放多少个数 类似于RGB彩色图中的每个像素点有三个值 xff0c 即三通道 一个图像的
  • darknet_ros编译报错以及在RVIZ中显示乱码

    最近在arm平台上部署 darknet ros 出现了一些错误 xff0c 这里记录一下 首先在ARM平台上部署和在AMD平台上部署是不同的 xff0c 首先应该考虑算力问题 xff0c 在ARM下 xff0c 加载yolov3 weigh
  • 萌新改代码系列(一)--VINS+GPS

    VINS与GPS组合 距离上次写博客过去了快一年了 xff0c 这一年来我一直忙于与SLAM方向几乎没有关系的科研工作 xff0c 说来惭愧 xff0c 最终也没研究出个啥 最近得空 xff0c 就把我之前开源的代码整理了一下 xff0c
  • GVINS论文阅读(VINS-MONO + gnss 紧耦合)

    原文 x1f517 https arxiv org pdf 2103 07899 pdf github x1f517 https github com HKUST Aerial Robotics GVINS 港科大 沈老师团队 在vins
  • 萌新学VINS-Fusion(一)------特征跟踪

    VINS FUSION代码心得 新人小白 xff0c 第一次写博客 xff0c 主要相当于自己做一个关于学习VINS的笔记 xff0c 不喜勿喷 xff0c 转载请注明出处 其实我之前也尝试着在VINS MONO基础上改写双目的 xff0c
  • 萌新学VINS-Fusion(二)------初始化

    最近在忙别的事情 xff0c 博客迟迟没更新 xff0c 现在终于放假了 xff0c 今天把初始化部分来分析一下 源码 xff1a https github com HKUST Aerial Robotics VINS Fusion pro
  • c 语言中 %d,%lu等区别

    转载至 xff1a http blog sina com cn s blog 7d94c35c01019f96 html d 有符号10进制整数 ld 长整型 hd短整型 hu 无符号短整形 u无符号整形 lu无符号长整形 i 有符号10进
  • 萌新学VINS-Fusion(三)------双目和GPS融合

    虽然要过年了 xff0c 而且每天还要在家里小店打工 xff0c 但是网红之路不能停对吧 xff0c 这篇博客写关于VINS Fusion和GPS的融合 其实我之前改出过一个加了GPS的VIO xff0c 并且也开源了 xff0c 之前没有
  • nuxt cookie-universal-nuxt 搭配 vuex-persistedstate 做数据持久化

    前言 因为服务端不存在 Local Storage 和 Session Storage 所以 便使用了 cookie universal nuxt 这个插件 在做Nuxt项目的时候 发现Vuex 在刷新页面后 储存的数据丢失 用 vuex
  • ROS学习(一):Navigation中GNSS与IMU数据融合定位

    1 参考博客 主要参考以下博客 感谢各位博主的分享 link https blog csdn net qinqinxiansheng article details 107108475 utm medium 61 distribute pc
  • msOS学习之路(1)

    msOS学习之路 xff08 1 xff09 1 msOS的初步认识 刚刚拿到msOS开发板的时候 xff0c 看了一下开发板 xff0c 感觉非常高端 xff0c 再看一下芯片 xff0c 用的是stm32 当时我就觉得我得先学习stm3
  • msOS学习之路(2)

    基于msOS自动回火机的实现 1 简介 1 1 背景 基于msOS自动回火机的实现的实例是学习msOS比较好的入门实例 xff0c 它包括msOS界面的设计 数据库的使用 系统节拍的使用 按键的使用 系统节拍使用等 xff0c 通过这个例子