176 lines
4.8 KiB
ObjectPascal
176 lines
4.8 KiB
ObjectPascal
unit uAlarmLed;
|
|
|
|
interface
|
|
|
|
uses uSafeLog,uErrorInfo,SPComm,System.SysUtils,System.Classes;
|
|
|
|
type
|
|
//串口通讯速率为 9600bps,数据位 8,校验位 无,停止位 1,16 进制
|
|
//控制灯信号开启 控制灯信号闪烁 控制灯信号关闭
|
|
//11:红灯亮 41:红灯闪烁 21:红灯关闭
|
|
//12:黄灯亮 42:黄灯闪烁 22:黄灯关闭
|
|
//14:绿灯亮 44:绿灯闪烁 24:绿灯关闭
|
|
//18:蜂鸣器响 48:蜂鸣器间断响 28:蜂鸣器关闭
|
|
TAlarmLed=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; //蜂鸣器关闭
|
|
end;
|
|
|
|
var
|
|
AlarmLed:TAlarmLed;
|
|
|
|
implementation
|
|
|
|
constructor TAlarmLed.Create; //参数固定
|
|
begin
|
|
inherited;
|
|
WorkLog.Debug('创建报警灯');
|
|
Comm:=TComm.Create(nil);
|
|
comm.BaudRate:=9600;
|
|
comm.StopBits:=_1;
|
|
comm.ByteSize:=_8;
|
|
//comm.Parity:=None;
|
|
end;
|
|
|
|
destructor TAlarmLed.Destroy;
|
|
begin
|
|
WorkLog.Debug('销毁报警灯');
|
|
Comm.Free;
|
|
inherited Destroy;
|
|
end;
|
|
|
|
function TAlarmLed.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 TAlarmLed.YellowLed(var sError:string):boolean; //黄灯
|
|
begin
|
|
Result:=IsError(sError);
|
|
WorkLog.Debug('报警灯:黄灯');
|
|
Comm.SendHex('122124');
|
|
end;
|
|
|
|
function TAlarmLed.RedLed(var sError:string):boolean; //红灯
|
|
begin
|
|
Result:=IsError(sError);
|
|
WorkLog.Debug('报警灯:红灯');
|
|
Comm.SendHex('112224');
|
|
end;
|
|
|
|
function TAlarmLed.GreenLed(var sError:string):boolean; //绿灯
|
|
begin
|
|
Result:=IsError(sError);
|
|
WorkLog.Debug('报警灯:绿灯');
|
|
Comm.SendHex('142122');
|
|
end;
|
|
|
|
function TAlarmLed.RedAndBuzzer(var sError:string):boolean; //红灯 蜂鸣器响
|
|
begin
|
|
Result:=IsError(sError);
|
|
WorkLog.Debug('报警灯:红灯 蜂鸣器响');
|
|
Comm.SendHex('22241148');
|
|
end;
|
|
|
|
function TAlarmLed.CloseRedAndBuzzer(var sError:string):boolean; //红灯 蜂鸣器响
|
|
begin
|
|
Result:=IsError(sError);
|
|
WorkLog.Debug('报警灯:关闭红灯和蜂鸣器');
|
|
Comm.SendHex('12212428');
|
|
end;
|
|
|
|
function TAlarmLed.SparkGreen(var sError:string):boolean; //闪绿 蜂鸣器
|
|
begin
|
|
Result:=IsError(sError); //设备没有响一下,亮一下的功能,只能在线程中延时关闭
|
|
WorkLog.Debug('报警灯:闪绿 蜂鸣器');
|
|
Comm.SendHex('4448');
|
|
TThread.CreateAnonymousThread(
|
|
procedure
|
|
begin
|
|
Sleep(1000);
|
|
Comm.SendHex('2428');
|
|
end
|
|
).Start;
|
|
end;
|
|
|
|
function TAlarmLed.CloseAllLed(var sError:string):boolean; //全关
|
|
begin
|
|
Result:=IsError(sError);
|
|
WorkLog.Debug('报警灯:全关');
|
|
Comm.SendHex('21222428');
|
|
end;
|
|
|
|
function TAlarmLed.OpenBuzzer(var sError:string):boolean; //蜂鸣器响
|
|
begin
|
|
Result:=IsError(sError);
|
|
WorkLog.Debug('报警灯:蜂鸣器响');
|
|
Comm.SendHex('18');
|
|
end;
|
|
|
|
function TAlarmLed.CloseBuzzer(var sError:string):boolean; //蜂鸣器关闭
|
|
begin
|
|
Result:=IsError(sError);
|
|
WorkLog.Debug('报警灯:蜂鸣器关闭');
|
|
Comm.SendHex('28');
|
|
end;
|
|
|
|
procedure TAlarmLed.Close();
|
|
begin
|
|
WorkLog.Debug('关闭报警灯');
|
|
comm.StopComm;
|
|
end;
|
|
|
|
function TAlarmLed.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.
|