unit SP4TEu;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs,EPICSTypes, Vcl.StdCtrls, Vcl.ExtCtrls,
System.ImageList, Vcl.ImgList;
type
TFSP4TE = class(TForm)
LabModel: TLabel;
Timer1: TTimer;
LabSN: TLabel;
LabFarm: TLabel;
BtnOFF: TButton;
ImageList1: TImageList;
BtnDR1: TButton;
BtnDR2: TButton;
BtnDR3: TButton;
BtnDR4: TButton;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure BtnOFFClick(Sender: TObject);
procedure BtnDR1Click(Sender: TObject);
procedure BtnDR2Click(Sender: TObject);
procedure BtnDR3Click(Sender: TObject);
procedure BtnDR4Click(Sender: TObject);
private
{ Private 錾 }
public
{ Public 錾 }
end;
var
FSP4TE: TFSP4TE;
implementation
uses CA_iN;
{$R *.dfm}
var
fbd_rsa_sw_set_ptr, fbd_rsa_sw_get_ptr : integer;
fbd_rsa_sn_get_ptr, fbd_rsa_model_get_ptr, fbd_rsa_firmware_get_ptr : integer;
pvs : pv;
eventMask: longint;
monitor_flag : boolean;
pCaCh : Pointer;
pPvs : Pointer;
iPriority : integer;
dCaTimeout : double;
callselect : ca_preemptive_callback_select;
ch_event : integer;
procedure event_handler(args : event_handler_args) cdecl;
begin
ch_event := integer(args.dbr^);
monitor_flag := true;
end;
procedure connection_handler(args : connection_handler_args) cdecl;
var
rtn : integer;
begin
rtn := 0;
if args.op = CA_OP_CONN_UP then
begin
pvs.chid.chid := args.chid.chid;
pvs.onceConnected := AnsiChar(1);
pvs.dbfType := ca_field_type(pvs.chid.chid);
pvs.dbrType := ca_field_type(pvs.chid.chid);
pvs.nElems := ca_element_count(pvs.chid.chid);
eventMask := DBE_VALUE;
rtn := ca_create_subscription(pvs.dbrType, pvs.nElems,pvs.chid.chid, eventMask, @event_handler, @pvs, nil);
end;
end;
procedure TFSP4TE.BtnDR1Click(Sender: TObject);
var i : integer;
begin
i := 1;
ca_put_lo(fbd_rsa_sw_set_ptr,i);
end;
procedure TFSP4TE.BtnDR2Click(Sender: TObject);
var i : integer;
begin
i := 2;
ca_put_lo(fbd_rsa_sw_set_ptr,i);
end;
procedure TFSP4TE.BtnDR3Click(Sender: TObject);
var i : integer;
begin
i := 3;
ca_put_lo(fbd_rsa_sw_set_ptr,i);
end;
procedure TFSP4TE.BtnDR4Click(Sender: TObject);
var i : integer;
begin
i := 4;
ca_put_lo(fbd_rsa_sw_set_ptr,i);
end;
procedure TFSP4TE.BtnOFFClick(Sender: TObject);
var i : integer;
begin
i := 0;
ca_put_lo(fbd_rsa_sw_set_ptr,i);
end;
procedure TFSP4TE.FormCreate(Sender: TObject);
var i ,itrc : integer;
rtn : integer;
s : PAnsiChar;
s2 : AnsiString;
select : integer;
begin
i := 1;
rtn := ca_context_create(i);
s := 'FBD:RSA:SW:SET';
fbd_rsa_sw_set_ptr := ca_connect(s);
{s := 'FBD:RSA:SW:GET';
fbd_rsa_sw_get_ptr := ca_connect(s); }
s := 'FBD:RSA:SN:GET';
fbd_rsa_sn_get_ptr := ca_connect(s);
s := 'FBD:RSA:MODEL:GET';
fbd_rsa_model_get_ptr := ca_connect(s);
s := 'FBD:RSA:FIRMWARE:GET';
fbd_rsa_firmware_get_ptr := ca_connect(s);
s2 := get_string(fbd_rsa_model_get_ptr);
LabModel.Caption := s2;
s2 := get_string(fbd_rsa_sn_get_ptr);
LabSN.Caption := 'SN'+s2;
s2 := get_string(fbd_rsa_firmware_get_ptr);
LabFarm.Caption := 'FW '+s2;
rtn := ca_context_create(i);
s := 'FBD:RSA:SW:GET';
callselect := ca_preemptive_callback_select.ca_enable_preemptive_callback;
select := integer(callselect);
rtn := contextcreate(select);
pvs.name := Pansichar(s);
pCaCh := @connection_handler;
pPvs := @pvs;
iPriority := CA_PRIORITY_DEFAULT;
fbd_rsa_sw_get_ptr := connect(pvs,pCaCh, pPvs, iPriority);
rtn := ca_pend_event(1.0);
end;
procedure TFSP4TE.Timer1Timer(Sender: TObject);
var rtn : integer;
i : integer;
begin
if monitor_flag then
begin
timer1.Enabled := false;
{i := ca_get_li(fbd_rsa_sw_get_ptr); }
i:= ch_event;
case i of
0 : begin
btndr1.ImageIndex := 1;
btndr2.ImageIndex := 1;
btndr3.ImageIndex := 1;
btndr4.ImageIndex := 1;
end;
1 : begin
btndr1.ImageIndex := 0;
btndr2.ImageIndex := 1;
btndr3.ImageIndex := 1;
btndr4.ImageIndex := 1;
end;
2 : begin
btndr1.ImageIndex := 1;
btndr2.ImageIndex := 0;
btndr3.ImageIndex := 1;
btndr4.ImageIndex := 1;
end;
3 : begin
btndr1.ImageIndex := 1;
btndr2.ImageIndex := 1;
btndr3.ImageIndex := 0;
btndr4.ImageIndex := 1;
end;
4 : begin
btndr1.ImageIndex := 1;
btndr2.ImageIndex := 1;
btndr3.ImageIndex := 1;
btndr4.ImageIndex := 0;
end;
end;
timer1.Enabled := true;
monitor_flag := false;
end;
end;
end.