SmartFactory_NEOL/SOURCE/Agent,Kiosk/NILM_Viewer_D104/uMain.~pas
2026-09-04 14:08:41 +09:00

319 lines
7.6 KiB
Plaintext

unit uMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, uMQTTComps, StdCtrls, Grids, BaseGrid, AdvGrid, uMQTT ,uSysLog,
ExtCtrls, DateUtils, ComCtrls, Menus, ScktComp, inifiles, FarmSMem,
JsonConvertor, Buttons, IntNum, NumEdit, ZConnection, MQTT,
ZAbstractDataset, ZDataset, DB, ZAbstractRODataset, FANTrend;
type
TfrmMain = class(TForm)
initTimer: TTimer;
StatusBar1: TStatusBar;
MainMenu1: TMainMenu;
ListBox1: TListBox;
File2: TMenuItem;
ProgramExit1: TMenuItem;
ZConnection1: TZConnection;
ZReadOnlyQuery1: TZReadOnlyQuery;
ZQuery1: TZQuery;
N3: TMenuItem;
CONFIG1: TMenuItem;
NILM2: TMenuItem;
Device1: TMenuItem;
N1: TMenuItem;
Panel1: TPanel;
TreeView1: TTreeView;
Splitter1: TSplitter;
Panel2: TPanel;
FANTrend1: TFANTrend;
Timer1: TTimer;
procedure initTimerTimer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ProgramExit1Click(Sender: TObject);
procedure CONFIG1Click(Sender: TObject);
procedure NILM2Click(Sender: TObject);
procedure Device1Click(Sender: TObject);
procedure TreeView1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
select_nilmID, select_nilm_idxNo : integer;
public
//read_gwid : integer;
fNILM : array [1..max_gw] of TNILM;
appPath : string;
hubPort : integer;
dbIP, dbPW, dbUser, dbSchema, mqtt_topic, ClientID : string;
dbPort, brokerPort : integer;
brokerIP, mqtt_user, mqtt_pw : string;
old_NilmID : integer;
procedure PrintLog(msg : String);
procedure ClearIOTGW();
procedure insertSQL(sql : string);
procedure ShowNilmTreeView();
end;
var
frmMain: TfrmMain;
implementation
{$R *.dfm}
uses global, uConfigMQTT, uConfigNILM, uDevConfig;
procedure TfrmMain.ClearIOTGW();
var
p, i : integer;
begin
for p:=1 to max_gw do
begin
fNILM[p].idxNo := 0;
fNILM[p]._TOPIC := '';
fNILM[p]._NAME := '';
for i:=1 to 3 do
begin
fNILM[p]._VALUE.PF[i] := 0.0;
fNILM[p]._VALUE.Vrms[i] := 0.0;
fNILM[p]._VALUE.Irms[i] := 0.0;
fNILM[p]._VALUE._Var[i] := 0.0;
fNILM[p]._VALUE.Va[i] := 0.0;
fNILM[p]._VALUE.Pwr[i] := 0.0;
fNILM[p]._VALUE.Gyro[i] := 0.0;
fNILM[p]._VALUE.Accel[i] := 0.0;
end;
fNILM[p]._VALUE.TempC := 0;
fNILM[p].rcvCount := 0;
fNILM[p].oldRcvCount := 0;
end;
end;
procedure TfrmMain.ShowNilmTreeView();
var
nilmID : integer;
subNode : TTreenode;
begin
TreeView1.Items.Clear;
for nilmID:=1 to max_gw do
begin
if fNILM[nilmID].idxNo> 0 then
begin
subNode := TreeView1.Items.AddChild(nil, format('%.5d',[nilmID]));
TreeView1.items.AddChild(subNode, 'IDXNO:'+inttostr(fNILM[nilmID].idxNo));
TreeView1.items.AddChild(subNode, 'NAME :'+fNILM[nilmID]._NAME);
TreeView1.items.AddChild(subNode, 'TOPIC:'+fNILM[nilmID]._TOPIC);
end;
end;
end;
procedure TfrmMain.PrintLog(msg : string);
begin
if ListBox1.Items.Count >= 300 then ListBox1.Items.Clear;
ListBox1.Items.Insert(0, FormatDateTime('hh:nn:ss :: ',now)+msg);
end;
procedure TfrmMain.initTimerTimer(Sender: TObject);
var
ini : TInifile;
pwd : string;
begin
FANTrend1.SetItem(1, 'PF', clLime, 1, 0);
FANTrend1.SetItem(2, 'Vrms', clYellow, 300, 0);
FANTrend1.SetItem(3, 'Irms', clSkyBlue, 10, 0);
FANTrend1.SetItem(4, 'Pwr', clRed, 5000, 0);
old_NilmID := 0;
ListBox1.Clear;
mqtt_topic := '';
mqtt_topic := 'QST/NILM/LVDT/#';
pwd := '';
pwd := appPath+'NILM_Manager.ini';
if FileExists(pwd) then
begin
ini := TInifile.Create(pwd);
with ini do
begin
mqtt_topic := ReadString('MQTT','TOPIC',mqtt_topic);
brokerIP := ReadString('MQTT','BrokerIP','183.111.125.203');
brokerPort := ReadInteger('MQTT','BrokerPort',1883);
ClientID := ReadString('MQTT','ClientID','NILM_1st');
mqtt_user := ReadString('MQTT','User','qsentech');
mqtt_pw := ReadString('MQTT','Password','qsentech!1233');
dbIP := ReadString('DATABASE','IP','192.168.200.199');
dbUser := ReadString('DATABASE','User','root');
dbPW := ReadString('DATABASE','PW','1233');
dbSchema := ReadString('DATABASE','Schema','nilm');
dbPort := ReadInteger('DATABASE','Port',3306);
hubPort := ReadInteger('MQTT_HUB','Port',6969);
end;
ini.Free;
end;
if ZConnection1.Connected then ZConnection1.disConnect();
Sleep(300);
ZConnection1.HostName := dbIP;
ZConnection1.Port := dbPort;
ZConnection1.User := dbUser;
ZConnection1.Password := dbPW;
ZConnection1.Database := dbSchema;
frmNILM.ShowNILM();
frmDevConfig.ShowDev();
ShowNilmTreeView();
Timer1.Enabled := True;
initTimer.Enabled := false;
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
appPath := '';
appPath := ExtractFilePath(Application.ExeName);
ClearIOTGW();
end;
procedure TfrmMain.insertSQL(sql : string);
begin
try
try
if not ZConnection1.Connected then ZConnection1.Connect();
if ZConnection1.Connected then
begin
ZQuery1.Active := false;
ZQuery1.SQL.Clear;
ZQuery1.SQL.Add(sql);
ZQuery1.ExecSQL;
end;
finally
if ZConnection1.Connected then ZConnection1.Disconnect;
end;
except
on e : exception do
begin
printlog('Database Connect Error :: '+e.Message);
end;
end;
end;
procedure TfrmMain.ProgramExit1Click(Sender: TObject);
begin
frmMain.Close;
end;
procedure TfrmMain.CONFIG1Click(Sender: TObject);
begin
frmConfigMQTT.Show;
end;
procedure TfrmMain.NILM2Click(Sender: TObject);
begin
frmNILM.Show;
end;
procedure TfrmMain.Device1Click(Sender: TObject);
begin
frmDevConfig.Show;
end;
procedure TfrmMain.TreeView1Click(Sender: TObject);
var
str1, str : string;
li : LongInt;
sub : TTreeNode;
begin
if TreeView1.Selected = nil then exit;
str := TreeView1.Selected.Text;
Statusbar1.Panels.Items[0].text := str;
if Pos(':', str)<= 0 then
begin
select_nilmID := StrTointDef(str, 0);
end;
if TreeView1.Selected.HasChildren then
begin
sub := TreeView1.Selected.getFirstChild;
str := sub.Text;
str1 := Copy(str, Pos(':', str)+1, Length(str)-Pos(':', str));
select_nilm_idxNo := StrTointDef(str1, 0);
printlog(str1);
end;
end;
procedure TfrmMain.Timer1Timer(Sender: TObject);
var
vPF, vVrms, vIrms, vPwr : single;
begin
if select_nilmID<= 0 then exit;
try
try
if not frmMain.ZConnection1.Connected then frmMain.ZConnection1.Connect();
if frmMain.ZConnection1.Connected then
begin
ZReadOnlyQuery1.Active := false;
ZReadOnlyQuery1.SQL.Clear;
ZReadOnlyQuery1.SQL.Add('SELECT * FROM nilm_value WHERE NilmID='+inttostr(select_nilmID));
ZReadOnlyQuery1.Open;
if ZReadOnlyQuery1.RecordCount> 0 then
begin
vPF := ZReadOnlyQuery1.FieldByName('pf_1').AsFloat;
vVrms := ZReadOnlyQuery1.FieldByName('Vrms_1').AsFloat;
vIrms := ZReadOnlyQuery1.FieldByName('Irms_1').AsFloat;
vPwr := ZReadOnlyQuery1.FieldByName('Pwr_1').AsFloat;
end;
end;
finally
if frmMain.ZConnection1.Connected then frmMain.ZConnection1.Disconnect;
end;
except
on e : exception do
begin
frmMain.printlog('Database Connect Error :: '+e.Message);
end;
end;
FANTrend1.Add(1, vPF, formatdatetime('hh:nn:ss',now()));
FANTrend1.Add(2, vVrms, formatdatetime('hh:nn:ss',now()));
FANTrend1.Add(3, vIrms, formatdatetime('hh:nn:ss',now()));
FANTrend1.Add(4, vPwr, formatdatetime('hh:nn:ss',now()));
end;
end.