【应用笔记】【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. 1.        
    在IP Address里设置IP;
  2. 2.        
    在Port里面设置端口,一般固定为502端口;
  3. 3.        
    点击connect按键,此时会自动连接以太网,此按键变为disconnect;
  4. 4.        
    点击start按键,开始采集电流;
  5. 5.        
    点击stop按键,停止采集;
  6. 6.        
    点击disconnect按键后,则断开以太网,清除数据。

软件的核心代码

(1)Modbus function3功能读取保持寄存器

Modbus读取数据程序如附件1所示,该段程序由一个Modbus3函数组成,程序先是对的第324至342行,是对寄存器的设置。第346至第358行,是数据的发送与读取方式。第360至362行是数据的类型转换。

(2)显示通道数据

显示通道数据代码如附录2所示,此段程序主要为8个通道数据显示。每个通道都是从寄存器读取数据再显示出来。

测量采集演示及说明

配备工具或软件

  1. 1.        
    12V直流电源;
  2. 2.        
    两个PT100铂电阻温度传感器;
  3. 3.        
    两个SBWZ温度变送器;
  4. 4.        
    一个以太网接口8通道4-20mA电流采   集模块(GM4008);
  5. 5.        
    Aligent 34401A台式六位半数字万用表;
  6. 6.        
    开发环境:Visual Studio
    2015(所需软件由用户自行下载);
  7. 7.        
    操作系统:WIN7以上。

系统连接方法

本次实验主要采集两个通道的电流数据,为了保持图片连线清楚整洁,只接入1个SBWZ,另一个连接方式相同。系统主要硬件连接如图3所示。

图3 系统主要硬件连接图

测试步骤

  1. 1.        
    根据系统主要硬件连接图(图3)连接各组件;
  2. 2.        
    接入两个温度变送器,GM4008配置两个通道,将CH0设定为打火机火焰测试数据采集通道,CH1设定为热水数据采集通道;
  3. 3.        
    然后在程序界面设置好IP以及端口;
  4. 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通信,可完成工业自动化控制系统中的远程数据采集及监测等功能。该通信系统编程模式简单、易于使用、有较强的实用性。

参考资料

  1.     《Effective C++》;
  2.     《C++程序设计语言》

相关资源下载

1Visual 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

附录1Modbus 功能码3读取数据程序

300 //modbus发送并读取数据
301 void CmodbusDlg::modbus_fun3(int start_address,int read_number)
302 {
303         static short int id;
304         static int response_length;
305         static int length;
306         char recvbyte[256];
307         char sendbyte[12];
308         short int data[24];
309         float display_value[8];
310         int i;
311         CString str;
312         short int temp;
313         typedef union{
314                 unsigned short int data;
315                 struct {
316                         char a;
317                         char b;
318                 };
319         }
320         TYPE_T;
321         TYPE_T data_value;
322
323         id++;
324         //事务元表示符
325         sendbyte[0] = (id >> 8) & 0x00ff;
326         sendbyte[1] = id & 0x00ff;
327         //协议表示符
328         sendbyte[2] = 0x00;
329         sendbyte[3] = 0x00;
330         //以下字节的长度
331         sendbyte[4] = 0x00;
332         sendbyte[5] = 0x06;
333         //单元标识符
334         sendbyte[6] = 0x01;
335         //功能码
336         sendbyte[7] = 0x03;
337         //读取寄存器起始地址
338         sendbyte[8] = (start_address >> 8) & 0x00ff;
339         sendbyte[9] = start_address & 0x00ff;
340         //读取寄存器数量
341         sendbyte[10] = (read_number >> 8) & 0x00ff;
342         sendbyte[11] = read_number & 0x00ff;
343
344         response_length = read_number * 2 + 9;
345         //发送读取命令
346         send(s, sendbyte, 12, 0);
347         //读取数据
348         length = 0;
349         while (length < response_length){
350                 i = recv(s, &recvbyte[0] + length , 256 - length , 0);
351                 length = length + i;
352         }
353
354         for (i = 0; i < 24; i++) {
355                 data_value.a = recvbyte[i * 2 + 10];
356                 data_value.b = recvbyte[i * 2 + 9];
357                 data[i] = data_value.data;
358         }
359
360         for (i = 0; i < 8; i++) {
361                 display_value[i] = (float)(data[i * 3 + 2] / 100.0);
362         }
363 

附录2:显示通道数据程序

364         //显示采集数据
365         m_ch0.SetWindowTextW(_T(""));
366         str.Format(_T("%5.2f"), display_value[0]);
367         m_ch0.ReplaceSel(str);
368
369         m_ch1.SetWindowTextW(_T(""));
370         str.Format(_T("%5.2f"), display_value[1]);
371         m_ch1.ReplaceSel(str);
372
373         m_ch2.SetWindowTextW(_T(""));
374         str.Format(_T("%5.2f"), display_value[2]);
375         m_ch2.ReplaceSel(str);
376
377         m_ch3.SetWindowTextW(_T(""));
378         str.Format(_T("%5.2f"), display_value[3]);
379         m_ch3.ReplaceSel(str);
380
381         m_ch4.SetWindowTextW(_T(""));
382         str.Format(_T("%5.2f"), display_value[4]);
383         m_ch4.ReplaceSel(str);
384
385         m_ch5.SetWindowTextW(_T(""));
386         str.Format(_T("%5.2f"), display_value[5]);
387         m_ch5.ReplaceSel(str);
388
389         m_ch6.SetWindowTextW(_T(""));
390         str.Format(_T("%5.2f"), display_value[6]);
391         m_ch6.ReplaceSel(str);
392
393         m_ch7.SetWindowTextW(_T(""));
394         str.Format(_T("%5.2f"), display_value[7]);
395         m_ch7.ReplaceSel(str);
时间: 2024-10-26 16:02:24

【应用笔记】【AN003】VC++环境下基于以太网的4-20mA电流采集的相关文章

【应用笔记】【AN004】VB环境下基于RS-485的4-20mA电流采集

版本:第一版作者:周新稳 杨帅 日期:20160226 =========================== 本资料高清PDF 下载: http://pan.baidu.com/s/1c1uuhLQ 源代码包下载: http://pan.baidu.com/s/1LSuXw =========================== 简介 本应用笔记主要说明如何在VB开发环境下基于RS485实现4-20mA电流采集. 系统组成及工作原理 系统组成如图1所示,主要包括 PT100铂电阻温度传感器.S

VC++环境下多文档模板应用程序开发(带源码)

我们以前见到的关于VC++环境下利用APP Wizard 自动生成的MDI的应用程序只支持打开同一文档类型的多个文件,但是不能够同时打开不同种类型的文档.网上的这种公开资料比较少,我在知网上查阅了相关的资料.下面我根据这些资料做一下总结(辛辛苦苦一个一个字码出来的). 下面设计一个能够处理两种文档类型的应用程序:第一种文档类型:TXT文档,第二种文档类型:Bub的文档类型. 第一种的文档类型TXT,是利用APP Wizard自动生成的,只不过是在设置的时候将文档类型设置为TXT类型,并且使生成的

在windows环境下基于sublime text3的node.js开发环境搭建

首先安装sublime text3,百度一堆,自己找吧.理论上sublime text2应该也可以.我只能说一句:这个软件实在是太强悍了. 跨平台,丰富的插件体系,加上插件基本上就是一个强悍的ide了.目前我在使用的主要是Emmet.Python.还有一些格式化的插件(xml,json),加上这次安装的node.js. node.js的安装就不用多说了,直接http://nodejs.org/ 点击install下载window版本的安装程序后安装即可.默认的安装会将安装目录加到path环境变量

CentOS7.X环境下基于docker安装部署RabbitMQ集群

1.IP地址规划(将信息配置到/etc/hosts中)主机名 IP地址RabbitMQ01 192.168.8.131RabbitMQ02 192.168.8.132RabbitMQ03 192.168.8.133RabbitMQ04 192.168.8.1342.RabbitMQ集群安装(1)四个节点同时运行,下载RabbitMQ镜像[[email protected]~]# docker pull rabbitmq:3-management(2)四个节点分别运行,启动RabbitMQ容器 [

《高可用MySQL》读书笔记1 – Windows环境下压缩版MySQL安装

近日在读O'REILIY系列的<高可用MySQL>, 自然少不了主从(Master-Slave)配置和横向扩展相关的内容.Master-Slave这东西吧,在许多公司都是标配,开发中基本天天都用,遇到的问题自然也不少(如主从不同步,Master宕机),但操作权限非常有限.有些东西,只有自己看了.做了,才能真正知道原理是什么,也才能更好的去把握. 本文是高可用MySQL的第一篇读书笔记,主要记录Windows环境下压缩版MySQL(基于安装版的傻瓜式安装过程这里不再提及)的安装过程. 1. 从官

VC环境下编译OpenSSL(仅仅是个示例,网上还有许多相关文章)

VC环境OpenSSL安装以及编程过程 SSL就是Secure Sockets Layer,是一种安全套接字协议,详情请参考链接中的介绍. 配置过程中需要生成一些mak文件,这些生成代码用perl脚本生成,所以要安装一个ActivePerl ActivePerl:http://www.activestate.com/activeperl/ openss:http://www.openssl.org/ (本文使用openssl-1.0.0-beta5) 参考 openssl 目录下的 instal

Apache2.4版本环境下基于虚拟主机、ssl、用户控制

环境说明:此篇博客是基于编译安装httpd2.4博客基础上进行的 一.虚拟主机: 1.1基于host [[email protected] apache]# vim/etc/httpd24/httpd.conf Include/etc/httpd24/extra/httpd-vhosts.conf   #开启虚拟主机 #DocumentRoot"/www/htdocs"    #将中心主机注释掉 [[email protected] apache]# cd/etc/httpd24/ex

eclipse环境下基于已构建struts2项目整合spring+hibernate

本文是基于已构建的struts2项目基础上整合 spring+hibernate,若读者还不熟悉struts2项目,请先阅读 实现步骤: 第一步:引入spring所需jar包,如下图所示: 第二步:导入hibernate所需jar包,如下图中被选中jar文件: 第三步:导入struts-spring整合包,暂且就这么称呼吧 第四步:导入MySQL驱动包: 第五步:所有准备工作就绪后,接下来创建spring与hibernate配置文件,命名为applicationContext.xml,配置如下所

php学习笔记64bit win7 环境下搭建php编译环境XAMPP

最近项目需要,开始使用php来开发Apache服务器,所以赶鸭子上架,开始学习php,这里第一步当然是搭建一个php编译环境 电脑是thinkpad t440,64位的Windows7 企业版,XAMPP官网并没有64 Windows下集成安装包,之前尝试了各种方法,发现32位的安装包也可在在64位下使用,只是需要经过一定的配置. 首先当然是,下载xampp安装包,直接在官网上下载即可