TpApro ApdComPort Terazi Okuma
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
TpApro ApdComPort Terazi Okuma
Merhaba Arkadaşla,
Hazırladığım projede TEM Marka bir teraziden gelen veriyi okumam gerekiyor. Aşağıda kullandığım kod mevcut. Terazinin gönderdiği veri şu şekilde:
+ 0.122kg
t 0.000kg
+ 0.122kg
t 0.000kg
+ 0.122kg
t 0.000kg
+ 0.122kg
t 0.000kg
Sürekli gönderim yapan bir terazi. Benim + ile gelen değerden 0.122 olan kısmı ayırmam gerekiyor ve bunu ekrana yazmam gerekiyor. Fakat bir türlü başaramadım. Sadece yukarıdaki şekilde alabiliyorum. Desteğinize ihtiyacım var acilen. Teşekkürler.
procedure TTartiEkran.ApdComPort1TriggerAvail(CP: TObject; Count: Word);
var
I, j: Word;
gelenkarakter: AnsiChar;
sonuc: string;
Derece: Double;
begin // butonlara basıldığında yapılması gereken iş burada derlenecek
try
sonuc := '';
for I := 1 to Count do
begin
gelenkarakter := ApdComPort1.GetChar;
case gelenkarakter of
#0 .. #1: { Don't display }
;
else
sonuc := sonuc + gelenkarakter;
end;
end;
lbGramaj.Caption:=Sonuc;
except
end;
end;
Hazırladığım projede TEM Marka bir teraziden gelen veriyi okumam gerekiyor. Aşağıda kullandığım kod mevcut. Terazinin gönderdiği veri şu şekilde:
+ 0.122kg
t 0.000kg
+ 0.122kg
t 0.000kg
+ 0.122kg
t 0.000kg
+ 0.122kg
t 0.000kg
Sürekli gönderim yapan bir terazi. Benim + ile gelen değerden 0.122 olan kısmı ayırmam gerekiyor ve bunu ekrana yazmam gerekiyor. Fakat bir türlü başaramadım. Sadece yukarıdaki şekilde alabiliyorum. Desteğinize ihtiyacım var acilen. Teşekkürler.
procedure TTartiEkran.ApdComPort1TriggerAvail(CP: TObject; Count: Word);
var
I, j: Word;
gelenkarakter: AnsiChar;
sonuc: string;
Derece: Double;
begin // butonlara basıldığında yapılması gereken iş burada derlenecek
try
sonuc := '';
for I := 1 to Count do
begin
gelenkarakter := ApdComPort1.GetChar;
case gelenkarakter of
#0 .. #1: { Don't display }
;
else
sonuc := sonuc + gelenkarakter;
end;
end;
lbGramaj.Caption:=Sonuc;
except
end;
end;
Re: TpApro ApdComPort Terazi Okuma
Tekrar deneyin bakalım (Altta Copy ile başlayan string parse işlemi ile bir deneyin)
Kod: Tümünü seç
procedure TTartiEkran.ApdComPort1TriggerAvail(CP: TObject; Count: Word);
var
I, j: Word;
gelenkarakter: AnsiChar;
sonuc: string;
Derece: Double;
begin // butonlara basıldığında yapılması gereken iş burada derlenecek
try
sonuc := '';
for I := 1 to Count do
begin
gelenkarakter := ApdComPort1.GetChar;
case gelenkarakter of
#0 .. #1: { Don't display }
;
else
sonuc := COPY((sonuc + gelenkarakter),2,7) ; // burası
end;
end;
lbGramaj.Caption:=Sonuc;
except
end;
end;
http://www.delphibasics.co.uk/RTL.asp?Name=DaysBetween
http://www.neonhaber.com/Static/mega-co ... index.html
www.delphican.con
Function PARSE( text, ilk, son:String ): String; //
begin
Delete(Text, 1, pos(ilk, Text) + Length(ilk)-1);
Result := Copy(Text, 1, Pos(Son, Text)-1);
end;
http://www.neonhaber.com/Static/mega-co ... index.html
www.delphican.con
Function PARSE( text, ilk, son:String ): String; //
begin
Delete(Text, 1, pos(ilk, Text) + Length(ilk)-1);
Result := Copy(Text, 1, Pos(Son, Text)-1);
end;
Re: TpApro ApdComPort Terazi Okuma
Merhaba,
Teşekkürler fakat olmadı
Teşekkürler fakat olmadı

Commandx yazdı: 06 May 2019 03:32 Tekrar deneyin bakalım (Altta Copy ile başlayan string parse işlemi ile bir deneyin)
Kod: Tümünü seç
procedure TTartiEkran.ApdComPort1TriggerAvail(CP: TObject; Count: Word); var I, j: Word; gelenkarakter: AnsiChar; sonuc: string; Derece: Double; begin // butonlara basıldığında yapılması gereken iş burada derlenecek try sonuc := ''; for I := 1 to Count do begin gelenkarakter := ApdComPort1.GetChar; case gelenkarakter of #0 .. #1: { Don't display } ; else sonuc := COPY((sonuc + gelenkarakter),2,7) ; // burası end; end; lbGramaj.Caption:=Sonuc; except end; end;
Re: TpApro ApdComPort Terazi Okuma
if Pos(gelenkarakter,'.0123456789')>0 then sonuc:= sonuc +gelenkarakter;
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Re: TpApro ApdComPort Terazi Okuma
Merhabalar sorunumu çözdüm fakat yazma zamanım olmadı. Gün içerisinde çözüm kodlarını yayınlayacağım.
Re: TpApro ApdComPort Terazi Okuma
Hepinize teşekkürler. Örneklerinizin faydası oldu.
Programın show olayında ApdComPort1.open:=true; yapıyorum. Sonrası da aşağıda.
Programın show olayında ApdComPort1.open:=true; yapıyorum. Sonrası da aşağıda.
Kod: Tümünü seç
procedure TTartiEkran.ApdComPort1TriggerAvail(CP: TObject; Count: Word);
var
I: Word;
gelenkarakter: AnsiChar;
sonuc: string;
artivar: integer;
begin
try
sonuc := '';
for I := 1 to Count do
begin
gelenkarakter := ApdComPort1.GetChar;
case gelenkarakter of
#0 .. #31: { Don't display }
;
else
if (gelenkarakter <> ' ') and (gelenkarakter <> 'k') and
(gelenkarakter <> 'g') then
begin
sonuc := sonuc + gelenkarakter;
if (length(sonuc) = 6) then
begin
artivar := ansipos('+', sonuc);
if artivar <> 0 then
begin
delete(sonuc, 1, 1);
if sonuc <> sonuc1 then
begin
sonuc1 := sonuc;
sonuc := '';
end
else
begin
sonuc1 := stringreplace(sonuc1, '.', ',',
[rfReplaceAll, rfIgnoreCase]);
lbTutar.Caption := floattostr(strtofloat(lbBirimfiyat.Caption) *
(strtofloat(sonuc1)));
lbGramaj.Caption := floattostr(strtofloat(sonuc1) * 1000);
end;
end;
end;
end;
end;
end;
except
showmessage('hata var');
end;
end;
-
- Üye
- Mesajlar: 10
- Kayıt: 19 Nis 2016 11:00
- Konum: izmir
- İletişim:
Re: TpApro ApdComPort Terazi Okuma
kolay gelsin ben terazi işi yapıyorum proje ne üzerine açaba ögrenebilirmiyim ilginiz için şimdiden teşekkür ederim
Re: TpApro ApdComPort Terazi Okuma
Merhaba,enesharun yazdı: 06 May 2019 10:29 Merhaba Arkadaşla,
Hazırladığım projede TEM Marka bir teraziden gelen veriyi okumam gerekiyor. Aşağıda kullandığım kod mevcut. Terazinin gönderdiği veri şu şekilde:
+ 0.122kg
t 0.000kg
+ 0.122kg
t 0.000kg
+ 0.122kg
t 0.000kg
+ 0.122kg
t 0.000kg
Sürekli gönderim yapan bir terazi. Benim + ile gelen değerden 0.122 olan kısmı ayırmam gerekiyor ve bunu ekrana yazmam gerekiyor. Fakat bir türlü başaramadım. Sadece yukarıdaki şekilde alabiliyorum. Desteğinize ihtiyacım var acilen. Teşekkürler.
procedure TTartiEkran.ApdComPort1TriggerAvail(CP: TObject; Count: Word);
var
I, j: Word;
gelenkarakter: AnsiChar;
sonuc: string;
Derece: Double;
begin // butonlara basıldığında yapılması gereken iş burada derlenecek
try
sonuc := '';
for I := 1 to Count do
begin
gelenkarakter := ApdComPort1.GetChar;
case gelenkarakter of
#0 .. #1: { Don't display }
;
else
sonuc := sonuc + gelenkarakter;
end;
end;
lbGramaj.Caption:=Sonuc;
except
end;
end;
Farklı bir yöntem olarak TApdDataPacket bileşenini kullanmanızı tavsiye edeceğim. Bu bileşen sizin yapmak istediğiniz işi ve fazlasını yapmak için tasarlanmıştır.
Özetle yapmanız gereken:
- Form üzerine ApdDataPacket bileşenini ekleyin.
- Object Inspector içinde "ApdDataPacket1.ComPort = ApdComPort1" şeklinde ayarlayın (otomatik olarak bu şekilde ayarlanmış olabilir)
- Form üzerindeki ApdDataPacket1 bileşeni üzerinde sağ tuş ile tıklayıp "Edit Properties" seçeneğini seçin
- Packet start condition için "When this string is received" seçeneğini seçip sağ tarafındaki Edit alanı içine "+ " (artı ve boşluk) karakterlerini yazın
- Packet end condition için "When this string is received" seçeneğini seçip sağ tarafındaki Edit alanı içine "kg" karakterlerini yazın
- Include start/end string(s) in packet seçeneğinin işaretini kaldırın.
- Diğer tüm seçenekleri olduğu gibi bırakıp OK butonunu tıklayın.
- Form üzerinde ApdDataPacket1 bileşenini seçin (sol tuşla bir defa tıklayın)
- Object Inspector içinde Events tab ını açın. OnPacket() olayını çift tıklayıp açın.
- Editöre aşağıdaki kodları yazın.
Kod: Tümünü seç
procedure TForm2.ApdDataPacket1Packet(Sender: TObject; Data: Pointer;
Size: Integer);
var
Bytes: TBytes;
I: Integer;
TempString: string;
Agirlik: Double;
begin
SetLength(Bytes, Size);
Move(Data^, Pointer(Bytes)^, Size);
TempString := EmptyStr;
for I := Low(Bytes) to High(Bytes) do
begin
TempString := TempString + Chr(Bytes[I]);
end;
Agirlik := StrToFloat(TempString);
end;
NOT: Eğer kullandığınız Delphi sürümünde "TBytes" desteği yok ise bunun yerine aşağıdaki şekilde kullanmanız mümkün
Kod: Tümünü seç
var
Bytes: Array of Byte;
Delphi 7 için:
Kod: Tümünü seç
StringReplace(TempString, '.', DecimalSeparator, []);
Agirlik := StrToFloat(TempString);
Kod: Tümünü seç
StringReplace(TempString, '.', FormatSettings.DecimalSeparator, []);
Agirlik := StrToFloat(TempString, AFormatSettings);