unit Comm;
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Forms;
type
TCommEvent = procedure(Sender: TObject; Data: Char) of object;
TCommErrEvent = procedure(Sender: TObject; Error: Integer) of object;
TComm = class(TComponent)
private
Wnd: HWND;
DCB: TDCB;
CommID: Integer;
Buf: Array[0..2048] of char;
NumChars: Integer;
FOnCommErr: TCommErrEvent;
FOnCommRecvd: TCommEvent;
procedure CommWndProc(var Message: TMessage);
public
function Send(data: Char): Boolean;
function Connect: Boolean;
constructor Create(AOwner: TComponent); override;
Destructor destroy; override;
published
Property OnCommErr: TCommErrEvent read FOnCommErr write FOnCommErr;
Property OnCommRecvd: TCommEvent read FOnCommRecvd write FOnCommRecvd;
end;
procedure Register;
implementation
constructor TComm.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Wnd := AllocateHwnd(CommWndProc);
end;
procedure TComm.CommWndProc(var Message: TMessage);
var
Error, count: Integer;
Stat: TComStat;
begin
if Message.Msg = WM_COMMNOTIFY then
begin
Message.Result := 0;
GetCommEventMask(CommId, $3fff);
NumChars := ReadComm(CommID, @Buf, 2048);
Error := GetCommError(CommId, Stat);
if Error = 0 then
begin
if Assigned(FOnCommRecvd) then
begin
for count := 0 to NumChars-1 do
FOnCommRecvd(Self, Buf[count]);
end; end else
begin
if Assigned(FOnCommErr) then
begin
FOnCommErr(Self, Error);
end; end; end; end;
function TComm.Send(data: Char): Boolean;
var
Error: Integer;
begin
Error := TransmitCommChar(CommId, data);
if Error < 0 then
Result := False
else
Result := True;
end;
function TComm.Connect: Boolean;
var
Config : array[0..20] of Char;
begin
CommId := OpenComm('COM2', 2048, 2048);
StrCopy(Config, 'com2:96,n,8,1');
BuildCommDCB(Config, DCB);
DCB.ID := CommId;
SetCommState(DCB);
EnableCommNotification(CommID, Wnd, 1, -1);
SetCommEventMask(CommId, ev_RXChar);
Result := True;
end;
DestructorTComm.destroy;
begin
CloseComm(CommID);
DeallocateHwnd(Wnd);
Inherited destroy;
end;
procedureRegister;
begin
RegisterComponents('Samples', [TComm]);
end;
end.
4.3. Техно-FBD ва Техно-IL дастурлаш тиллари. Функционал блоклар тиллари
ТРЕЙС МОУДда ахборотлар оқими каналлар ёрдамида созланади. Каналларнинг тип, ички тип ва бошқа характеристикаларини манбалар ёки берилганларни қабулқилгич белгилаб беради. (контроллерлар, УСО платлар, масофадаги тугунлар, система ўзгарувчилари ва бошқалар).
Каналларда бошланғич ва чиқишда малумотларни қайта ишлаш кўзда тутилган. Қолган барча қайта ишлаш ва бошқариш амаллари алохида дастурлар кўринишида ишлаб чиқилади. Бунинг учун Техно FBD ва Техно IL тилларидан фойдаланилади. Улар МЭК-1131 стандартини жорий қилади ва кўпгина қўшимча функцияларга эга.
Техно FBD тили алгаритмларни функциянал блокли диаграммалар кўринишида ишлаб чиқишга мўлжалланган. Унда дастур тузиш канал процедураларидан келиб чиқади.
Техно IL да дастурлар инструкциялар кетма-кетлиги кўринишида тузилади. Бу тил Техно FBD тилига функционал блокларни дастурлаш ва база канлларни хисобга олган холда паралел ишга тушириладиган метопрограммалар яратиш имконини беради.
ТРЕЙС МОУД да ишлатилган дастурлаш тилларига бағишланган. У икки бўлимга эга.
Функционал блоклар тили
Қўлланма тили
Биринчи бўлимда гап Техно FBD тили хақида боради. Бунда FBD дастурларни яратиш, тахрирлаш ва откладка қилиш масалалари кўриб чиқилади. Шу бўлимни ўзида ҳамма стандарт функциянал блоклар ва улар ишлатадиган алгоритимларнинг берилишилари келтирилади.
Иккинчи бўлим Техно IL тилига бағишланган. Бўлим берилган тилнинг асосий маъносини хамда IL- дастурларни яратиш қурилмалари, тахрирлаш ва откладка қилишларни ўз ичига олаган. Бу ерда IL- дастурларни функционал блоклар ёки метапрограммлар кўринишида тизимга улаш ва ишлаб чиқиш кўриб чиқилади.
Do'stlaringiz bilan baham: |