爱招飞IsoFace 物联网开发工具 设计读取电表数据
电能表,简称电表,是用来测量电能的仪表。随着物联网的概念兴起,作为计量器具的电表,网络接入功能成为迫切的需求。目前市面上大部分电表为智能电表,其特征为集成了通讯功能,这为电能的阶梯计价与远程抄表功能实现提供了技术基础。
在与传统的机械式电表、电子式电表作对比时,智能电表有以下优势:
- 具有多种防窃电功能,起动电流小、无潜动、宽负荷、低功耗,误差曲线平直、长期运行时稳定性好。
- 外形美观、体积小、重量轻、安装方便。
- 准确度高:全电子式设计,内置专用芯片,精度不受频率、温度、电压,高次谐波影响。
- 长寿命:采用SMT技术,优化的电路设计,整机出厂后无需调整电路。
- 功耗低:采用低功耗设计,降低电网线损。
- 可配合身份认证系统实现预购电量;IC卡传递数据,实现数据回读,包括:回读总电量,剩余电量,表内累积购电量,总购电次数等信息。
- 储存表常数、初始值、用户住址、姓名等信息。
- 超负荷报警断电、剩余电量报警,提醒用户及时购电。
智能电表的出现,也给电能表检测机构带来了很多的好处。例如,以往在检测一台机械表或者电子表时,在电能表检测装置上上好表后,调试人员需要在调试软件里手动输入每一块电表的地址,以及电表的有功无功等级、电表适用的调试参数方案,这些大大增加了调试人员的工作量,拖延了电能表按期交货的时间,对企业的品牌形象造成不可忽视的影响,然而自从智能电表诞生后,调试人员只需要将表上机,然后将调试电脑的网线端口与电能表检定装置上的网络端口连接,设置好PC与装置端的通讯串口,就可以自动在检定软件上生成它们的各种参数,通过软件短时间的自动检定过程,智能电表质量是否符合标准,在电脑显示屏上一目了然。
爱招飞物联网开发平台 Smart 集成了调试功能,可使用软件进行智能电表的调试工作,电表采用 ModbusRTU 通讯协议,实现通用广泛的数据采集需求。也可以直接使用平台开发电能表的数据采集终端,轻松实现电表数据的上云工作。企业可依据采集的电表数据计算生产订单能耗,帮助实现精准的能源成本控制。

- Smart 简介:https://www.isoface.cn/isoface/production/software/smart/smart
- Smart 下载:点击此处下载
- Smart 使用手册:https://www.isoface.cn/isoface/doc/smart/main/
- Smart 快速上手:https://www.isoface.cn/isoface/study/quick-start/2022-05-28-03-08-29/smart
- 无需安装,Smart在线试用:https://www.isoface.cn/isoface/support/trial/smart
关联代码如下:
//请自行设置串口端口以及修改演示模式
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.
1461

被折叠的 条评论
为什么被折叠?



