📄 u_matchineinfo.pas
字号:
unit u_matchineInfo;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, ValEdit, StdCtrls, Buttons, Menus, cxLookAndFeelPainters,
cxButtons;
type
Tfrm_MachineInfo = class(TForm)
GroupBox1: TGroupBox;
vleDevInfo: TValueListEditor;
Button5: TcxButton;
Button3: TcxButton;
Button4: TcxButton;
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure vleDevInfoValidate(Sender: TObject; ACol, ARow: Integer;
const KeyName, KeyValue: String);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
CurDevID: integer;
CurDevIP: string;
CurDevPort: integer;
CurDevPW: integer;
CurSpec: string;
aDevID: integer;
Modified: string;
HaveRead: boolean;
{ Private declarations }
function BNetSpeedEncode(speed: integer): string;
function GetMainFormCheckItem:integer;
function BTimeEncode(MinuteSecond: integer): string;
function BNetSpeedDecode(const speed: string): integer;
function BTimeDecode(const TimeStr: string): integer;
public
{ Public declarations }
end;
var
frm_MachineInfo: Tfrm_MachineInfo;
implementation
uses u_ChildLoadData, u_dm, u_MainForm;
const
HexOfNum: array[0..15] of char=('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
StatusNames: array[1..12] of string=(
'Tatal administrator',
'Tatal users',
'Tatal FP',
'Tatal Password',
'Tatal manage record',
'Tatal In and out record',
'Nominal FP number',
'Nominal user number',
'Nominal In and out record number',
'Remain FP number',
'Remain user number',
'Remain In and out record number');
Languages: array[0..2] of string=(
'English',
'Simplified Chinese',
'Traditional Chinese');
BaudRates: array[0..6] of string=(
'1200 bps',
'2400 bps',
'4800 bps',
'9600 bps',
'19200 bps',
'38400 bps',
'115200 bps');
CRCs: array[0..2] of string=(
'Nothing',
'Even',
'Odd');
StopBits: array[0..1] of string=(
'One',
'Two');
DateSps: array[0..1] of string=(
'"/"',
'"-"');
MSpeeds: array[0..2] of string=(
'Low speed',
'High speed',
'Auto');
OnOffs: array[0..1] of string=(
'Off',
'On');
YesNos: array[0..1] of string=(
'No',
'Yes');
DateFormats: array[0..9] of string=(
'YY-MM-DD','YY/MM/DD','YY.MM.DD',
'MM-DD-YY','MM/DD/YY','MM.DD.YY',
'DD-MM-YY','DD/MM/YY','DD.MM.YY',
'YYYYMMDD');
NetSpeeds: array[0..4] of string=
('10M_H','100M_H','10M_F','100M_F','AUTO');
NetSpeedValues: array[0..4] of integer=(0,1,4,5,8);
{$R *.dfm}
function Tfrm_MachineInfo.BTimeDecode(const TimeStr: string): integer;
var
p,m,s: integer;
begin
p := pos(':', TimeStr);
m:=strtointdef(copy(TimeStr,1,p-1),-1);
s:=strtointdef(copy(TimeStr,p+1,100),-1);
if (m<0) or (s<0) or (m>255) or (s>255) then result := 255;
result := m *256+s;
end;
function Tfrm_MachineInfo.BNetSpeedDecode(const speed: string): integer;
var
i: integer;
begin
result := NetSpeedValues[0];
for i := 0 to length(NetSpeeds)-1 do
if speed=NetSpeeds[i] then
begin
result := NetSpeedValues[i];
exit;
end;
end;
function Tfrm_MachineInfo.BTimeEncode(MinuteSecond: integer): string;
var
m,s: integer;
begin
m:=MinuteSecond div 256;
s:=MinuteSecond mod 256;
if (MinuteSecond<0) or (m>59) or (s>59) then
result := 'No'
else
result := format('%d:%d', [m,s]);
end;
function Tfrm_MachineInfo.BNetSpeedEncode(speed: integer): string;
var
i: integer;
begin
result := NetSpeeds[0];
for i := 0 to length(NetSpeeds)-1 do
if speed=NetSpeedValues[i] then
begin
result := NetSpeeds[i];
exit;
end;
end;
function Tfrm_MachineInfo.GetMainFormCheckItem:integer;
var i: integer;
begin
Result := -1;
for i:=0 to MainForm.DevList.Items.Count-1 do
begin
if MainForm.DevList.Items.Item[i].Checked then
begin
Result := StrToInt(MainForm.DevList.Items.Item[i].Caption);
end;
end;
end;
procedure Tfrm_MachineInfo.FormCreate(Sender: TObject);
var i,j: integer;
begin
vleDevInfo.ItemProps[2].EditStyle := esPickList;
for i:=0 to length(Languages)-1 do
vleDevInfo.ItemProps[2].PickList.Add(Languages[i]);
vleDevInfo.ItemProps[8].EditStyle := esPickList;
for i:=0 to length(BaudRates)-1 do
vleDevInfo.ItemProps[8].PickList.Add(BaudRates[i]);
vleDevInfo.ItemProps[9].EditStyle := esPickList;
for i:=0 to length(CRCs)-1 do
vleDevInfo.ItemProps[9].PickList.Add(CRCs[i]);
vleDevInfo.ItemProps[10].EditStyle := esPickList;
for i:=0 to length(StopBits)-1 do
vleDevInfo.ItemProps[10].PickList.Add(StopBits[i]);
vleDevInfo.ItemProps[11].EditStyle := esPickList;
for i:=0 to length(DateSps)-1 do
vleDevInfo.ItemProps[11].PickList.Add(DateSps[i]);
for j := 12 to 15 do
begin
vleDevInfo.ItemProps[j].EditStyle := esPickList;
for i:=0 to length(OnOffs)-1 do
vleDevInfo.ItemProps[j].PickList.Add(OnOffs[i]);
end;
vleDevInfo.ItemProps[16].EditStyle := esPickList;
for i:=0 to length(MSpeeds)-1 do
vleDevInfo.ItemProps[16].PickList.Add(MSpeeds[i]);
end;
procedure Tfrm_MachineInfo.FormShow(Sender: TObject);
var i: integer;
begin
HaveRead := false;
for i:=1 to vleDevInfo.RowCount-1 do
try
vleDevInfo.ItemProps[i].ReadOnly := true;
except
end;
end;
procedure Tfrm_MachineInfo.vleDevInfoValidate(Sender: TObject; ACol,
ARow: Integer; const KeyName, KeyValue: String);
begin
Modified[ARow] := '1';
end;
procedure Tfrm_MachineInfo.Button3Click(Sender: TObject);
var i: integer;
begin
if not HaveRead then exit;
for i:=1 to vleDevInfo.RowCount-1 do
try
vleDevInfo.ItemProps[i].ReadOnly := false;
except
end;
//vleDevInfo.Enabled := true;
end;
procedure Tfrm_MachineInfo.Button4Click(Sender: TObject);
var
ErrorCode, Value, i: integer;
aSuccess: boolean;
begin
aSuccess := false;
CurDevID := GetMainFormCheckItem;
if CurDevID<=0 then
begin
application.MessageBox('请先选择设备','提示',MB_OK);
exit;
end;
if dm.GetDeviceInfo(CurDevID,CurDevIP,CurDevPort,CurDevPW,CurSpec) then
begin
if not frm_ChildLoadData.DeviceConnected(2,CurDevID,0,CurDevIP,CurDevPort,CurDevPW,0,ErrorCode) then
begin
application.MessageBox('连接设备失败!请检查网络!','提示',MB_OK);
exit;
end
else
begin
for i:=1 to vleDevInfo.RowCount-1 do
begin
if frm_ChildLoadData.CZKEM1.GetDeviceInfo(CurDevID, i, value) then
begin
if i=29 then
begin
vleDevInfo.Strings.ValueFromIndex[i-1]:=BNetSpeedEncode(Value);
end
else if vleDevInfo.ItemProps[i-1].HasPickList then
begin
if (value>=0) and (value<vleDevInfo.ItemProps[i-1].PickList.Count) then
vleDevInfo.Strings.ValueFromIndex[i-1]:=vleDevInfo.ItemProps[i-1].PickList[value]
else
vleDevInfo.Strings.ValueFromIndex[i-1]:=inttostr(Value);
end
else if (i>=19) and (i<=22) then
vleDevInfo.Strings.ValueFromIndex[i-1]:=BTimeEncode(Value)
else
vleDevInfo.Strings.ValueFromIndex[i-1]:=inttostr(Value);
aSuccess :=true;
end
else
begin
frm_ChildLoadData.CZKEM1.GetLastError(ErrorCode);
Application.MessageBox('读取失败!','提示',MB_ICONERROR+MB_OK);
aSuccess :=false;
//AddInfo(format('! GetDeviceInfo(%d) ErrorNo.=%d',[i, ErrorCode]));
end;
end;//end for
end; //end if net
end; //end if GetDevID
Modified:=stringofchar(#0,100);
if not aSuccess then
application.MessageBox('读取失败','提示',MB_OK)
else
HaveRead := true;
end;
procedure Tfrm_MachineInfo.Button5Click(Sender: TObject);
var
ErrorCode, Value, i,j: integer;
begin
if CurDevID<=0 then
begin
application.MessageBox('选择设备','提示',MB_OK);
exit;
end;
if not HaveRead then
begin
application.MessageBox('尚未读取机器参数','提示',MB_OK);
exit;
end;
if dm.GetDeviceInfo(CurDevID,CurDevIP,CurDevPort,CurDevPW,CurSpec) then
begin
if not frm_ChildLoadData.DeviceConnected(2,CurDevID,0,CurDevIP,CurDevPort,CurDevPW,0,ErrorCode) then
begin
application.MessageBox('连接设备失败!请检查网络!','提示',MB_OK);
exit;
end
else
begin
for i:=1 to vleDevInfo.RowCount-1 do
if Modified[i]='1' then
begin
if i=29 then
begin
Value := BNetSpeedDecode(vleDevInfo.Strings.ValueFromIndex[i-1]);
end
else if vleDevInfo.ItemProps[i-1].HasPickList then
begin
for j:=0 to vleDevInfo.ItemProps[i-1].PickList.Count-1 do
begin
if vleDevInfo.ItemProps[i-1].PickList[j]=vleDevInfo.Strings.ValueFromIndex[i-1] then
begin
Value := j;
break;
end;
if value>=vleDevInfo.ItemProps[i-1].PickList.Count then
value:=0;
end;
end
else if (i>=19) and (i<=22) then
Value := BTimeDecode(vleDevInfo.Strings.ValueFromIndex[i-1])
else
value:=strtoint(vleDevInfo.Strings.ValueFromIndex[i-1]);
if not frm_ChildLoadData.CZKEM1.SetDeviceInfo(CurDevID, i, value) then
begin
frm_ChildLoadData.CZKEM1.GetLastError(ErrorCode);
Application.MessageBox('保存失败!','提示',MB_ICONERROR+MB_OK);
exit;
end
else
Modified[i]:=#0;
end;
end;//end if 连接
end;//end if 获取IP
HaveRead := false;
//AddInfo('SetDeviceInfo OK');
Application.MessageBox('保存成功!','提示',MB_OK);
for i:=1 to vleDevInfo.RowCount-1 do
try
vleDevInfo.ItemProps[i].ReadOnly := true;
except
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -