实验采用带模拟量,分辨率为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. R语言ggplot2 简介

    ggplot2是一个绘制可视化图形的R包,汲取了R语言基础绘图系统(graphics) 和l attice包的优点,摒弃了相关的缺点,创造出来的一套独立的绘图系统: ggplot2 有以下几个特点: ...

  2. CentOS系统基础优化16条知识汇总

    1.不用root管理,以普通用户的名义通过sudo授权管理: 2.更改默认的远程连接服务端,禁止root用户远程连接,甚至要更改只监听内网ip: 3.定时自动更新服务器时间,使其和互联网时间同步: 4 ...

  3. 移动端控制在input里输入的值只能是数字

    <input type='text' oninput="(this.v=function(){this.value=this.value.replace(/[^0-9-]+/,''); ...

  4. 安卓开发笔记——关于Handler的一些总结(上)

    接上篇文章<安卓开发笔记——关于AsyncTask的使用>,今天来讲下在安卓开发里"重中之重"的另一个异步操作类Handler. 今天打算先讲下关于Handler的一些 ...

  5. 软件设计模式之模板方法模式(JAVA)

    什么是模板方法模式? 定义一个操作中算法的骨架,而将这些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤. 好抽象的概念啊,文绉绉的东西就是不讨人喜欢,下面我 ...

  6. LinuxMint下tty.js的安装指南

    1.简介 tty.js是使用Node.js开发的开源Web-based SSH.通过浏览器即可远程访问shell. 关于Web-based SSH的介绍参考https://en.wikipedia.o ...

  7. tftp + bras

    Ubuntu 12.04 网卡设置 开发板ip时192.168.0.2,设置的服务ip是192.168.0.1 因此在主机上/etc/network/interfaces添加如下内容 auto eth ...

  8. curl tutorial with examples of usage

    原文:http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ 阮一峰的这个教程也不错:http://www.ruanyi ...

  9. 浏览器端Less

    摘要: 之前项目用过Less,现在负责的项目也要使用,所以就总结下Less,也方便以后查看.本文主要是讲浏览器端如何使用Less. 简介: LESS是一种由Alexis Sellier设计的动态层叠样 ...

  10. 【转】 Android定时器

    转载自:http://www.android-study.com/pingtaikaifa/508.html 在Android开发中,定时器一般有以下3种实现方法: 一.采用Handler与线程的sl ...