仪表采集控件
# Smart 控件使用(仪表采集)
仪表采集控件是用于规模化大批量数据采集时使用的专业控件,可同时采集不同类型的数据信息。
# 1. TMeter组件
TMeter组件是基于TComPort组件扩充而来,提供了程序内组件的COM连接接口,具有TComPort所有功能的同时还实现仪表数据采集之功能。
# 1.1. 属性
- TMeter组件主要属性
属性 | 功能说明 |
---|---|
Active | 是否激活该组件 |
BaudRate | 获取或设置串行波特率 |
BufferSizes | 缓存区设定 |
Characters | 设定控制字符 |
CustBaudRate | 获取或设置自定义串行波特率 |
DataBits | 获取或设置每个字节的标准数据位长度 |
DeviceName | 组件对应的连接端口名称 |
Parity | 指定Meter对象的奇偶校验位 |
PriorityClass | 指示系统将与进程关联的优先级,此值与进程的每个线程的优先级值一起来确定每个线程的基本优先级别 |
StopBits | 指定在Meter对象上使用的停止位的数目 |
ThreadPriority | 指定线程的优先级别 |
MeterList | 仪表列表 |
Interval | 采集间隔时间 |
Enabled | 是否启动采集 |
# 1.1.1. DataBits 属性
获取或设置每个字节的标准数据位长度。默认为dbDefault,其余选项包括db4~db8。
# 1.1.2. FlowControl 属性
设置通信时的数据流控制选项。包含以下属性选项设置。
- DTR:在串行通信过程中启用数据终端就绪 (DTR) 信号。
- RTS:在串行通信中启用请求发送 (RTS) 信号。
- XOffLimit、XOnLimit、XOnXOff为流控制协议及其限制设置,只要通信双方根据通信状况使用相同的配置协议即可。
# 1.1.3. Parity 属性
指定Meter对象的奇偶校验位。包含如下选项。
- paDefault:默认选项。
- paEven:设置奇偶校验位,使位数等于偶数。
- paMark:将奇偶校验位保留为 1。
- paNone:不发生奇偶校验检查。
- paOdd:设置奇偶校验位,使位数等于奇数。
- paSpace:将奇偶校验位保留为 0。
# 1.1.4. PriorityClass 属性
指示系统将与进程关联的优先级。 此值与进程的每个线程的优先级值一起来确定每个线程的基本优先级别。包含如下选项。
- pcDefault:默认选项。
- pcHigh:指定进程执行必须立即执行的时间关键任务,不管操作系统的负荷如何,用户调用该对话框后均必须迅速响应。 该进程的线程优先于普通或空闲优先级类进程的线程。为进程的优先级类指定High 这一个优先级时需谨慎,因为高优先级类应用程序几乎可以使用所有可用的处理器时间。
- pcIdle:指定此进程的线程只能在系统空闲时运行,如屏幕保护程序。 更高优先级类中运行的任何进程的线程都优先于此进程的线程。 此优先级类由子进程继承。
- pcNormal:指定进程没有特殊的安排需求。
- pcRealTime:指定进程拥有可能的最高优先级。具有 RealTime 优先级的进程的线程抢占所有其他进程的线程,包括执行重要任务的操作系统进程。 因此,执行时间并不太短的 RealTime 优先级进程可能导致磁盘高速缓存不刷新或鼠标无响应。
# 1.1.5. StopBits 属性
指定在Meter对象上使用的停止位的数目。有如下选项。
- sbDefault:默认选项。
- sb1:使用一个停止位。
- sb1_5:使用1.5个停止位。
- sb2:使用两个停止位。
# 1.1.6. MeterList 属性
Meter数据采集列表,有如下选项。
# 1.1.6.1. 属性
- TMeter组件主要属性
属性 | 功能说明 |
---|---|
Address | 仪表地址 |
Caption | 仪表名称 |
Code | 仪表编号 |
Data | 发送命令(电表使用) |
Error | 错误信息 |
Interval | 休眠时间(毫秒) |
ItemIndex | 仪表索引 |
LastSaveTime | 采集数据最后保存时间 |
LastTime | 最近采集时间 |
Log | 日志(发送和返回的原始数据) |
MeterType | 指定仪表类型 |
Rate | 仪表系数 |
Value1 | 采集数据1 |
Value2 | 采集数据2 |
Value3 | 采集数据3 |
Value4 | 采集数据4 |
Value5 | 采集数据5 |
# 1.1.6.2. Data属性
指定仪表采集时的一些特殊命令,目前只有电表会用到,如指定采集尖峰谷平的数据。
- 正向总功:00010000
- 组合尖峰谷平:0000FF00
# 1.1.6.3. MeterType属性
指定仪表类型,目前支持如下几种类型。
- LDZ_5J:金田水表
- LDYB_3000:英博水表
- LDM:恢宏水表
- DLT645_2007:电表 DLT645_2007
- FCM_Single:天信FCM体积修正仪 浮点单精度协议
- FCM_V1_3:天信FCM体积修正仪 天信V1.3协议
- EVC300:苍南仪表 EVC3000体积修正仪
- PROH_6000L:杭州普恒蒸汽表
- HS96:杭州成套节流装置蒸汽表
针对不同仪表类型肯协议,Value1,Value2,Value3,Value4,Value5 值都有不同的含义。
LDZ_5J:金田水表 Value1=累积流量,Value2=瞬时流量,Value3=未使用,Value4=未使用,Value5=未使用
LDYB_3000:英博水表 Value1=累积流量,Value2=瞬时流量,Value3=压力,Value4=流速,Value5=未使用
LDM:恢宏水表 Value1=累积流量,Value2=瞬时流量,Value3=未使用,Value4=未使用,Value5=未使用
DLT645_2007:电表 DLT645_2007 Value1=总功,Value2=尖电,Value3=峰电,Value4=平电,Value5=谷电
FCM_Single:天信FCM体积修正仪 浮点单精度协议 Value1=标准总量,Value2=标况体积流量,Value3=工况体积流量,Value4=温度,Value5=压力
FCM_V1_3:天信FCM体积修正仪 天信V1.3协议 Value1=标准总量,Value2=标况体积流量,Value3=工况体积流量,Value4=温度,Value5=压力
EVC300:苍南仪表 EVC3000体积修正仪 Value1=标准总量,Value2=标况体积流量,Value3=工况体积流量,Value4=温度,Value5=压力
PROH_6000L:杭州普恒蒸汽表 Value1=累积流量,Value2=瞬时流量,Value3=压力,Value4=压差,Value5=温度
HS96:杭州成套节流装置蒸汽表 Value1=累积流量,Value2=瞬时流量,Value3=压力,Value4=压差,Value5=温度
# 1.1.7. Interval 属性
指定在Meter数据采集时轮询的频率,单位毫秒(ms)。
//1秒轮询
FThis.Meter1.Interval := 1000;
2
# 1.1.8. Enabled 属性
指定是否启动Meter的数据采集。
//启动数据采集
FThis.Meter1.Enabled := true;
2
# 1.2. 事件
- TMeter主要事件
事件 | 何时触发 |
---|---|
AfterClose | 在端口关闭后触发该事件 |
AfterOpen | 在端口打开后触发该事件 |
BeforeClose | 在端口关闭前触发该事件 |
BeforeOpen | 在端口打开前触发该事件 |
ReceiveData | 数据采集后触触发该事件 |
# 1.2.1. ReceiveData 事件
TReceiveItemDataEvent = procedure(AItem: TMeterItem) of object;
指示仪表数据采集时,将采集到的数据通过该事件上回调数据。
- 示例
procedure TMyHandler.Meter1ReceiveData;
var
lvitem:Tlistitem; //此处一定要预定义临时记录存储变量.
begin
if FThis.lvLog.Items.Count > 27 then
FThis.lvLog.Items.Clear;
lvitem:=FThis.lvLog.Items.add;
//FThis.lvLog.Items.BeginUpdate;
lvitem.Caption:=AItem.Code;
lvitem.SubItems.Add(AItem.Caption);
lvitem.SubItems.Add(AItem.Address);
lvitem.SubItems.Add(AItem.Value1);
lvitem.SubItems.Add(FormatDateTime('c',now));
end;
2
3
4
5
6
7
8
9
10
11
12
13
14