4-20模块知识及编程,本文以ADAM-4117为例来说明
ADAM-4117快速入门手册
一、ADAM-4117概述
ADAM-4117是16位A/D、8通道的模拟量输入模块,可以采集电压、电流等模拟量输入信号,并且为所有通道都提供了独立的可编程的输入范围。在工业测量和监控的应用中,ADAM-4117具有良好的性价比。它不仅能够用于恶劣的环境中,而且还具有更加坚固型的设计。
ADAM-4117支持8路差分信号,还支持MODBUS协议。在模块的右侧有一个白色的拨码开关来设置初始化状态(INIT*)和正常工作状态的切换。ADAM-4117具有4-20ma、0-20ma、±20ma等电流量程,当
您需要测量电流时,不需要外接电阻,只需打开盒盖,按照电路板上的标识来设置跳线即可。
图1
ADAM-4117规格说明
AI 模拟量输入
l 有效分辨率:16位
l 通道:8路差分,可独立设置量程
l 高共模电压:200Vdc
l 通讯协议:ASCII命令,Modbus协议
l 输入类型:mV,V(支持单双极性),mA
l 输入量程:0~150mV, 0~500mV, 0~1V, 0~5V, 0~10V, 0~15V,±150 mV, ±500 mV,
±1V, ±5 V, ±10 V, ±15V, 0~20mA,±20 mA, 4~20mA
l 隔离电压:3000VDC
l 过压保护:±60V
l 采样速率:10/100 采样点每秒(通过测试软件设置)
l 输入内阻:电压20MΩ,电流120Ω
l 精确度:电压模式:±0.1% or better 电流模式:±0.2% or better
l 零点漂移:±6μV/℃
l 跨度漂移:±25 ppm/° C
l 共模抑制(CMR)@50/60Hz dB min
l 内置看门狗
l 内置 TVS/ESD保护
l 功耗
跳线设置:
当ADAM-4117测量电流时,需要跳线。将盒盖拆开,可以看到电路板上有八个跳线,按照下图或者按照电路板上的标识进行跳线,测量电流需要将跳线跳到“I”端,测量电压则需要保持跳线在“V”端的出厂设置不变。跳线完成后,可以使用万用表测量V+与V-之间,正常应该有120Ω的电阻。
图2
二、ADAM-4117硬件连线
如果需要连接二线制变送器,可以参考下图的接线方法。如果变送器是电流变送器,请注意模块内部的电流跳线。
ADAM-4117适用ADAM-4000-5000 Utility(old)或ADAM .Net Utility(new). 下面以ADAM .Net Utility为例,演示ADAM-4117的安装、配置和测试过程。
1. Utility的安装
将ADAM-4117盒子里附带的小光盘放入计算机的光驱中,取消自动播放,使用右键打开,先按照如下路径安装Microsoft DotNet framework,即下图中的dotnetfx.exe。
安装完Microsoft .net fx之后,再安装测试软件Advantech Adam.Net Utility: 注意:如果PC是Win 2000/XP操作系统,需要运行的是Win 32下的安装文件
安装完成之后,可以通过如下路径打开Adam .net Utility:
如果希望使用年代比较久一些的ADAM-4000-5000 Utility,也可以通过光盘上的如下路径安装这个测试软件:
2. Adam .net Utility的快速使用
Step 1 选择连接到ADAM-4117的com口,点击上面的放大镜图标search: 注意:如果使用串口扩展卡,扩展出来的com口序号较大(例如com5),可能需要您点击Utility上面Setup菜单中的refresh
按钮来显示所有的com口
一般情况下,鼠标点击到com1时,右侧setting中的参数无需改变,除非您确认您已经修改了ADAM-4520以及ADAM-4117的串口通讯参数(例如波特率、数据位等)
图:
Step 2 一般情况下,无需更改弹出窗口的Starting address,直接点击Start即可。这项参数的含义是从哪个RS-485地址开始搜索,一直搜索到Address 255为止。
Step 3 搜索到模块后,可以点击Cancel按钮取消搜索,点击左侧菜单中的模块名称进入模块配置页面。
图:
在上面的Utility画面中,可以配置RS-485 地址(Address)、波特率(Baudrate)、通讯协议(Procotol)等。修改完毕后,点击右上角的“Apply change”保存设置到模块的芯片里。
注意:上面截图中的ADAM-4117为初始化状态,所以可以修改波特率和通讯协议等参数。切换初始化状态的开关在模块右侧,拨到INIT为初始化状态(配置状态),拨到Normal为用户正常使用状态
。切换开关的操作必须在模块断电状态下进行才有效。
3. ADAM-4117的MODBUS协议
ADAM-4117支持MODBUS RTU协议,在模块初始化状态的情况下,可以在Utility下通过“Protocol”项的下拉菜单将协议更改为“Modbus”。
更改协议之后,将拨码开关拨到Normal,可以通过MODBUS寄存器地址40001~40008来读取CH0~CH8的数值。更加详细的MODBUS地址对照表参见ADAM-4100系列的英文手册。
Modbus协议读到的数值为16进制或10进制的整数,数值从0-65535,分别对应量程的上下限。例如,当量程为±10V时,如果输入的电压值为0V,则读取到的Modbus数值为32767。
4. ADAM-4117 的ASCII协议
将ADAM-4117的拨码开关拨到Normal状态后上电,用鼠标点一下ADAM-4117所在的com口,再点一下上面的黄色闪电工具。
如果希望读取ADAM-4117全部8个通道的数值,可以使用的ASCII命令是“#”+“地址”+“回车(cr)”;例如当4117地址为1时,可以发送命令“#01(cr)”.
更加详细的ASCII指令表参见ADAM-4100系列英文手册。
图标,打开Terminal
图:
注意:在ADAM Utility中,已经默认在ASCII命令后面增加回车,所以看不出来需要使用回车。如果使用网络上的“串口调试助手”或自己编写程序,那么一定要在命令后面添加回车(对应的ASCII
为0D)才会收到4117的回复。
5. 校准(警告:非必要无需自行校准!)
ADAM-4117出厂时已经经过校准,所以一般情况下,用户无需自行校准。当模块使用几年后,可能会产生一些零点漂移,在这种情况下,如果您有标准信号源,您可以自行校准,也可以寄到研华维
修部门来校准。
校准过程如下:
Step1:将模块右侧的拨码开关拨到INIT状态
Step2:点击Zero calibration按钮,会弹出一个对话框提示“请提供0.0mV的电压到模块的CH0通道”。此时,在CH0通过标准信号源接入0.0mV的信号后,点击“Apply”。
如果您没有接入标准信号源,不小心误点了Zero calibration按钮,请点击弹出窗口右上角的红叉,退出校准过程。务必不要在没有外接0.0mV信号的情况下点击“Apply”按钮!!!!!
注意:如果您使用的不是+/-10V的量程,需要您在CH0输入的信号可能不是0mV,请您按照弹出对话框的提示来输入实际信号!
图:
Step3:点击Span calibration按钮,会弹出一个对话框提示“请提供10.0V的电压到模块的CH0通道”。此时,在CH0通过标准信号源接入10.0V的信号后,点击“Apply”。
如果您没有接入标准信号源,不小心误点了Zero calibration按钮,请点击弹出窗口右上角的红叉,退出校准过程。务必不要在没有外接10.0mV信号的情况下点击“Apply”按钮!!!!!
注意:如果您使用的不是+/-10V的量程,需要您在CH0输入的信号可能不是0mV,请您按照弹出对话框的提示来输入实际信号!
图:
四、ADAM-4100的软件编程
ADAM-4117的编程,主要的流程就是通过串口发出命令,然后收取模块的回复。当使用Modbus协议时,通过串口发出的命令就是Modbus命令,具体可以参考Modbus RTU的标准协议内容,由于是公开
的通用协议,在此不再赘述。如果使用VS.Net 2003/2005对Modbus进行编程,可以参考下面Step3的例程。
下面主要讲解如何通过ASCII协议来对ADAM-4117模块进行编程。 注意:更加详细的ASCII指令表参见ADAM-4100系列英文手册。
Step1 使用Utility上的Terminal功能测试(参见上面3.4小节中的内容),确认ADAM-4117配置正确,可以接收ASCII命令。如果使用Visual Studio6.0编程,请参考Step2的内容;如果使用Visual
Studio200/2005,请参考Step3.
Step2 (使用VS6.0编程)参考ADAM-4100系列英文手册18页-23页的内容,有VB 6.0编程的讲解。
图:
如果使用VC、Labview等编程,可以参考如下的程序流程图进行编程
图:
Step3 (使用VS2003/2005编程)安装光盘里的ADAM .Net class library,安装之后可以在C盘的如下路径找到VB和VC#的例程:
C:\Program Files\Advantech\Adam.NET Class Library\VS2003\Samples\Win32
对于ADAM-4117模块,
使用ASCII协议时,可以参考Adam4017P_18P或Comporttest例程; 使用Modbus协议时,可以参考ModbusRTU例程。
五、ADAM-4117的特殊功能
1. 高速(100Hz)采样:通过Utility里的“Integration Time”更改,将50/60Hz更改为“High Speed”,即为4117的高速采样模式
2. 地址模式:在带电状态下,将4117右侧的拨码开关拨到INIT状态,4117的8个绿色小指示灯会以二进制的形式显示当前4117的地址
3. Adam .net Utility的画图功能:点击Utility画面上的“Trend Log”按钮,可以选择通道进行画图,在画图开始之前点击“Save”按钮,可以将绘制图形的数据以Excel表格的形式保存下来。
六编程部分源码
源码部分以.net(4.0)为例说明
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Advantech.Adam;
using Advantech.Common;
using Advantech.Protocol;
using System.Windows.Forms;
namespace AdditionModule
{
public class _4_20Module
{
public int m_iCom, m_iAddr, m_iCount;
private Adam4000Config m_adamConfig;
//private Adam4000Type m_Adam4000Type;
private AdamCom adamCom;
bool isOpen = false;
public _4_20Module(int port)
{
m_iCom = port; // using COM1
m_iAddr = 1; // the slave address is 1
m_iCount = 0; // the counting start from 0
//m_Adam4000Type = Adam4000Type.Adam4117;
adamCom = new AdamCom(m_iCom);
adamCom.Checksum = false; // disbale checksum
//Open();
}
///
///打开a4-20
///
///
public bool Open()
{
adamCom.OpenComPort();
//if (adamCom.OpenComPort())
//{
isOpen = true;
adamCom.SetComPortState(Baudrate.Baud_9600, Databits.Eight, Parity.None, Stopbits.One);
// set COM port timeout
adamCom.SetComPortTimeout(500, 500, 0, 500, 0);
m_iCount = 0; // reset the reading counter
// get module config
adamCom.Configuration(m_iAddr).GetModuleConfig(out m_adamConfig);
//if (!adamCom.Configuration(m_iAddr).GetModuleConfig(out m_adamConfig))
//{
// adamCom.CloseComPort();
// MessageBox.Show("Failed to get module config!", "Error");
// return false;
//}
return true;
//}
//return true;
}
///
///关4-20
///
public void Close()
{
adamCom.CloseComPort();
isOpen = false;
}
///
/// 4-20读原-始数据
///
///
///
public bool Read(out float[] response)
{
if (!isOpen)
{
Open();
}
response = new float[8];
Adam4000_ChannelStatus[] status;
ushort[] response2 = new ushort[8];
adamCom.AnalogOutput(m_iAddr).GetValues(1, 8, out response2);
return adamCom.AnalogInput(m_iAddr).GetValues(8, out response, out status);
}
}
}