【应用笔记】【AN001】VC#开发环境下基于以太网的4-20mA电流采集(基于modbus tcp 协议)
版本:第一版 作者:毛鹏 杨帅 日期:20151108
简介
4-20mA电流环具有广泛的应用前景,在许多行业中都发挥着重要作用。本文主要介绍了以太网接口的4-20mA电流采集模块在VC#环境下进行温度采集,实现WINDOWS平台对数据的采集、分析及显示。
系统组成及工作原理
系统组成主要包括PT100铂电阻、SBWZ温度变送器、4-20mA电流采集模块(GM4008)以及上位机软件组成,如图1所示。

图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 function3功能读取保持寄存器如附录1所示,该段程序由一个调用函数组成,程序的第128至148行,是寄存器的设置。第149至第162行,是将数据存入寄存器并读取数据。第163至166是将data的数据转换成float类型存入value中。
(2)显示通道数据
显示通道数据代码如附录2所示,此段程序主要截取的为0通道显示数据,由三个主要函数组成,其余的7个通道可用与之相同的方法实现。
测量采集演示及说明
配备工具或软件
1. 12V直流电源;
2. 两个PT100铂电阻温度传感器;
3. 两个SBWZ温度变送器;
4. 一个以太网接口8通道4-20mA电流采 集模块(GM4008);
5. Aligent 3440A台式六位半数字万用表;
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所示,经过多次实验,两组数据结果基本相同。
表1 实验各项数据表
| 
 被测对象  | 
 GM4008测量值  | 
 万用表 测量值  | 
 换算温度  | 
| 
 火焰(CH0)  | 
 19.57mA  | 
 19.58mA  | 
 389℃  | 
| 
 热水(CH1)  | 
 7.60mA  | 
 7.61mA  | 
 90℃  | 
(2)实验验证
由SBWZ温度变送器以及PT100铂电阻的量程之间的关系,得出实际测得电流与温度之间符合关系式:
y=25*x-100
对应测量的电流值对照计算知所测水温为大约90℃,火焰大约为389℃(由于火焰温度高于量程,所以到19mA以后停止实验,以免损坏设备)与实际相符。
由测试可知:本系统基于VC#开发环境通过以太网测得的数据是真实可靠的,可应用于实际中。
总结
本文通过Visual studio 2015上位机编程实现了VC#环境下以太网的Modbus通信,可完成工业自动化控制系统中的远程数据采集及监测等功能。该通信系统编程模式简单、易于使用、有较强的实用性。
参考资料
1. 《C#高级编程》
2. 《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

==================================
本文完整PDF版 及 代码包下载:
完整版 PDF 下载:
http://pan.baidu.com/s/1mgLCzmo
源代码包下载:(基于 VC#2015)
http://pan.baidu.com/s/1i3hMXvf
若下载失效,请发邮件索取: gingko[AT]vip.163.com [AT]替换成 @
==================================

【应用笔记】【AN001】VC#开发环境下基于以太网的4-20mA电流采集(基于modbus tcp 协议)的更多相关文章
- 【笔记】.NET开发环境下使用PostgreSQL+Oracle_fdw 实现两个数据库之间数据交互操作(二)
		
一 新的可视化工具 因为前文所提到的,看不到外部服务器和外部表的问题,我更换了可视化工具. 好用的新工具PostgreSQL Maestro! 当然如此好用的工具不是免费的,如果想免费使用还请自己去找 ...
 - 【应用笔记】【AN005】Qt开发环境下基于RS485的4-20mA电流采集
		
简介 4-20mA电流环具有广泛的应用前景,在许多行业中都发挥着重要作用.本文主要介绍在Qt开发环境下基于RS485实现4-20mA电流采集,实现WINDOWS平台对数据的采集.分析及显示. 系统组成 ...
 - Hadoop学习笔记(4) ——搭建开发环境及编写Hello World
		
Hadoop学习笔记(4) ——搭建开发环境及编写Hello World 整个Hadoop是基于Java开发的,所以要开发Hadoop相应的程序就得用JAVA.在linux下开发JAVA还数eclip ...
 - 开发环境下的 Kubernetes 容器网络演进之路
		
马蜂窝技术原创文章,更多干货请搜索公众号:mfwtech 使用 Docker+Kubernetes 来简化开发人员的工作流,使应用更加快速地迭代,缩短发布周期,在很多研发团队中已经是常见的做法. 如果 ...
 - 痞子衡嵌入式:在MDK开发环境下将关键函数重定向到RAM中执行的几种方法
		
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在MDK开发环境下将关键函数重定向到RAM中执行的几种方法. 这个关键函数重定向到 RAM 中执行系列文章,痞子衡已经写过 <IA ...
 - iOS系统提供开发环境下命令行编译工具:xcodebuild
		
iOS系统提供开发环境下命令行编译工具:xcodebuild[3] xcodebuild 在介绍xcodebuild之前,需要先弄清楚一些在XCode环境下的一些概念[4]: Workspace:简单 ...
 - spark最新源码下载并导入到开发环境下助推高质量代码(Scala IDEA for Eclipse和IntelliJ IDEA皆适用)(以spark2.2.0源码包为例)(图文详解)
		
不多说,直接上干货! 前言 其实啊,无论你是初学者还是具备了有一定spark编程经验,都需要对spark源码足够重视起来. 本人,肺腑之己见,想要成为大数据的大牛和顶尖专家,多结合源码和操练编程. ...
 - angular 4 开发环境下打包文件过大
		
angular 4本地开发环境下,ng server -- port 8080 -o 之后在在浏览器中查看数据请求,其中vendor.bundle.js有8.3mb,而整个传输数据大小为16.3mb ...
 - jdk1.8源码包下载并导入到开发环境下助推高质量代码(Eclipse、MyEclipse和Scala IDEA for Eclipse皆适用)(图文详解)
		
不多说,直接上干货! jdk1.8 源码, Linux的同学可以用的上. 由于源码JDK是前版本的超集, 所以1.4, 1.5, 1.6, 1.7都可以用的上. 其实大家安装的jdk路径下,这 ...
 
随机推荐
- codeforces  B. Xenia and Spies  解题报告
			
题目链接:http://codeforces.com/problemset/problem/342/B 题目意思:有n个spy,编号从1-n,从左到右排列.现在的任务是,spy s要把信息传递到spy ...
 - osg 中鼠标拾取线段的端点和中点
			
//NeartestPointNodeVisitor.h #pragma once #include <osg\Matrix> #include <vector> #inclu ...
 - Jam的计数法(codevs 1140)
			
题目描述 Description Jam是个喜欢标新立异的科学怪人.他不使用阿拉伯数字计数,而是使用小写英文字母计数,他觉得这样做,会使世界更加丰富多彩.在他的计数法中,每个数字的位数都是相同的(使用 ...
 - SQL 外键
			
先新建2个表,写入数据 -- 创建测试主表. ID 是主键. CREATE TABLE test_main ( id INT, value ), PRIMARY KEY(id) ); -- 创建测试子 ...
 - 添加Java文档注释
			
一.在Eclipse中add javadoc comment的快捷键为: 快捷键为:ALT + SHIFT +J 二.Window-->Preferences-->General--> ...
 - 如何在postgresql中模拟oracle的dual表,来测试数据库最基本的连接功能?
			
还好,网上弄到的,,没有dual的数据库,可以试图用select函数不带from数据表的方式来实现返回值. 一段测试代码: try: conn = psycopg2.connect(database= ...
 - Effective C++笔记:设计与声明
			
条款18:让接口容易被正确使用,不易被误用 1,好的接口很容易被正确使用,不容易被误用.你应该在你的所有接口中努力达成这些性质. 2,“促进正使用”的办法包括接口的一致性,以及与内置类型的行为兼容. ...
 - 【codevs】1082 线段树练习 3  <区间修改+区间和>
			
题目连接 http://codevs.cn/problem/1082/ Description 给你N个数,有两种操作: 1:给区间[a,b]的所有数增加X 2:询问区间[a,b]的数的和. In ...
 - Android中动画
			
两种动画 view动画 属性动画 (也可以使用xml描述动画) view 4动画 补间动画 渐变 AlphaAnimation 缩放 ScaleAnimation 平移 TranslateAnima ...
 - HTML-Geolocation API
			
获取位置信息: 请求一个位置信息,如果用户同意,浏览器就会返回位置信息(由经纬度和其他元数据组成),该信息是通过支持html5地理定位功能的底层设备提供给浏览器的:该API不指定设备用哪种底层技术来定 ...