AD采样模块采集带模拟量真空表值的实验
实验采用带模拟量,分辨率为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采样模块采集带模拟量真空表值的实验的更多相关文章
- 4-20mA模拟量采集
4-20mA模拟量采集 4-20mA模拟量采集可选卓岚ZLAN6802(485)/ZLAN6842(以太网)/ZLAN6844(无线wifi)他们不仅可以可采集4~20mA还可以采集 /0~5V/0~ ...
- plc模拟量采集模块的作用
在工业控制中,某些输入量(如压力.温度.流量.转速等)是连续变化的模拟量,某些执行机构(如伺服电动机.调节阀.记录仪等)要求PLC输出模拟信号,而PLC的CPU只能处理数字量.模拟量首先被传感器和变送 ...
- 论EFMS模拟量部分采集电路的修改
论1:电阻R11的作用 如图1是2014-3-11之前模拟量采集的部分硬件电路,图2是纠正后的正确电路. D5是SA20CA,TVS双向二极管,有效防止外接电源的浪涌冲击情况,保护电路. D6是稳压 ...
- 「雕爷学编程」Arduino动手做(35)——模拟量声音传感器
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...
- STM32L476应用开发之二:模拟量数据采集
采集模拟量数据在一台一起中是必不可少的功能.在本次实验中我们要采集的模拟量值主要包括氧气传感器的输出以及压力变送器的输出. 1硬件设计 我们需要采集数据对精度有一定的要求,而STM32L476自带AD ...
- 实现 AD 采样,使用 LCD1602 显示 AD 数值
实现 AD 采样,使用 LCD1602 显示 AD 数值 写在前面 单片机内集成的A/D转换,一般都有相应的特殊功能寄存器来设置A/D的使能标志,参考电压,转换频率,通道选择,A/D输入口的属性(模拟 ...
- PLC模拟量采集模块在工控领域的应用
在工业现场中,往往需要对温度.电流.电压等模拟量进行控制采集,这可以使用PLC对这些数据进行采集,但是如今生产各种PLC模拟量采集模块的厂家非常多,不同类型的PLC都是有自己专属的模拟量采集模块的,不 ...
- 4-20mA转RS485模拟量采集模块是怎么工作的?
4-20mA信号是工业上常用的模拟信号,用来表示温度,距离,速度,角度等参数. 如果需要用PLC或者工控机来采集,通常要转换成数字信号.这时可以采购远向电子生产的模拟量采集模块. 常用的模拟量采集模块 ...
- STM32中AD采样的三种方法分析
在进行STM32F中AD采样的学习中,我们知道AD采样的方法有多种,按照逻辑程序处理有三种方式,一种是查询模式,一种是中断处理模式,一种是DMA模式.三种方法按照处理复杂方法DMA模式处理模式效率最高 ...
随机推荐
- Oracle表明明存在SQL查询数据提示表不存在异常
今天同事遇到一个很奇怪的问题,恢复了一个数据库,表明明存在,用PLSQL和sqlplus都试过了,SQL语句select * from 表名,查询数据,却提示表名不存在异常 然而,使用select * ...
- 【Java集合的详细研究1】Collections类常用方法总结
1.sort(Collection)方法的使用(含义:对集合进行排序). 例:对已知集合c进行排序? public class Practice { public static void main(S ...
- 4 云计算系列之Openstack简介与keystone安装
preface KVM 是openstack虚拟化的基础, 再介绍了kvm虚拟化技术之后,我们介绍下openstack和如何搭建. Openstack组件 openstack架构图如下所示 那么我们就 ...
- 教你ABBYY FineReader 12添加图像的技巧
ABBYY FineReader 12是一款OCR图片文字识别软件,而且强大的它现在还可使用快速扫描窗口中的快速打开.扫描并保存为图像或任务自动化任务,在没有进行预处理和OCR的ABBYY FineR ...
- ABBYY FineReader 14助力2017,正式进入新纪元
ABBYY FineReader 12自2014年推出以来,已经给万千用户的工作带来了便捷,蝉联优秀殊荣这么久,相信不少用户早在期待新版本的到来了吧.这不,ABBYY FineReader 14问世了 ...
- Nginx 反向代理解决favicon404错误问题
# set site favicon location /favicon.ico { root html; } OR location = /favicon.ico { log_not_found o ...
- web实现QQ头像上传截取功能
由于最近一段时间比较忙,发现好久没写博客了,给大家分享下最近搞的logo上传截取功能.在实现这个功能之前找了一些jq的插件,最后选定了cropper在github中可以找到. 具体的思路是1:选择上传 ...
- Java使用选择排序法对数组排序
编写程序,实现将输入的字符串转换为一维数组,并使用选择排序法对数组进行排序. 思路如下: 点击"生成随机数"按钮,创建Random随机数对象: 使用JTextArea的setTex ...
- [Unity官方文档翻译]Primitive and Placeholder Objects Unity原生3D物体教程
Primitive and Placeholder Objects 原始的基础物体 Unity can work with 3D models of any shape that can be cre ...
- 8 -- 深入使用Spring -- 4...2 使用AspectJ实现AOP
8.4.2 使用AspectJ实现AOP AspectJ是一个基于Java语言的AOP框架.Spring 4.0 的AOP对AspectJ很好的集成. AspectJ是Java 语言的一个AOP实现, ...