博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AD采样模块采集带模拟量真空表值的实验
阅读量:6794 次
发布时间:2019-06-26

本文共 4823 字,大约阅读时间需要 16 分钟。

 

 实验采用带模拟量,分辨率为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值计算出的真空值      真空表实际值

 

 

  原创文章,出处 : 

 

你可能感兴趣的文章
怎样选择合适的云服务器
查看>>
亚欧14国ATM机被攻击自动吐钱,或与东欧黑客团体有关
查看>>
Linux服务器网络连接有问题?Ping工具来帮忙
查看>>
Facebook新功能:自动识别哪些李鬼账号假冒您
查看>>
研发人员开发出一套硬件级别的后门技术
查看>>
电力“十三五” 光伏分布式6000万千瓦迎来机遇
查看>>
高桥洋接任索尼中国总裁:索尼营销第一人
查看>>
知乎iOS客户端下午瘫了 原来是第三方防火墙变更害的
查看>>
监控工程中,如何选择光纤的种类和芯数
查看>>
“小病进社区,大病进医院”难吗?
查看>>
20种 IT 职业明年将大幅涨薪,无线网络工程师最高
查看>>
《C语言编程——零基础初学者指南(第3版)》一第2章 编写第一个C程序2.1 概述...
查看>>
《HTML5+CSS3网页设计入门必读》——1.3 理解Web内容递送
查看>>
oracle table-lock的5种模式
查看>>
《 线性代数及其应用 (原书第4版)》——2.8 R^n的子空间
查看>>
初创公司如何快速低耗实现数据化运营
查看>>
《循序渐进学Docker》——导读
查看>>
《树莓派开发实战(第2版)》——1.8 使用复合视频显示器/TV
查看>>
编码之道:取个好名字很重要
查看>>
《树莓派开发实战(第2版)》——1.5 通过NOOBS刷写microSD卡
查看>>