Read comport
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Read comport
Arkadaşlar merhaba
bir kaç gündür com portdan bilgi alma ile ilgili araştırma yaptım. Ama malesef bu konuyla ilgili örnek kod bulamadım. Amacım gelen bilgiyi memo ya almak.
Elinizde bu konuda örnek olacak bir kod varsa verirseniz çok sevinirim
Teşekkürler
bir kaç gündür com portdan bilgi alma ile ilgili araştırma yaptım. Ama malesef bu konuyla ilgili örnek kod bulamadım. Amacım gelen bilgiyi memo ya almak.
Elinizde bu konuda örnek olacak bir kod varsa verirseniz çok sevinirim
Teşekkürler
Re: Read comport
Armani yazdı:Arkadaşlar merhaba
bir kaç gündür com portdan bilgi alma ile ilgili araştırma yaptım. Ama malesef bu konuyla ilgili örnek kod bulamadım. Amacım gelen bilgiyi memo ya almak.
Elinizde bu konuda örnek olacak bir kod varsa verirseniz çok sevinirim
Teşekkürler



+ CPort Comport Library http://sourceforge.net/projects/comport/
http://www.wimb.net/index.php?s=delphi&page=11 bu adreste güzel bir terminal programı örneği var. onu indirip port okuma kısmını inceleyebilirsin.
bu arkadaş bence kötü bi recieve uygulama yapmış ama neyse, başlangıç için iyi. forumuna bi comport bileşeni koy. çift tıklayıp gerekli baudrate, parity stop biti ayarlarını falan ayp. formuna 100-200 ms interval ile bir timer koy. timer kesmesinde aşağıdaki bold satırlardaki işlemi yaptır. (manası eğer porttan karakter geldi ise bunu yazdır. gelmedi ise eyvallah bekle)
bu kısma kadar gelirsen problem yok demektir.
iyi çalışamlar
(bu ay içinde bi dersten omron PLC ile haberleşmeli bi program yazıcam. bitirince koduyla beraber herşeyi makaleler kısmına göndericem. ama bitmedi işte

Kod: Tümünü seç
Procedure TForm1.TermReceive;
var Str : string;
I : Integer;
Ch : char;
Begin
Doorgaan := True;
ContrOld := ContrType;
While (Doorgaan = True) AND (ContrType = ContrOld) do begin
1-> [b]NumberOfBytes := Comport1.InputCount;
2-> ComPort1.ReadStr(Str, NumberOfBytes);
3-> IF NumberOfBytes > 0 then Begin[/b]
IF HexMode = True Then begin
For I := 1 to length(Str) do begin
Ch := Str[I];
If CH < #31 then begin // smaller then space
WriteScreen(' <'+ByteHex(Ord(Ch))+'>');
if Ch = #$0A then WriteScreen(#$0A+#$0D);
end else WriteScreen(Ch);
end
end else
If ComTerminal1.Visible = True then WriteScreen(Str);
End;
sleep(100);
Application.ProcessMessages;
end; {while}
end; { terminal EPI / SS2000I }
alın buyrun denenmiş bi örnek. şimdi canım sıkıldı bari ödevi yapmaya başlayayım dedim.
iletişim com1 üzerinden omron cqm1h plc ile 9600,7,2,even
formda bir adet comport bileşeni , bir timer, birde buton var.
valla tüm pas dosyasını copy paste yapıyorum. buradan anlayabilirsin.
mantık çok kolay. writestr ile porta verini yazıyorsun.
sonra timer ile sürekli olarak portu kontrol ediyorsun. eğer almak istediğin paket boyutu CharCntReceived tamam ise aldığın cRcvBuffer daki bilgiyi string olarak memoya ekliyorsun.
iyi çalışamlar
iletişim com1 üzerinden omron cqm1h plc ile 9600,7,2,even
formda bir adet comport bileşeni , bir timer, birde buton var.
valla tüm pas dosyasını copy paste yapıyorum. buradan anlayabilirsin.
mantık çok kolay. writestr ile porta verini yazıyorsun.
sonra timer ile sürekli olarak portu kontrol ediyorsun. eğer almak istediğin paket boyutu CharCntReceived tamam ise aldığın cRcvBuffer daki bilgiyi string olarak memoya ekliyorsun.
iyi çalışamlar
Kod: Tümünü seç
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, CPort, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
ComPort1: TComPort;
BtnGonder: TButton;
Timer1: TTimer;
Memo1: TMemo;
procedure BtnGonderClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
cRcvBuffer : PChar;
CharCntReceived : Integer;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
cRcvBuffer := StrAlloc(512);
CharCntReceived := 0;
end;
procedure TForm1.BtnGonderClick(Sender: TObject);
begin
CharCntReceived := 0;
comport1.WriteStr('@00RD0000001552*'+#13+#0);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var x,y:integer;
a:string;
begin
x:=comport1.read(cRcvBuffer[CharCntReceived],512);
if x>0 then begin
a:='';
for y:=CharCntReceived to CharCntReceived+x-1 do a:=a+crcvbuffer[y];
Memo1.Lines.Add ('Alınan : '+ a); //Denemek iiçin ana ekrana memo ekle
end;
CharCntReceived := CharCntReceived +x;
end;
end.
comport1 in ayarları.
Kod: Tümünü seç
object ComPort1: TComPort
Connected = True
BaudRate = br9600
Port = 'COM1'
Parity.Bits = prEven
StopBits = sbTwoStopBits
DataBits = dbSeven
Events = [evRxChar, evTxEmpty, evRxFlag, evRing, evBreak, evCTS, evDSR, evError, evRLSD, evRx80Full]
FlowControl.OutCTSFlow = False
FlowControl.OutDSRFlow = False
FlowControl.ControlDTR = dtrDisable
FlowControl.ControlRTS = rtsDisable
FlowControl.XonXoffOut = False
FlowControl.XonXoffIn = False
Left = 48
Top = 32
end
mege selamlar
Birde kodu çalıştırınca
hatasını alıyorum. (Form Create kısmında)
Burda diger bir sorum ise (Sanki bu problemleri hallettimde
) memoya gelen datalarda mesela tarih kısmını almama gibi bir şansım varmı.[/quote]
bunu anlayamadım. Benim amacım şu an kullandıgım santralden com1 ile bilgi almak. Santralden com1 e data geliyor.writestr ile porta verini yazıyorsun.
Birde kodu çalıştırınca
Kod: Tümünü seç
[Error] Unit1.pas(33): Undeclared identifier: 'cRcvBuffer'
[Error] Unit1.pas(34): Undeclared identifier: 'CharCntReceived'
[Error] Unit1.pas(39): Undeclared identifier: 'CharCntReceived'
[Error] Unit1.pas(49): Undeclared identifier: 'cRcvBuffer'
[Error] Unit1.pas(49): Undeclared identifier: 'CharCntReceived'
[Warning] Unit1.pas(60): Text after final 'END.' - ignored by compiler
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
Burda diger bir sorum ise (Sanki bu problemleri hallettimde

değişkenler tanımlı değğil diyor. bi kontrol et. klasik cevaptır ama bende çalışıyorArmani yazdı:Birde kodu çalıştırıncahatasını alıyorum. (Form Create kısmında)Kod: Tümünü seç
[Error] Unit1.pas(33): Undeclared identifier: 'cRcvBuffer' [Error] Unit1.pas(34): Undeclared identifier: 'CharCntReceived' [Error] Unit1.pas(39): Undeclared identifier: 'CharCntReceived' [Error] Unit1.pas(49): Undeclared identifier: 'cRcvBuffer' [Error] Unit1.pas(49): Undeclared identifier: 'CharCntReceived' [Warning] Unit1.pas(60): Text after final 'END.' - ignored by compiler [Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
Burda diger bir sorum ise (Sanki bu problemleri hallettimde) memoya gelen datalarda mesela tarih kısmını almama gibi bir şansım varmı.

eğer porta bişey yazmıcaksan o butonu kaldır

memoya geldikten sonra istediğin gibi parse edersin. bence ilk önce programını çalıştır.
TComPort nesnesi
merhabalar
yazılı kodda
ComPort1: TComPort;
nesnesi kullanılmıs nereden ekleyebiliriz acaba?
yazılı kodda
ComPort1: TComPort;
nesnesi kullanılmıs nereden ekleyebiliriz acaba?
Re: Read comport
mage arkadasım saol cok guzel yardım cı olmussun benımde boyle bır sıkıntım vardı hemen deneyecem tekrar saol