实验采用带模拟量,分辨率为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, 这里我只是说明计算方法而已.

下面附上代码:

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading; namespace test1
{
//http://www.cnblogs.com/hackpig/ 猪悟能's博客 public partial class Form1 : Form
{
Thread myThread2;
private bool PlcMonitorProcEndFlag = false;
bool f1 = false; public Form1()
{
InitializeComponent();
CheckForIllegalCrossThreadCalls = false;
} string oldstr = string.Empty;
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
string data = serialPort1.ReadExisting();
bool f2=false;
try
{
if (data.Length == ) f2 = true;
string[] ary1 = data.Split('-');
string s1=string.Empty;
if (f2 || ary1.Length == )
{
f1 = true;
if (f2)
s1 = data.Substring(, data.Length - );
else
s1 = ary1[].Substring(, ary1[].Length - );
double v1 = double.Parse(s1); double xs = 0.0396f;// 0396f; /*
真空表读数范围: 0到-101kpa
模拟量输出: 1-5V 示例: 模量量结果, >+03.921-00.000
* 真空表读数, 74.2
则xs=(3.921-1)/74.2=0.0393
*
将真空去掉,让真空表读数为零, 读一次模拟输出, 其值为+00.981-00.000, 因为正常值为1, 因此误差为0.019
这个值在加到变量v1上去.
*/ v1 = v1 - + 0.019;
v1 = v1 /xs;
this.textBox1.Text = v1.ToString("0.00000"); string newstr = s1 + ": " + v1.ToString("0.00000") + Environment.NewLine;
if(!newstr.Equals(oldstr))
this.richTextBox1.AppendText(newstr); oldstr = newstr; if (this.richTextBox1.Text.Length > ) this.richTextBox1.Text = ""; }
}
catch (Exception e1)
{
f1 = false;
}
f1 = false;
} private void Form1_Load(object sender, EventArgs e)
{
try
{
serialPort1.Open();
}
catch
{
MessageBox.Show("port2 dont't open");
Environment.Exit(-);
}
myThread2 = new Thread(new ThreadStart(PlcMonitorProc));
myThread2.Start();
} private void PlcMonitorProc()
{
while (!PlcMonitorProcEndFlag)
{
if (!f1)
{
serialPort1.Write("#01" + Environment.NewLine);
Thread.Sleep();
}
}
PlcMonitorProcEndFlag = false;
} private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
PlcMonitorProcEndFlag = true;
myThread2.Join();
} private void stop_Click(object sender, EventArgs e)
{
PlcMonitorProcEndFlag = true;
} private void textBox1_TextChanged(object sender, EventArgs e)
{ } private void richTextBox1_TextChanged(object sender, EventArgs e)
{ } }
}

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

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

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

下面是采集的一组数据:

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

本文源代码下载

原创文章,出处 : http://www.cnblogs.com/hackpig/

AD采样模块采集带模拟量真空表值的实验的更多相关文章

  1. 4-20mA模拟量采集

    4-20mA模拟量采集 4-20mA模拟量采集可选卓岚ZLAN6802(485)/ZLAN6842(以太网)/ZLAN6844(无线wifi)他们不仅可以可采集4~20mA还可以采集 /0~5V/0~ ...

  2. plc模拟量采集模块的作用

    在工业控制中,某些输入量(如压力.温度.流量.转速等)是连续变化的模拟量,某些执行机构(如伺服电动机.调节阀.记录仪等)要求PLC输出模拟信号,而PLC的CPU只能处理数字量.模拟量首先被传感器和变送 ...

  3. 论EFMS模拟量部分采集电路的修改

    论1:电阻R11的作用 如图1是2014-3-11之前模拟量采集的部分硬件电路,图2是纠正后的正确电路. D5是SA20CA,TVS双向二极管,有效防止外接电源的浪涌冲击情况,保护电路.  D6是稳压 ...

  4. 「雕爷学编程」Arduino动手做(35)——模拟量声音传感器

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...

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

    采集模拟量数据在一台一起中是必不可少的功能.在本次实验中我们要采集的模拟量值主要包括氧气传感器的输出以及压力变送器的输出. 1硬件设计 我们需要采集数据对精度有一定的要求,而STM32L476自带AD ...

  6. 实现 AD 采样,使用 LCD1602 显示 AD 数值

    实现 AD 采样,使用 LCD1602 显示 AD 数值 写在前面 单片机内集成的A/D转换,一般都有相应的特殊功能寄存器来设置A/D的使能标志,参考电压,转换频率,通道选择,A/D输入口的属性(模拟 ...

  7. PLC模拟量采集模块在工控领域的应用

    在工业现场中,往往需要对温度.电流.电压等模拟量进行控制采集,这可以使用PLC对这些数据进行采集,但是如今生产各种PLC模拟量采集模块的厂家非常多,不同类型的PLC都是有自己专属的模拟量采集模块的,不 ...

  8. 4-20mA转RS485模拟量采集模块是怎么工作的?

    4-20mA信号是工业上常用的模拟信号,用来表示温度,距离,速度,角度等参数. 如果需要用PLC或者工控机来采集,通常要转换成数字信号.这时可以采购远向电子生产的模拟量采集模块. 常用的模拟量采集模块 ...

  9. STM32中AD采样的三种方法分析

    在进行STM32F中AD采样的学习中,我们知道AD采样的方法有多种,按照逻辑程序处理有三种方式,一种是查询模式,一种是中断处理模式,一种是DMA模式.三种方法按照处理复杂方法DMA模式处理模式效率最高 ...

随机推荐

  1. 面向切面编程(AOP)简介

    在软件中,有些行为对于大多数应用都是通用的.日志,安全和事务管理几乎是所有软件都需要的.他们是否可以主动的参与呢,如果让应用程序只关注与自己所针对的业务领域问题,而其他的问题有其他应用对象来处理.是否 ...

  2. Yii2 session的使用方法(1)

    yii2打开session use yii\web\Session; $session = Yii::$app->session; // check if a session is alread ...

  3. 10.6 监控io性能 10.7 free命令 10.8 ps命令 10.9 查看网络状态 10.10 linux下抓包

    iostat sysstat 包里面包括 sar 和 iostat [root@centos7 ~]# iostat Linux 3.10.0-693.2.2.el7.x86_64 (centos7. ...

  4. AJAX简单介绍

     什么是AJAX Ajax 是 AsynchronousJavaScript and XML(以及 DHTML 等)的缩写. HTML 用于建立 Web表单并确定应用程序其它部分使用的字段. ·J ...

  5. winform c#中子窗体关闭刷新父窗体

    父窗体Form1 子窗体Form2 Form1中有一个datagridview控件和一添加按钮,Form2中有一个Text控件和一个保存按钮 要求点击Form1窗体上的添加按钮,弹出Form2,再te ...

  6. 解决Windows2003的IE安全级别不能修改的问题

    默认装完win2k3IE安全级别是不能修改的,不管怎么样修改,系统总提示说 “此域的推荐安全级别是“安全级-高”.您选择的级别较低.还是返回最高级别的.刚才弄voip,在win2k3虚拟机测试,差点气 ...

  7. 【Intel AF 2.1 学习笔记一】AF程序结构

    Intel App Framework(原jqMobi)是用来开发hybrid app的开源免费框架,被intel收编之后发布了最新的2.1版本,最近正在学习.af的所谓程序结构,就是AF网页的架构, ...

  8. hibernate validate

    http://docs.jboss.org/hibernate/validator/4.2/reference/zh-CN/html_single/  --hibernate validate htt ...

  9. ubuntu:如何制作类似jeso的系统?

    chroot 下载ubuntu的core包或base包 chroo后,先安装grub,再kernel,基本就ok了! 提示:mount --bind /proc  newroot/proc 可能的问题 ...

  10. Windows 2008驱动安装失败的原因及解决方法

    希望这些内容能够帮助各位朋友顺利地在Windows Server 2008系统环境下安装使用好各种设备的驱动程序! 寻找安装失败原因 一般来说,当我们将目标设备的驱动安装光盘正确放置到Windows ...