模块采集带模拟量真空表实验

实验采用带模拟量,分辨率为1-5V,量程为0--101kpa的真空表

数据采集模块采用DAM-8021,  16位模块

算法描述如下:

真空表读数范围: 0到-101kpa
模拟量输出: 1-5V

一次AD数据采集结果为(由串口助手取得):  >+03.921-00.000 
此时真空表读数:  74.2
则系数A=(3.921-1)/74.2=0.0393

真空表模拟量输出修正系数:  是指真空表模拟量输出的偏差.

其取得方法为,  将真空去掉,让真空表读数为零, 读一次AD采样的结果, 例如其值为+00.981-00.000, 因为这个真空表的最小模拟量值为1, 因此误差为0.019

AD采样转换结果= (当前AD采样值-1+真空表模拟量输出修正系数)/系数A

为什么要当前AD采样值减1? 这个笔者也不好理解, 经过实验证明确实如此. 也许是真空表是1-5V, 而不是0-5V的原因? 如果有朋友知道为什么, 谢谢回贴指导下笔者.

按上面的示例结果, AD数据采集结果为>+03.921-00.000

则 AD采样转换结果= (3.921-1+0.019) /0.0393= 74.8  , 因为是举的例子, 其真空表模拟量输出修正系数不是现场真实的值,因此计算结果不是74.2, 这里我只是说明计算方法而已.

下面附上代码:

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Drawing;
  6 using System.Linq;
  7 using System.Text;
  8 using System.Windows.Forms;
  9 using System.Threading;
 10
 11 namespace test1
 12 {
 13     //http://www.cnblogs.com/hackpig/  猪悟能‘s博客
 14
 15     public partial class Form1 : Form
 16     {
 17         Thread myThread2;
 18         private bool PlcMonitorProcEndFlag = false;
 19         bool f1 = false;
 20
 21         public Form1()
 22         {
 23             InitializeComponent();
 24             CheckForIllegalCrossThreadCalls = false;
 25         }
 26
 27         string oldstr = string.Empty;
 28         private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
 29         {
 30             string data = serialPort1.ReadExisting();
 31             bool f2=false;
 32             try
 33             {
 34                 if (data.Length == 8) f2 = true;
 35                 string[] ary1 = data.Split(‘-‘);
 36                 string s1=string.Empty;
 37                 if (f2 || ary1.Length == 4)
 38                 {
 39                     f1 = true;
 40                     if (f2)
 41                         s1 = data.Substring(1, data.Length - 1);
 42                     else
 43                         s1 = ary1[0].Substring(1, ary1[0].Length - 1);
 44                     double v1 = double.Parse(s1);
 45
 46                     double xs = 0.0396f;// 0396f;
 47
 48                     /*
 49                      真空表读数范围: 0到-101kpa
 50                      模拟量输出: 1-5V
 51
 52                      示例: 模量量结果, >+03.921-00.000
 53                      *     真空表读数, 74.2
 54                      则xs=(3.921-1)/74.2=0.0393
 55                      *
 56                      将真空去掉,让真空表读数为零, 读一次模拟输出, 其值为+00.981-00.000, 因为正常值为1, 因此误差为0.019
 57                      这个值在加到变量v1上去.
 58                      */
 59
 60                     v1 = v1 - 1 + 0.019;
 61                     v1 = v1 /xs;
 62                     this.textBox1.Text = v1.ToString("0.00000");
 63
 64                     string newstr = s1 + ": " + v1.ToString("0.00000") + Environment.NewLine;
 65                     if(!newstr.Equals(oldstr))
 66                         this.richTextBox1.AppendText(newstr);
 67
 68                     oldstr = newstr;
 69
 70                     if (this.richTextBox1.Text.Length > 50000) this.richTextBox1.Text = "";
 71
 72                 }
 73             }
 74             catch (Exception e1)
 75             {
 76                 f1 = false;
 77             }
 78             f1 = false;
 79         }
 80
 81         private void Form1_Load(object sender, EventArgs e)
 82         {
 83             try
 84             {
 85                 serialPort1.Open();
 86             }
 87             catch
 88             {
 89                 MessageBox.Show("port2 dont‘t open");
 90                 Environment.Exit(-1);
 91             }
 92             myThread2 = new Thread(new ThreadStart(PlcMonitorProc));
 93             myThread2.Start();
 94         }
 95
 96         private void PlcMonitorProc()
 97         {
 98             while (!PlcMonitorProcEndFlag)
 99             {
100                 if (!f1)
101                 {
102                     serialPort1.Write("#01" + Environment.NewLine);
103                     Thread.Sleep(50);
104                 }
105             }
106             PlcMonitorProcEndFlag = false;
107         }
108
109         private void Form1_FormClosing(object sender, FormClosingEventArgs e)
110         {
111             PlcMonitorProcEndFlag = true;
112             myThread2.Join();
113         }
114
115         private void stop_Click(object sender, EventArgs e)
116         {
117             PlcMonitorProcEndFlag = true;
118         }
119
120         private void textBox1_TextChanged(object sender, EventArgs e)
121         {
122
123         }
124
125         private void richTextBox1_TextChanged(object sender, EventArgs e)
126         {
127
128         }
129
130     }
131 }

DAM8021, DAM8041这样的AD采集模块, 支持485接口, 因此可以直接用串口助手发送指令的方式取得测量结果, 相比9111卡那样的AD采集板卡, 还需要插入电脑主机槽中并且要装驱动程序, 是方便很多.

这种卡只需要IPC用串口发送字符串 "#01" 就可以取01通道的采集结果.

经用上面代码采集的数据, 跟真空表读数是完全一致的.

下面是采集的一组数据:

AD采样值        AD值计算出的真空值      真空表实际值

本文源代码下载

时间: 2024-11-03 22:02:16

模块采集带模拟量真空表实验的相关文章

基于tcp/ip以太网通信实现0-5v,4-20ma模拟量AI采集以及模拟量AO输出控制-综科智控

ZKA-XXX-ETH 使 用 说 明 书 [ ]绝密 [ ]NDA [X]公开 版本历史 版本 修订日期 修订人 修订内容 1.0 2014-10-13 综科智控 1.0初版正式发布 1.1 2014-12-07 综科智控 填图 1.2 2015-03-01 综科智控 更新配置 1.3 2015-08-13 综科智控 修正组网图 1.4 2015-09-28 综科智控 增加ZKA型号 1.5 2016-05-22 综科智控 增加附件 1.6 2016-11-01 综科智控 修改组网图 1.7

模拟量无线采集传输,模拟量输出,模拟量无线传输,0~5v无线采集传输,0~20ma

ZKA-XX-WIFI 使 用 说 明 书 [ ]绝密 [ ]NDA [X]公开 版本历史 版本 修订日期 修订人 修订内容 1.0 2014-10-13 综科智控 1.0初版正式发布 1.1 2014-12-07 综科智控 填图 1.2 2015-03-01 综科智控 更新配置 1.3 2015-08-13 综科智控 修正组网图 1.4 2015-09-28 综科智控 增加ZKA型号 1.5 2016-05-22 综科智控 增加附件 1.6 2016-11-01 综科智控 修改组网图 1.7

STM32L476应用开发之二:模拟量数据采集

采集模拟量数据在一台一起中是必不可少的功能.在本次实验中我们要采集的模拟量值主要包括氧气传感器的输出以及压力变送器的输出. 1硬件设计 我们需要采集数据对精度有一定的要求,而STM32L476自带ADC为12位的,所以我们采用独立的ADC芯片来完成这一工作.由于使用经验的关系,我们选择了AD7705芯片. AD7705为完整16位.低成本.Σ-Δ型ADC,适合直流和低频交流测量应用.其具有低功耗(3 V时最大值为1 mW)特性,因而可用于环路供电.电池供电或本地供电的应用中.片内可编程增益放大器

数据传输中用到的模拟量和开关量指什么

很多人对工业数据传输过程中用到的模拟量和开关量这两个词非常的陌生,不知道是什么意思.单单从字面上看,并不知道他们分别代表什么意思.在工业上经常是需要对这两个数据进行传输的,以便观察采集的数据以及设备工作状态.对一个参数来说只有两种可能,不是模拟量的话必然是开关量,今天就带大家了解一下这两个术语到底是什么意思. 那么什么是模拟量?什么是开关量? 模拟量是一种连续变化的量,比如温度,从0~100度,压力从0~10Mpa,液位从1~5米,电动阀门的开度从0~100%等等,这些量都是模拟量. 开关量表示

西门子博途编程-模拟量断线超量程处理(中值法)

温度PID控制时, 有多个温度测量点, 但最终只有一个温度作为反馈值参与PID控制, 我们有时会采用平均值法, 计算所有温度的平均值来作为PID的反馈值. 但在某一路温度探头断线的情况下, 温度值为零, 这时平均值就会小很多. 像这种情况下中值法比较有效.  原理如下: 对于一组温度, 模拟量转换为数字量后, 对温度值进行排序, 取中间的那个值作为PID反馈值. 如果是偶数, 取中间两个值除以2后作为反馈值. 排序采用西门子LGF的库中的希尔排序, 但它是FB的, 使用上还的带个DB块, 现修改

无线plc,无线开关量,无线io模块,wifi开关量,io控制卡,无线数据采集RTU模块

标题: 基于lora及wifi无线通信的无线PLC在物联网远程IO控制场合中的应用 标签: 无线plc,无线开关量,无线io模块,wifi开关量,io控制卡 文档介绍: 本文档描述lora和wifi无线通信方式在远程开关量模拟量控制场合中的应用,无线开关量采集传输,无线模拟量采集读取以及0~5V,4-20ma,0~10V,0-20ma电压电流信号的采集传输, ZKD-8I8SO-WIFI是一款无线WIFI通信控制的光耦隔离大电流晶体管IO开关量输入输出控制设备. 主要用于: ?  通过无线WIF

模拟量编程详解——三菱FX2N系列

前几期,我们发表过西门子PLC的模拟量手把手教学文,发现大家很感兴趣,也有不少朋友给我们留言需要我们发表些三菱PLC的,苦于事多,力不从心!今天熬夜,把这空缺补上!(熬夜伤身,记得多给我们鸡腿补补) 先用例子来引导 有一个压力变送器,量程为0-20MPa,输出信号为0-10V.PLC借助FX2N-2AD的模拟量输入模块,将压力值传送给上位机显示. 其中的FX2N-2AD模块的量程为0-10V,转换后的数字量为0-4000,(这个0~4000,是FX2N-2AD模块的输出特性,也就是线性比的数据值

PLC模拟量(工程量)转化的方法

1.基本概念 我们生活在一个物质的世界中.世间所有的物质都包含了化学和物理特性,我们是通过对物质的表观性质来了解和表述物质的自有特性和运动特性.这些表观性质就是我们常说的质量.温度.速度.压力.电压.电流等用数学语言表述的物理量,在自控领域称为工程量.这种表述的优点是直观.容易理解.在电动传感技术出现之前,传统的检测仪器可以直接显示被测量的物理量,其中也包括机械式的电动仪表. 2.标准信号    在电动传感器时代,中央控制成为可能,这就需要检测信号的远距离传送.但是纷繁复杂的物理量信号直接传送会

Modbus读写模拟量寄存器具体解释

读可读写模拟量寄存器: 发送命令(主机向从机)格式: [设备地址] [命令号03] [起始寄存器地址高8位] [低8位] [读取的寄存器数高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位] 例:[11][03][00][6B][00][03][CRC低][CRC高] 意义例如以下: 11:设备地址,样例中的地址是11,溶氧传感器端默认的地址是1,. 03:读模拟量的命令号固定为03,这是Modbus协议规定的. 00.6B:起始地址高8位(00).低8位(6B):表示想读取的模