⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 u_matchineinfo.pas

📁 中控800型号考勤机的自动采集数据程序。能够手动采集
💻 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 + -