爱招飞 IsoFace 物联网开发工具实现 ModbusRTU 电表数据采集

爱招飞IsoFace 物联网开发工具 设计读取电表数据

电能表,简称电表,是用来测量电能的仪表。随着物联网的概念兴起,作为计量器具的电表,网络接入功能成为迫切的需求。目前市面上大部分电表为智能电表,其特征为集成了通讯功能,这为电能的阶梯计价与远程抄表功能实现提供了技术基础。

在与传统的机械式电表、电子式电表作对比时,智能电表有以下优势:

  1. 具有多种防窃电功能,起动电流小、无潜动、宽负荷、低功耗,误差曲线平直、长期运行时稳定性好。
  2. 外形美观、体积小、重量轻、安装方便。
  3. 准确度高:全电子式设计,内置专用芯片,精度不受频率、温度、电压,高次谐波影响。
  4. 长寿命:采用SMT技术,优化的电路设计,整机出厂后无需调整电路。
  5. 功耗低:采用低功耗设计,降低电网线损。
  6. 可配合身份认证系统实现预购电量;IC卡传递数据,实现数据回读,包括:回读总电量,剩余电量,表内累积购电量,总购电次数等信息。
  7. 储存表常数、初始值、用户住址、姓名等信息。
  8. 超负荷报警断电、剩余电量报警,提醒用户及时购电。

智能电表的出现,也给电能表检测机构带来了很多的好处。例如,以往在检测一台机械表或者电子表时,在电能表检测装置上上好表后,调试人员需要在调试软件里手动输入每一块电表的地址,以及电表的有功无功等级、电表适用的调试参数方案,这些大大增加了调试人员的工作量,拖延了电能表按期交货的时间,对企业的品牌形象造成不可忽视的影响,然而自从智能电表诞生后,调试人员只需要将表上机,然后将调试电脑的网线端口与电能表检定装置上的网络端口连接,设置好PC与装置端的通讯串口,就可以自动在检定软件上生成它们的各种参数,通过软件短时间的自动检定过程,智能电表质量是否符合标准,在电脑显示屏上一目了然。

爱招飞物联网开发平台 Smart 集成了调试功能,可使用软件进行智能电表的调试工作,电表采用 ModbusRTU 通讯协议,实现通用广泛的数据采集需求。也可以直接使用平台开发电能表的数据采集终端,轻松实现电表数据的上云工作。企业可依据采集的电表数据计算生产订单能耗,帮助实现精准的能源成本控制。

在这里插入图片描述

关联代码如下:

//请自行设置串口端口以及修改演示模式
const
  demo = true;
type
  TMyHandler = class(TForm)
private 
  FThis:TBaseForm; 
Public 
  constructor Create(AOwner: TComponent); override;
{模块声明  MODULE-DECLARE}
  procedure btnAddClick(Sender: TObject);
  procedure btnApplyClick(Sender: TObject);
  procedure SimpleThreadTimer1Timer(Sender: TObject);
end;

constructor TMyHandler.Create(AOwner: TComponent);
begin
  FThis :=TBaseForm(AOwner);
end;

{方法实现  MODULE-REAL}
procedure TMyHandler.btnAddClick;
var
  vItem: TListItem;
begin
  vItem := FThis.lvItem.Items.Add;
  vItem.Caption := FThis.edtMeterAddress.Text;
  vItem.SubItems.Add(FThis.edtMeterAddress.Text);
  vItem.SubItems.Add(FThis.siLang1.GetTextW('Elec'));
  vItem.SubItems.Add(FThis.edtMeterAddress.Text);  
end;

procedure TMyHandler.btnApplyClick;
begin
  if demo then
    exit;
  if StrToInt(FThis.edtInterval.Text) < 0 then
  begin
    ShowMessage(FThis.siLang1.GetTextW('illegal'));
    exit;
  end;
  FThis.ModbusConnection1.Active := True;
  FThis.ModbusRTUReadChannel1.ModbusList[0].Interval := StrToInt(FThis.edtInterval.Text);
  FThis.ModbusRTUReadChannel1.ModbusList[0].ServerAddress := StrToInt(FThis.edtMeterAddress.Text);
  FThis.ModbusRTUReadChannel1.ModbusList[0].Enabled := true;
  FThis.SimpleThreadTimer1.Interval := StrToInt(FThis.edtInterval.Text);
  FThis.SimpleThreadTimer1.Enabled := True;
end;

procedure TMyHandler.SimpleThreadTimer1Timer;
var
  i,j,b: Integer;
  s, ReadStr: string;
var
  lvitem:Tlistitem; 
begin
  //FThis.ModbusRTUReadChannel1.ModbusList[0].Execute;
  for j := 0 to FThis.lvItem.Items.Count-1 do
  begin
    //超过12笔数据后清空List
    if FThis.lvLog.Items.Count > 12 then
      FThis.lvLog.Items.Clear;
    //将采集到的数据添加到ListView
    lvitem:=FThis.lvLog.Items.add;
    lvitem.Caption:=FThis.lvItem.Items[j].SubItems[0];
    lvitem.SubItems.Add(FThis.lvItem.Items[j].SubItems[1]);
    lvitem.SubItems.Add(FloatToStr(FThis.ModbusRTUReadChannel1.ModbusList[0].DataValue));
    lvitem.SubItems.Add(FormatDateTime('c',now));
    FThis.iEdit.Value := FThis.lvItem.Items[j].SubItems[0];
    FThis.digiShow.Value := FThis.ModbusRTUReadChannel1.ModbusList[0].DataValue;
    FThis.iLEDRound1.Active := not FThis.iLEDRound1.Active;
 end;  
end;

var
  FMyHandler:TMyHandler;
begin
  FMyHandler := TMyHandler.Create(this);
{事件绑定  MODULE-BIND}
  this.btnAdd.OnClick := FMyHandler.btnAddClick;
  this.btnApply.OnClick := FMyHandler.btnApplyClick;
  this.SimpleThreadTimer1.OnTimer := FMyHandler.SimpleThreadTimer1Timer;
end.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值