气体质量流量控制器,简称MFC,通常用于在各种检测中,计量气体的流量。在我们的大气环境数据采集站中,要让气流保持稳定,这样才能准确的获取PM25的数据。

我们采用的气体质量流量控制器具备串口通讯功能,采集流量信号并更具设定数据自动调节流量。我们采用的质量流量控制器如下:

1、协议描述

该类型的质量流量控制器采用RS232 ASCII通讯协议,协议的格式非常简单,如下图所示:

其中,:是起始字符。len1, len2 是指包括节点地址在内的信息的字节数长度, 即基本信息的长度+1。node1, node2是目标设备的节点地址。data1, data2,具体信息。CR是结束字符。

除了起始字符和结束字符外,其他的全部字节都会按1个字节转化为2个16进制表示的ASCII码字符。如:0x2A会被转化为0x32和0x41两个ASCII码字符。

对于发送错误信息的报文有一定的区别,如下图:

其长度是固定的,与正确状态下的信息格式略有差别。

2、硬件设计

因为采用的是串口通讯,所以硬件的连接比较简单。麒麟座上的USART1(PA9:USART1_TX,PA10:USART1_RX)端口已经引到了J2端子排的J2_6和J2_5,所以我们就是用这一接口。如下图所示:

但是由于OneNET麒麟座山是TTL电平,而质量流量控制器是RS232的接口,所以我们还需要一个用于电平转换的摸块,我们平时就是使用一种如下图的TLL转RS232的接口模块,这次也使用它。

至此,硬件连接就不会有问题了。

3、软件设计

接下来我们看看软件方面的设计,在开始具体的软件设计之前,我们看一看流量控制器中具体的参数存储地址和没操作命令。

1)操作命令

命令字符串是以ASCII码表示的二进制字符串。质量流量控制器具有9种命令,我们并不需要用到其中的全部命令,具体如下图所示:

2)数据类型与地址

该种类型的气体质量流量计拥有将近300个参数可供读或者写,但我们通常用不到这么多,我们只考虑其中的几个参数:

  • 流量测量值,地址为205,浮点类型。
  • 流量设定值,地址为206,浮点类型。
  • IO状态,地址为86,字节型数据。
  • 控制模式,地址为12,字节型数据。

气体质量流量控制器的参数数据类型有5种,分别为:字符型、整型、浮点型、长整型以及字符型,如下图:

有了以上这些准备我们就可以开始编写程序了。首先我们编写一个串口发送数据的通用函数:

//数据发送
void SendData(uint8_t *txData,uint16_t length)
{
uint16_t i;
for(i=;i<length;i++)
{
//传送寄存器不为空,等待传送结束 while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
{
}
// 写一个字节到对应的串口传送数据寄存器
USART_SendData(USART1, txData[i]);
}
}

3)读取状态信息

我们之所以要单独对状态信息编写操作程序,是因为它的报文格式与读取其他参数有一定的区别,如下图:

/*获取状态*/
void GetMFCStatus(uint8_t status,uint8_t index)
{
uint8_t txBuf[]; txBuf[]=':';
txBuf[]=0x04;
txBuf[]=0x0A;
txBuf[]=0x00;
txBuf[]=status;
txBuf[]=index
txBuf[]=0x0D;
txBuf[]=0x0A; SendData(txBuf,);
}

4)写数据

接下来我们来看看如何写数据,主要用于设置各种参数值,对于我们来说设置流量设定值是必须的,具体报文格式如下:

/*读取参数值*/
void SetMFCParaValue(uint8_t *data,uint16_t length,uint8_t command,uint8_t processNum,uint8_t paraType)
{
uint8_t txBuf[];
uint16_t index=; txBuf[]=':';
txBuf[]=0x04+(uint8_t)length;
txBuf[]=0x0A;
txBuf[]=command;
txBuf[]=0x80+processNum;
txBuf[]=paraType; for(int i=;i<length;i++)
{
txBuf[i+]=data[i];
} txBuf[+length]=0x0D;
txBuf[+length+]=0x0A; SendData(txBuf,length+);
}

5)读数据

接下来我们来看看如何读取数据,主要用于获取各种参数值,对于我们来说读取流量测量值是必须的,具体报文格式如下:

/*读取参数值*/

void GetMFCParaValue(uint8_t processNum,uint8_t paraType,uint8_t paraNum,uint8_t strLength)
{
uint8_t txBuf[]; txBuf[]=':';
txBuf[]=0x07;
txBuf[]=0x0A;
txBuf[]=0x04;
txBuf[]=0x80+processNum;
txBuf[]=paraType;
txBuf[]=processNum&0x7F;
txBuf[]=paraNum;
txBuf[]=strLength;
txBuf[]=0x0D;
txBuf[]=0x0A; SendData(txBuf,);
}

4、结果展示

我们在完成上述编写后编译下装,并上传到OneNET查看最后的显示结果如何。显示数据更新正确,如下图:

至此,我们完成了读取气体质量流量控制器的数据测试。

OneNET麒麟座应用开发之六:与气体质量流量控制器通讯的更多相关文章

  1. OneNET麒麟座应用开发之八:采集大气压力等环境参数

    采集大气压力和温度也是核算大气标准状况下的各种数据的必须参数,为此我们必须知道压力和温度才能计算标准状况下的各种参数,于此我们需要一个既能检测压力也能检测温度的元件. 1.硬件概述 MS5837压力传 ...

  2. OneNET麒麟座应用开发之七:控制采样电机

    气体采样采用主动抽取气体的方式保证充足而平稳的气流,所以我们采用气泵抽取气体来完成. 1.设计概述 客户对这部分要求能够设定电机的速度,但并不需要动态调节.对电机的控制有很多方式,我们采用比较简单的方 ...

  3. OneNET麒麟座应用开发之五:获取加速度传感器ADXL345数据

    由于数据采集站基本都安装在野外或者楼顶,安装位置以及震动对检测数据的准确性有一定影响.所以想要有一个位置状态数据,正好发现麒麟作上有ADXL345,这样一个数字输出的加速度传感器.如图中红框所示: 1 ...

  4. OneNET麒麟座应用开发之四:数据上传测试

    已经测试过OneNET麒麟座开发板了,这次来尝试与OneNET的连接和数据上传.这也是我们测试这块开发办的主要原因,因为在十几种我们有这种将分散的采集点数据上传到后台的需求. 先看看麒麟座这块开发板, ...

  5. OneNET麒麟座应用开发之一:初识OneNET麒麟座

    今天收到了OneNET麒麟座开发板.能得到使用的机会只能说是幸运的.首先上一张靓照: 板子使用的MCU是STM32F103RET6,带有GSM摸块和Wifi摸块可以联网.带有显示屏接口和I2C接口以及 ...

  6. OneNET麒麟座应用开发之三:获取温湿度数据

    对于大气环境监测来说温湿度也是重要的指标.原本计划使用SHT15来采集温湿度数据,不过在OneNET麒麟开发板上,我们发现已经集成有SHT20温湿度传感器,于是我们就使用它了.如下图的红框处: 我们还 ...

  7. OneNET麒麟座应用开发之十:空气质量数据监测站项目总结

    大气质量数据监测站用于测试空气质量监测及数据采集,实现野外或者室内空气质量的检测. 1.项目概述 本项目是一个定制项目,要求采集大气的压力.温度.湿度.PM25.位置等数据并上传到指定的后台服务器.但 ...

  8. MVC5 网站开发之六 管理员 1、登录、验证和注销

    上次业务逻辑和展示层的架构都写了,可以开始进行具体功能的实现,这次先实现管理员的登录.验证和注销功能. 目录 奔跑吧,代码小哥! MVC5网站开发之一 总体概述 MVC5 网站开发之二 创建项目 MV ...

  9. MVC5 网站开发之六 管理员 2、添加、删除、重置密码、修改密码、列表浏览

    目录 奔跑吧,代码小哥! MVC5网站开发之一 总体概述 MVC5 网站开发之二 创建项目 MVC5 网站开发之三 数据存储层功能实现 MVC5 网站开发之四 业务逻辑层的架构和基本功能 MVC5 网 ...

随机推荐

  1. FTP文件乱码和传输模式解释

    转: FTP文件乱码和传输模式解释 2017年02月18日 10:50:03 -Hermes- 阅读数:12112更多 所属专栏: 异常解决方案急诊室   版权声明:大侠,在转载时请注明出处,小弟不胜 ...

  2. UML简单熟悉

    + :代表public - :代表private # :代表protected  实现,继承关系:implements,extends 关联关系:使一个类知道另一个类的属性和方法 每一个Driver类 ...

  3. KindEditor 4.1.2版本,在上传图片的时候 设置为绝对路径

    被这个问题困扰了很久,最终搞定,竟然是如此之简单.   方法如下: 1.打开编辑器目录下的:kindeditor.js 2.修改:urlType : ”, 为:urlType : ‘domain’, ...

  4. C#使用Ado.Net读写数据库

    1.使用DataReader方式读取资料 [csharp] view plain copy String connString = ConfigurationManager.ConnectionStr ...

  5. python写GUI

    图形用户界面 本文利用wxpython wx包中的方法都是以大写的字幕开头 import wx def load(event): file = open(filename.GetValue()) co ...

  6. request请求地址

    1.String contextPath = httpServletRequest.getServletContext().getContextPath(); /项目名称 2.String conte ...

  7. es7预览

    哈哈,es6才刚刚掌握,就给大家介绍es7了. es7的草案其实早已经定下来了,而且更加向着java这些高级语言看齐了 chrome的高版本其实也已经对es7的部分功能实现了!! 1.数组 inclu ...

  8. idea常用快捷键及自定义快捷键汇总

    以下都是挨个进行验证过的 生成get和set方法为:alt+insert 自动补全返回值,自动补全变量名称和属性名称:ctrl+alt+v 输入System.out.println()的快捷方法是:输 ...

  9. 03-依赖倒置原则(DIP)

    1. 背景 类A是高层代码,类A直接依赖B,如果要将类A改为还要依赖C,则必须修改类A的代码来实现.在实际场景中,类A是高层,负责业务逻辑,类B和类C是低层模块,负责基本的原子操作,假如修改A,会给程 ...

  10. 自动升级CentOS Python至官方最新版

    #!/bin/bash # .检查当前系统Python版本 python_old_version=$(python -V >& | awk '{print $2}') echo &quo ...