Initial commit - Delphi MES client project
This commit is contained in:
@@ -0,0 +1,203 @@
|
||||
unit uAlarmCom;
|
||||
|
||||
interface
|
||||
|
||||
uses uSafeLog,uErrorInfo,SPComm,System.SysUtils,System.Classes;
|
||||
|
||||
type
|
||||
//串口通讯速率为9600bps,数据位 8,校验位 无,停止位 1,16 进制
|
||||
//最后 2 位 CRC 校验码也可以不用计算,直接用 16 进制 AA AA 代替
|
||||
//控制单个继电器 21 05 00 00 FF 00 8B 5A
|
||||
{
|
||||
21 1 字节 本模块地址 地址范围:01-FF
|
||||
05 1 字节 功能代码 吸合某一路继电器
|
||||
00 00 2 字节 寄存器地址 0000:继电器 Y0 地址;
|
||||
0001:继电器 Y1 地址;
|
||||
0002:继电器 Y2 地址;
|
||||
0003:继电器 Y3 地址;
|
||||
0004:继电器 Y4 地址;
|
||||
0005:继电器 Y5 地址;
|
||||
0006:继电器 Y6 地址;
|
||||
0007:继电器 Y7 地址;
|
||||
FF 00 2 字节 输出数据 FF00:继电器吸合;0000:继电器断开
|
||||
8B 5A 2 字节 CRC 校验 前面所有数据的 CRC 校验码
|
||||
原数据返回:21 05 00 00 FF 00 8B 5A
|
||||
}
|
||||
|
||||
TAlarmCom=class
|
||||
private
|
||||
Comm:TComm;
|
||||
FCommName:STRING;
|
||||
function IsError(var sError:string):boolean;
|
||||
public
|
||||
constructor Create; virtual;
|
||||
destructor Destroy; override;
|
||||
procedure Close();
|
||||
function Open(CommName:string;var sError:string):boolean;
|
||||
function YellowLed(var sError:string):boolean; //黄灯
|
||||
function RedLed(var sError:string):boolean; //红灯
|
||||
function GreenLed(var sError:string):boolean; //绿灯
|
||||
function CloseRedAndBuzzer(var sError:string):boolean; //红灯 蜂鸣器响
|
||||
function RedAndBuzzer(var sError:string):boolean; //红灯 蜂鸣器响
|
||||
function SparkGreen(var sError:string):boolean; //闪绿 蜂鸣器
|
||||
function CloseAllLed(var sError:string):boolean; //全关
|
||||
function OpenBuzzer(var sError:string):boolean; //蜂鸣器响
|
||||
function CloseBuzzer(var sError:string):boolean; //蜂鸣器关闭
|
||||
function CommRunStr(sError:string):boolean;
|
||||
end;
|
||||
|
||||
var
|
||||
AlarmCom:TAlarmCom;
|
||||
|
||||
implementation
|
||||
|
||||
constructor TAlarmCom.Create; //参数固定
|
||||
begin
|
||||
inherited;
|
||||
WorkLog.Debug('创建报警灯');
|
||||
Comm:=TComm.Create(nil);
|
||||
comm.BaudRate:=9600;
|
||||
comm.StopBits:=_1;
|
||||
comm.ByteSize:=_8;
|
||||
//comm.Parity:=None;
|
||||
end;
|
||||
|
||||
destructor TAlarmCom.Destroy;
|
||||
begin
|
||||
WorkLog.Debug('销毁报警灯');
|
||||
Comm.Free;
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
function TAlarmCom.IsError(var sError:string):boolean;
|
||||
begin
|
||||
TRY
|
||||
If Comm.Handle=0 then
|
||||
begin
|
||||
WorkLog.Debug('重新打开报警灯通讯');
|
||||
Comm.StopComm;
|
||||
Comm.StartComm; //打开端口要延时一段时间才能往缓存发送数据
|
||||
Sleep(200);
|
||||
end;
|
||||
Result:=true;
|
||||
EXCEPT
|
||||
on e:Exception do
|
||||
begin
|
||||
Result:=false;
|
||||
WorkLog.Error('报警灯出错:'+ChangeErrorInfo(E.Message));
|
||||
sError:=ChangeErrorInfo('报警灯出错:'+ChangeErrorInfo(E.Message));
|
||||
end;
|
||||
END;
|
||||
end;
|
||||
|
||||
function TAlarmCom.YellowLed(var sError:string):boolean; //黄灯 2
|
||||
begin
|
||||
Result:=IsError(sError);
|
||||
WorkLog.Debug('TAlarmCom报警灯:黄灯');
|
||||
Comm.SendHex('21050002FF00AAAA');
|
||||
end;
|
||||
|
||||
function TAlarmCom.RedLed(var sError:string):boolean; //红灯 0
|
||||
begin
|
||||
Result:=IsError(sError);
|
||||
WorkLog.Debug('报警灯:红灯');
|
||||
Comm.SendHex('21050000FF00AAAA');
|
||||
end;
|
||||
|
||||
function TAlarmCom.GreenLed(var sError:string):boolean; //绿灯 1
|
||||
begin
|
||||
Result:=IsError(sError);
|
||||
WorkLog.Debug('报警灯:绿灯');
|
||||
Comm.SendHex('21050001FF00AAAA');
|
||||
end;
|
||||
|
||||
function TAlarmCom.CommRunStr(sError:string):boolean; //运行指令 '21050001FF00AAAA'
|
||||
begin
|
||||
Result:=IsError(sError);
|
||||
WorkLog.Debug('报警灯:绿灯');
|
||||
Comm.SendHex(sError);
|
||||
end;
|
||||
|
||||
function TAlarmCom.RedAndBuzzer(var sError:string):boolean; //红灯 蜂鸣器响
|
||||
begin
|
||||
Result:=IsError(sError);
|
||||
WorkLog.Debug('报警灯:红灯 蜂鸣器响');
|
||||
RedLed(sError);
|
||||
sleep(200);
|
||||
OpenBuzzer(sError);
|
||||
end;
|
||||
|
||||
function TAlarmCom.CloseRedAndBuzzer(var sError:string):boolean; //关红灯 蜂鸣器响
|
||||
begin
|
||||
Result:=IsError(sError);
|
||||
WorkLog.Debug('报警灯:关闭红灯和蜂鸣器');
|
||||
Comm.SendHex('210500000000AAAA');
|
||||
sleep(200);
|
||||
CloseBuzzer(sError);
|
||||
end;
|
||||
|
||||
function TAlarmCom.SparkGreen(var sError:string):boolean; //闪绿 蜂鸣器
|
||||
begin
|
||||
Result:=IsError(sError); //设备没有响一下,亮一下的功能,只能在线程中延时关闭
|
||||
WorkLog.Debug('报警灯:闪绿 蜂鸣器');
|
||||
GreenLed(sError);
|
||||
OpenBuzzer(sError);
|
||||
TThread.CreateAnonymousThread(
|
||||
procedure
|
||||
var
|
||||
sError:string;
|
||||
begin
|
||||
Sleep(1000);
|
||||
CloseBuzzer(sError);
|
||||
end
|
||||
).Start;
|
||||
end;
|
||||
|
||||
function TAlarmCom.CloseAllLed(var sError:string):boolean; //全关
|
||||
begin
|
||||
Result:=IsError(sError);
|
||||
WorkLog.Debug('报警灯:全关');
|
||||
Comm.SendHex('210500000000AAAA');
|
||||
end;
|
||||
|
||||
function TAlarmCom.OpenBuzzer(var sError:string):boolean; //蜂鸣器响
|
||||
begin
|
||||
Result:=IsError(sError);
|
||||
WorkLog.Debug('报警灯:蜂鸣器响');
|
||||
Comm.SendHex('21050103FF00AAAA');
|
||||
end;
|
||||
|
||||
function TAlarmCom.CloseBuzzer(var sError:string):boolean; //蜂鸣器关闭
|
||||
begin
|
||||
Result:=IsError(sError);
|
||||
WorkLog.Debug('报警灯:蜂鸣器关闭');
|
||||
Comm.SendHex('210500030000AAAA');
|
||||
end;
|
||||
|
||||
procedure TAlarmCom.Close();
|
||||
begin
|
||||
WorkLog.Debug('关闭报警灯');
|
||||
comm.StopComm;
|
||||
end;
|
||||
|
||||
function TAlarmCom.Open(CommName:string;var sError:string):boolean;
|
||||
begin
|
||||
TRY
|
||||
WorkLog.Debug('打开报警灯:'+CommName);
|
||||
Comm.StopComm;
|
||||
comm.CommName:=CommName;
|
||||
comm.StartComm;
|
||||
Result:=true;
|
||||
EXCEPT
|
||||
on e:Exception do
|
||||
begin
|
||||
Result:=false;
|
||||
WorkLog.Error('报警灯出错:'+ChangeErrorInfo(E.Message));
|
||||
sError:=ChangeErrorInfo('报警灯出错:'+ChangeErrorInfo(E.Message));
|
||||
end;
|
||||
END;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
end.
|
||||
Reference in New Issue
Block a user