【应用笔记】【AN003】VC++环境下基于以太网的4-20mA电流采集
简介
4-20mA电流环具有广泛的应用前景,在许多行业中都发挥着重要作用。本文主要介绍了以太网接口的4-20mA电流采集模块在VC++环境下进行温度采集,实现WINDOWS平台对数据的采集、分析及显示。
系统组成及工作原理
系统组成主要包括PT100铂电阻、SBWZ温度变送器、4-20mA电流采集模块(GM4008)以及上位机软件组成,如图1所示。
PT100铂电阻温度传感器:利用铂金属阻值随温度的变化而变化的特性制成的一种温度传感器,主要用来测量温度的变化量。
SBWZ温度变送器:一种现场安装式温度变送单元,主要将铂电阻的信号变换成线性的4-20mA的输出信号。
4-20mA电流采集模块(GM4008):以太网接口的GM4008电流采集模块,主要实现数据的传输,并通过以太网接口与上位机进行通讯。
上位机:制作上位机界面,实现被测数据的采集、分析和显示。
系统工作过程中,当温度发生变化时,PT100铂电阻温度传感器的电阻值发生变化,其阻值经过SBWZ温度变送器转换为
4-20mA的电流信号,并通过4-20mA电流采集模块(GM4008)与上位机通讯,从而实现温度的采集、分析及显示。
电流采集模块
系统采用以太网接口的8通道4-20mA电流采集模块(GM4008),不仅能更加快速、精确的把测量数据传送给上位机,保证系统的效率,而且可以使系统的信息传输更加稳定。
GM4008简介
GM4008 8通道4-20mA电流采集模块(以下简称模块)采用全电器隔离方案,配合高性能微处理器及8通道12位ADC在较小的体积下完成了电流测量功能。
模块内置高性能电源变换电路,供电电压范围宽至7.5V-36V,且效率高达90%以上。此特性为长时间使用的电源稳定性提供保障。模块内置1500V双隔离电源模块,使得供电输入、模拟测量精度、模块稳定性及通用性提供保证。
模块内置百兆以太网电路,可完成远距离4-20mA数据采集功能。长时间使用稳定可靠,抗干扰强、不掉线。
模块内置32位的高性能ARM微处理器,它不但完成8通道、12位电流采集,而且支持固件升级功能,为后期功能升级和bug修复提供技术保证。
VC++上位机程序设计
VC++环境的介绍
该通信测试界面采用Visual Studio2015 (VC++)实现,软件界面如图2所示。Visual Studio2015是微软公司推出的开发软件,具有基本完整的开发工具集,包括了如UML工具、代码管控工具、集成开发环境等工具,可实现基于C++的Modbus串口通信,该界面设计简洁清晰,操作简单。
图2 软件界面
软件使用方法
软件界面如图2所示,操作方法如下:
- 1.
在IP Address里设置IP; - 2.
在Port里面设置端口,一般固定为502端口; - 3.
点击connect按键,此时会自动连接以太网,此按键变为disconnect; - 4.
点击start按键,开始采集电流; - 5.
点击stop按键,停止采集; - 6.
点击disconnect按键后,则断开以太网,清除数据。
软件的核心代码
(1)Modbus function3功能读取保持寄存器
Modbus读取数据程序如附件1所示,该段程序由一个Modbus3函数组成,程序先是对的第324至342行,是对寄存器的设置。第346至第358行,是数据的发送与读取方式。第360至362行是数据的类型转换。
(2)显示通道数据
显示通道数据代码如附录2所示,此段程序主要为8个通道数据显示。每个通道都是从寄存器读取数据再显示出来。
测量采集演示及说明
配备工具或软件
- 1.
12V直流电源; - 2.
两个PT100铂电阻温度传感器; - 3.
两个SBWZ温度变送器; - 4.
一个以太网接口8通道4-20mA电流采 集模块(GM4008); - 5.
Aligent 34401A台式六位半数字万用表; - 6.
开发环境:Visual Studio
2015(所需软件由用户自行下载); - 7.
操作系统:WIN7以上。
系统连接方法
本次实验主要采集两个通道的电流数据,为了保持图片连线清楚整洁,只接入1个SBWZ,另一个连接方式相同。系统主要硬件连接如图3所示。
图3 系统主要硬件连接图
测试步骤
- 1.
根据系统主要硬件连接图(图3)连接各组件; - 2.
接入两个温度变送器,GM4008配置两个通道,将CH0设定为打火机火焰测试数据采集通道,CH1设定为热水数据采集通道; - 3.
然后在程序界面设置好IP以及端口; - 4.
将两个温度变送器的PT100铂电阻分别放入热水中与打火机火焰中(具体操作为点击界面的connect按钮,连接以后点start按钮,系统会自动连接以太网采集数据,操作简单方便)。
测试结果
实验采集到的数据如图4所示,为了证明测试结果的准确性以及得到准确的温度,进行精度验证与实验验证算两个步骤。
图4 实验采集数据图
(1)精度验证
为了验证所测电流值的准确度,把Aligent 34401A 六位半高精度万用表串联到SBWZ温度变送器后端的电路中,将万用表的电流读数与上位机显示的电流度数进行对比。实验结果如表1所示,经过多次实验,两组数据结果基本相同。
由SBWZ温度变送器以及PT100铂电阻的量程之间的关系,得出实际测得电流与温度之间符合关系式:(2)实验验证
y=25*x-100
对应测量的电流值对照计算知所测水温为大约87℃,火焰大约为389℃(由于火焰温度高于量程,所以到19mA以后停止实验,以免损坏设备)与实际相符。
由测试可知:本系统基于VC++开发环境通过以太网测得的数据是真实可靠的,可应用于实际中。
总结
本文通过Visual studio 2015上位机编程实现了VC++环境下以太网的Modbus通信,可完成工业自动化控制系统中的远程数据采集及监测等功能。该通信系统编程模式简单、易于使用、有较强的实用性。
参考资料
- 《Effective C++》;
- 《C++程序设计语言》
相关资源下载
1、Visual Studio 2015下载地址:
https://www.visualstudio.com/downloads/download-visual-studio-vs
2、GM4008 简易手册:
http://files.cnblogs.com/files/xiaomagee/GM4008%E7%AE%80%E6%98%93%E6%89%8B%E5%86%8CV1.0.pdf
3、GM4008 用户手册:
http://files.cnblogs.com/files/xiaomagee/GM4008%E7%94%A8%E6%88%B7%E6%89%8B%E5%86%8CV1.0.pdf
4、GM4008 购买地址:
https://item.taobao.com/item.htm?id=522185223217
5、本资料源代码包、PDF 文档下载:
链接: http://pan.baidu.com/s/1sj6Aifj 密码: jw9g
http://pan.baidu.com/s/1pJnbxvP
附录1:Modbus 功能码3读取数据程序
//modbus发送并读取数据
void CmodbusDlg::modbus_fun3(int start_address,int read_number)
{
static short int id;
static int response_length;
static int length;
char recvbyte[];
char sendbyte[];
short int data[];
float display_value[];
int i;
CString str;
short int temp;
typedef union{
unsigned short int data;
struct {
char a;
char b;
};
}
TYPE_T;
TYPE_T data_value; id++;
//事务元表示符
sendbyte[] = (id >> ) & 0x00ff;
sendbyte[] = id & 0x00ff;
//协议表示符
sendbyte[] = 0x00;
sendbyte[] = 0x00;
//以下字节的长度
sendbyte[] = 0x00;
sendbyte[] = 0x06;
//单元标识符
sendbyte[] = 0x01;
//功能码
sendbyte[] = 0x03;
//读取寄存器起始地址
sendbyte[] = (start_address >> ) & 0x00ff;
sendbyte[] = start_address & 0x00ff;
//读取寄存器数量
sendbyte[] = (read_number >> ) & 0x00ff;
sendbyte[] = read_number & 0x00ff; response_length = read_number * + ;
//发送读取命令
send(s, sendbyte, , );
//读取数据
length = ;
while (length < response_length){
i = recv(s, &recvbyte[] + length , - length , );
length = length + i;
} for (i = ; i < ; i++) {
data_value.a = recvbyte[i * + ];
data_value.b = recvbyte[i * + ];
data[i] = data_value.data;
} for (i = ; i < ; i++) {
display_value[i] = (float)(data[i * + ] / 100.0);
}
附录2:显示通道数据程序
//显示采集数据
m_ch0.SetWindowTextW(_T(""));
str.Format(_T("%5.2f"), display_value[]);
m_ch0.ReplaceSel(str); m_ch1.SetWindowTextW(_T(""));
str.Format(_T("%5.2f"), display_value[]);
m_ch1.ReplaceSel(str); m_ch2.SetWindowTextW(_T(""));
str.Format(_T("%5.2f"), display_value[]);
m_ch2.ReplaceSel(str); m_ch3.SetWindowTextW(_T(""));
str.Format(_T("%5.2f"), display_value[]);
m_ch3.ReplaceSel(str); m_ch4.SetWindowTextW(_T(""));
str.Format(_T("%5.2f"), display_value[]);
m_ch4.ReplaceSel(str); m_ch5.SetWindowTextW(_T(""));
str.Format(_T("%5.2f"), display_value[]);
m_ch5.ReplaceSel(str); m_ch6.SetWindowTextW(_T(""));
str.Format(_T("%5.2f"), display_value[]);
m_ch6.ReplaceSel(str); m_ch7.SetWindowTextW(_T(""));
str.Format(_T("%5.2f"), display_value[]);
m_ch7.ReplaceSel(str);
【应用笔记】【AN003】VC++环境下基于以太网的4-20mA电流采集的更多相关文章
- 【应用笔记】【AN001】VC#开发环境下基于以太网的4-20mA电流采集(基于modbus tcp 协议)
版本:第一版 作者:毛鹏 杨帅 日期:20151108 简介 4-20mA电流环具有广泛的应用前景,在许多行业中都发挥着重要作用.本文主要介绍了以太网接口的4-20mA电流采集模块在VC#环境下进行温 ...
- 【应用笔记】【AN004】VB环境下基于RS-485的4-20mA电流采集
版本:第一版作者:周新稳 杨帅 日期:20160226 =========================== 本资料高清PDF 下载: http://pan.baidu.com/s/1c1uuhLQ ...
- 【应用笔记】【AN005】Qt开发环境下基于RS485的4-20mA电流采集
简介 4-20mA电流环具有广泛的应用前景,在许多行业中都发挥着重要作用.本文主要介绍在Qt开发环境下基于RS485实现4-20mA电流采集,实现WINDOWS平台对数据的采集.分析及显示. 系统组成 ...
- eclipse环境下基于已构建struts2项目整合spring+hibernate
本文是基于已构建的struts2项目基础上整合 spring+hibernate,若读者还不熟悉struts2项目,请先阅读 eclipse环境下基于tomcat-7.0.82构建struts2项目 ...
- .NET环境下基于RBAC的访问控制
.NET环境下基于RBAC的访问控制 Access Control of Application Based on RBAC model in .NET Environment 摘 要:本文从目前信息 ...
- Windows 环境下基于 nginx 的本地 PyPI 源
Windows 环境下基于 nginx 的本地 PyPI 源的搭建: 1.登录 nginx 官网,下载安装包
- CentOS 环境下基于 Nginx uwsgi 搭建 Django 站点
因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,CentOS 环境下基于 Nginx uwsgi 搭建 Django 站点 以下 ...
- Go学习笔记(一):Ubuntu 环境下Go的安装
本文是根据<Go Web 编程>,逐步学习 Ubuntu 环境下go的安装的笔记. <Go Web 编程>的URL地址如下: https://github.com/astaxi ...
- VC环境下编译OpenSSL(仅仅是个示例,网上还有许多相关文章)
VC环境OpenSSL安装以及编程过程 SSL就是Secure Sockets Layer,是一种安全套接字协议,详情请参考链接中的介绍. 配置过程中需要生成一些mak文件,这些生成代码用perl脚本 ...
随机推荐
- iOS国际化(Xcode5)
如何将你的app内的语言可以根据系统语言切换而切换呢?这是本篇所要解决的问题.废话先不说,上软硬件环境: 硬件:Macbook Pro 软件:Xcode 5.1 代码:https://github.c ...
- 【python】异常处理
转自:http://www.cnblogs.com/IPrograming/p/Python_error_handler.html 1. 抛出异常和自定义异常 Python用异常对象(exceptio ...
- HDU 4059 容斥原理+快速幂+逆元
E - The Boss on Mars Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64 ...
- JDK安装和配置
一.Windows下的JDK环境变量配置 在java 中需要设置三个环境变量(1.5之后不用再设置classpath了,但个人强烈建议继续设置以保证向下兼用问题) JDK安装完成之后我们来设置环境变量 ...
- shell定时任务
1.认识Croncron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业.由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动.关闭这个服务:/sbin/se ...
- 以普通用户登录 su root 用vncviewer:xxxxx 会报错!!exit 回到最初环境变的用户 问题解决!!!!
[root@ok IT-DOC]# vncviewer : TigerVNC Viewer - built May :: Copyright (C) - TigerVNC Team and many ...
- 在.NET下使用C# 控制Windows系统音量
C#开发Windows应用程序中经常需要去控制系统的音量,分两种方式: 1.使用Win Api控制 2.使用C++ dll控制 Win Api控制: 使用user32.dll和winmm.dll都可以 ...
- Codeforces Round #313 (Div. 2) A. Currency System in Geraldion
A. Currency System in Geraldion Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/co ...
- HDFS数据迁移解决方案之DistCp工具的巧妙使用
前言 在当今每日信息量巨大的社会中,源源不断的数据需要被安全的存储.等到数据的规模越来越大的时候,也许瓶颈就来了,没有存储空间了.这时候怎么办,你也许会说,加机器解决,显然这是一个很简单直接但是又显得 ...
- Hadoop的mapreduce开发过程,我遇到的错误集锦(持续更新)
1.Text包导错了. 将import com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider.Text; 改为import o ...