• 0
hassson

استلام بيانات من المنفذ Com1

سؤال

السلام عليكم

لدي البرنامج التالي وهو عباره عن واجهة لنظام تصويت مكون من اربع اجهزة تستخدم للتصويت

هذه الاجهزة الاربعة متصلة الى الحاسب عن طريق بورت

COM1

يقوم الكائن TCAN_Bridge بمراقبة المنفذ التسلسلي بشكل دائم وهو عبارة عن خيط تنفيذ مستقل يعمل

بشكل منفصل عن البرنامج وعند وصول رسالة على الشكل

(N:xx,rr)

حيث xx هو رقم العقده او جهاز التصويت و rr هو النتيجة يقوم باستدعاء الاجراء ADD Result مع البارمترات

rr,xx

والذي يقوم باضافة النتيجة الى متحولات النتائج الموجودة في البرنامج الرئيسي ويظهر النتائج الجديدة على الشاشة

مطلوب مساعده في كتابة هذا الكائن الخاص بمراقبة البورت

COM1

GroupBox1:TGroupBox;
GroupBox2:TGroupBox;
BitBtn1:TBitBtn;
BitBtn2:TBitBtn;
BitBtn3:TBitBtn;
Label1:TLabel;
edTime:TEdit;
UpDown:TUpDown;
Label2:TLabel;
Label3:TLabel;
edNum:TEdit;
UpDown2:TUpDown;
prgD:TProgressBar;
prgC:TProgressBar;
prgB:TProgressBar;
prgA:TProgressBar;
Label4:TLabel;
Label5:TLabel;
Label6:TLabel;
Label7:TLabel;
edA_Rate:TEdit;
edD_Rate:TEdit;
edC_Rate:TEdit;
edB_Rate:TEdit;
Bevel1:TBevel;
Label9:TLabel;
edNonVoteNr:TEdit;
Label10:TLabel;
edVoteRate:TEdit;
Timer1:TEdit;
lbTime:TLabel;
procedure BitBtn3Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure edTimeChange(Sender: TObject);
procedure edNumChange(Sender: TObject);
private
{ Private declarations }
m_TimeOut : integer;

m_A_Num, m_B_Num, m_C_Num, m_D_Num : integer;
m_A_Rate, m_B_Rate, m_C_Rate, m_D_Rate : Real;

m_VoteNum, m_Non_Vote_Num : integer;
m_Vote_Rate : Real;

m_Node_Num : integer;

public

{ Public declarations }
procedure ClrResult;
procedure ShowResult;
procedure AddResult(N,R:Integer);
end;

var
Form1:TForm1;

implementation
uses Bridge;

{R *.dfm$}

var m_Bridge : TCAN_Bridge;

procedure TForm1.ClrResult;
Begin
m_A_Num := 0
m_B_Num := 0
m_C_Num := 0
m_D_Num := 0

m_VoteNum := 0
m_Non_Vote_Num := m_Node_num;

ShowResult;

edTime.Enabled := True;
edNum.Enabled := True;

end;

procedure TForm1.AddResult(N,R:Integer);
Begin
inc (m_VoteNum);

m_Non_Vote_Num := m_Node_Num - m_VoteNum;

case R of
inc (m_A_Num :0);
inc (m_B_Num :1);
inc (m_C_Num :2);
inc (m_D_Num :3);

end;

ShowResult;
end;

procedure TForm1.ShowResult;
Begin

if m_A_Num = 0 Then m_A_Rate := 0
else m_A_Rate := m_A_Num * 100 / m_VoteNum;

if m_B_Num = 0 Then m_B_Rate := 0
else m_B_Rate := m_B_Num * 100 / m_VoteNum;

if m_C_Num = 0 Then m_C_Rate := 0
else m_C_Rate := m_C_Num * 100 / m_VoteNum;

if m_D_Num = 0 Then m_D_Rate := 0
else m_D_Rate := m_D_Num * 100 / m_VoteNum;

if m_VoteNum = 0 Then m_vote_Rate := 0
else m_Vote_Rate := m_VoteNum * 100 /
StrToInt(edNum.Text);


prgA.Position := Round(m_A_Rate);
prgB.Position := Round(m_B_Rate);
prgC.Position := Round(m_C_Rate);
prgD.Position := Round(m_D_Rate);

edA_Rate.Text := FloatToStr(m_A_Rate);
edB_Rate.Text := FloatToStr(m_B_Rate);
edC_Rate.Text := FloatToStr(m_C_Rate);
edD_Rate.Text := FloatToStr(m_D_Rate);

edVoteNr.Text := IntToStr(m_VoteNum);
edNonVoteNr.Text := IntToStr(m_Non_Vote_Num);
edVoteRate.Text := FloatToStr(m_Vote_Rate);

end;

procedure TForm1.BitBtn3Click(Sender: TObject);
begin
Clear REsult//
ClrResult;

Timer1.Enabled := True;
Send Start Message //
m_Bridge.SendMessage('S');

edTime.Enabled := False;
edNum.Enabled :=False;

lbTime.Visible := true
lbTime.Caption := edTime.Text+'HassaN';
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin

Dec(m_timeOut);

lbTime.Caption := Format('HassaN',[m_TimeOut]);

if m_TimeOut = 0 then Begin
//
Timer1.Enabled := False;
m_Bridge.SendMessage('R');

ShowResult;

end;
procedure TForm1.BitBtn2Click(Sender: TObjet);
begin
Timer1.Enabled := false;
lbTime.Visible := False;

ClrResult;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
m_Bridge.SendMessage('R');
Close;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
m_Bridge := TCAN_Bridge.Creat(true,'COM1');

m_Node_Num := 4;
m_TimeOut := 60;

ClrResult;
end;

procedure TForm1.edTimeChange(Sender: TObject);
begin
m_TimeOut := StrToInt(edTime.Text);
end;

procedure TForm1.edNumChange(Sender: TObject);
begin
m_Node_Num := StrToInt(edNum.Text);
end

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

2 إجابة على هذا السؤال .

  • 0

ما هي المشكلة

و ما هي نوعية الجهاز الذي تستخدمه

أنا أقوم بتطوير برنامج شبيه لما تتكلم عنه

أعمل على جهاز اسمه Promag من gegatek

هل يمكنك توضيح المشكلة؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مطلوب مساعده في كتابة هذا الكائن الخاص بمراقبة البورت

COM1

يقوم الكائن TCAN_Bridge بمراقبة المنفذ التسلسلي بشكل دائم وهو عبارة عن خيط تنفيذ مستقل يعمل

بشكل منفصل عن البرنامج وعند وصول رسالة على الشكل

(N:xx,rr)

حيث xx هو رقم العقده او جهاز التصويت و rr هو النتيجة يقوم باستدعاء الاجراء ADD Result مع البارمترات

rr,xx

والذي يقوم باضافة النتيجة الى متحولات النتائج الموجودة في البرنامج الرئيسي ويظهر النتائج الجديدة على الشاشة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .