Comport Tarama ve Otomatik Bağlanma [Çözüldü]

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
bnyamin
Üye
Mesajlar: 44
Kayıt: 01 Mar 2019 12:55

Comport Tarama ve Otomatik Bağlanma [Çözüldü]

Mesaj gönderen bnyamin »

1.jpg
1.jpg (1.21 KiB) 2082 kere görüntülendi
Arkadaşlar herkese iyi günler elimde bir indikatör cihazı var rs232 ile bilgisayara bağlı ve comporttan bilgi gönderiyor. Sizlere sorum şudur yukarıdaki fotoğrafı aynı mantıkla çalışan başka bir programdan aldım o programın özelliği şöyle program çalıştırıldığında hemen otomatik pc deki tüm portlar taranıyor ve bilgi gönderen indikatör cihazı hangi portta bağlıysa o portu bulup gerekli koşullar sağlandığında otomatik bağlantıyı sağlıyor ve veri akışı başlıyor. bahsetmiş olduğum program pyton ile yazılmış ancak kaynak kodları yok ben bunu delphide yapabilir miyim? yardımlarınızı bekliyorum şimdiden teşekkür ederim.

Kullanmış olduğum delphi sürümü:10.3 rio ve delphi 7 de mevcut.
tcomport bileşeni mevcut
bağlantı bilgileri şöyle: baud rade:9600,databits:8,stopbits:1,party:none.
En son bnyamin tarafından 10 Oca 2021 10:16 tarihinde düzenlendi, toplamda 5 kere düzenlendi.
mkysoft
Kıdemli Üye
Mesajlar: 3103
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Comport Tarama ve Otomatik Bağlanma

Mesaj gönderen mkysoft »

resim cok kucuk, gorunmuyor. evet yapabilirsiniz. bagli cihazlari veren windows api'leri olmasi lazim. Hic olmadi registry'den arayabilirsiniz comportlari. ancak hangisinde cihaz oldugunu anlamak icin baglanmayi denemeniz gerekecek. bilgisayarda farkli cihazlar varsa bu baglanti denemeleriniz onlari kararsiz hale getirebilir.
bnyamin
Üye
Mesajlar: 44
Kayıt: 01 Mar 2019 12:55

Re: Comport Tarama ve Otomatik Bağlanma

Mesaj gönderen bnyamin »

Sayın mkysoft hocam öncelikle cavabınız için teşekkür ediyorum.Bilgisayarda birçok com girişi mevcut ama indikatör cihazı yalnız birinde bağlı diğer portlar boş duruyor. aceba bu bağlantı denemelerini nasıl yapabilirim.

Resmi en büyük haliyle bile kaydettim ama burada küçük görünüyor jpg olduğundan mıdır bilemedim?
1.png
1.png (1.09 KiB) 2077 kere görüntülendi
ertank
Kıdemli Üye
Mesajlar: 1651
Kayıt: 12 Eyl 2015 12:45

Re: Comport Tarama ve Otomatik Bağlanma

Mesaj gönderen ertank »

Merhaba,

Şahsen TComport değil eskiden ücretli satılıp firma kapandığında kodlarını açık kaynak kod haline çeviren TApdComPort bileşenini kullanmanızı tavsiye ederim.
Döküman ve bilgi: http://tpapro.sourceforge.net/ApdComPort.html
Kaynak kodlar: https://github.com/TurboPack/AsyncPro

Bu bileşen seti içinde "AdSelCom" ünitesinde sizin işinizi kolaylaştırıcı (sistemdeki kullanılabilir portları tespit eden) fonksiyon bulunmakta.

Kod: Tümünü seç

uses
  AdSelCom;

procedure TfrmMain.Button1Click(Sender: TObject);
var
  I: Integer;
begin
  Screen.Cursor := crHourGlass;
  try
    ListBox1.Clear();
    for I := 1 to 64 do
    begin
      if AdSelCom.IsPortAvailable(I) then // <-- Yukarıda bahsi geçen fonksiyon budur
        ListBox1.Items.Add('COM' + I.ToString());
    end;
  finally
    Screen.Cursor := crDefault;
  end;
end;
Yukarıdaki örnek kod sistemde kullanılabilir portları bir ListBox içine kaydeder.

Kullanılabilir portlardan hangisinin gerçekten sizin kullanmanız gereken cihaz olduğunu anlamanın tek yolu sistemdeki her bir porta bağlantı sağlayıp veri göndermek ve/veya veri okumak ile mümkündür.

İlgili bileşenler arasında, gelen veriyi ayıklamayı kolaylaştıran ApdDataPacket bileşeni mevcuttur. Bu bileşen bir ApdComPort ile bağlı çalışır. Gelen veriler içinde sizin ilgilendiğiniz verileri filtrelemeye yardımcı olur. Üzerinde sağ tuş ile tıklayıp "Edit properties..." seçeneğini tıkladığınızda veri başlangıç ve veri bitiş kurallarını görsel olarak rahatlıkla tanımlayabilirsiniz.

Otomatik algılamayı gerçekleştirebilmek için özetle;
- Öncelikle sistemdeki tüm portların listesini çıkarıp,
- bu portlara tek tek bağlantı sağlamalı,
1- eğer cihaz adı/seri numarası okuma için yönteminiz var ise bunu yapmalı
2a- eğer ağırlık okumak için tetikleyici bir veri göndermeniz gerekli ise bu veriyi göndermeli,
2b- ağırlık sonucunu okumalısınız.

Yukarıdaki adımlardan "-" ile başlayanları mutlaka yapmalısınız. Rakam olanlardan istediğiniz rakam grubunu seçebilirsiniz.

Ancak en son noktaya kadar ulaşıp veri (sistem adı, seri no, ağırlık, vb) okuduğunuzda istediğiniz cihaz olduğuna emin olup test ettiğiniz port numarasını otomatik kullanabilirsiniz.

Bu varsayım birden fazla indikatörün aynı bilgisayara bağlı olması durumunda işe yaramayacaktır. Böyle bir bilgisayarda küçük port numarasına sahip indikatör otomatik seçilir. Bu gibi bir ihtimal var ise birden fazla cihaz tespit etmeniz durumunda kullanıcıya hangisini kullanmak istediğini sormalısınız.

Yol gösterme ve ilgili bileşenlerin kullanımını gösterme amaçlı ekteki örnek projeyi inceleyebilirsiniz.

Proje Delphi 10.3.3 ile sorunsuz derlenmektedir. Cihaz algılama kısmı test edilmemiştir. Direk çalışmayıp hata verebilir.
Dosya ekleri
com port listele.rar
(57.37 KiB) 137 kere indirildi
bnyamin
Üye
Mesajlar: 44
Kayıt: 01 Mar 2019 12:55

Re: Comport Tarama ve Otomatik Bağlanma

Mesaj gönderen bnyamin »

Sayın Ertank hocam öncelikle cevabınız için teşekkür ediyorum.işlerim dolayısıyla uzun zamandır bakmadım konuya dün akşam denedim sizin projeniz çalışıyor fakat ne indikatör cihazını görüyor ne de otomatik bağlantı sağlıyor acemi sınıfından olduğum için çözemedim. Kodları değiştirdim biraz kurcaladım ama beceremedim.

Bu arada indikatörden gelen bilgi sitring şeklinde ve şu şekilde;

A ağırlık değeriboşluk=Kantar sabit araç var iken yada yok iken.
B ağırlık değeriboşluk=indikatör desteklemediği için gelmiyor.
C ağırlık değeriboşluk=Kantar sabit değil araç var iken.
D ağırlık değeriboşluk=indikatör desteklemediği için gelmiyor.
E ağırlık değeriboşluk=Yük aşımı ve arıza durumunda geliyor.
boşluktan kastım boşluk karakteri.

Kantar kıpırtısız iken ve araç yok sıfır iken A değeriyle geliyor örnek;
araç yok iken sürekli A 0 A 0 A 0 A 0 geliyor araç gelip kantar sabitlenince A 12500 A 12500 A 12500 olarak geliyor

Kantar sabit değilken C değeriyle geliyor örnek;
C 10500 C 12500 C 14500 Kantar sabit oluncaya kadar C değeri geliyor.

Yardımlarınız için şimdiden teşekkür ediyorum.
ertank
Kıdemli Üye
Mesajlar: 1651
Kayıt: 12 Eyl 2015 12:45

Re: Comport Tarama ve Otomatik Bağlanma

Mesaj gönderen ertank »

Merhaba,

Bu bilgiler normal koşullarda yeterli değil.

Normal tartım yapıldığını düşünelim. İndikatör A harfinden önce ve/veya ağırlık rakamından sonra mutlaka görünmeyen özel bir karakter gönderiliyor olmalı ki gelen ağırlık bilgisi ile bir sonraki ve bir önceki ağırlık bilgisi ayırd edilebilsin.

COM port dinleyen bir uygulama ile gelen bilgileri ham olarak incelemeniz ve bu görünmez karakter olup olmadığını (ki yüksek ihtimalle var) kesin olarak bildirmeniz gerekli ki ilgili veri bloğunu sürekli gelen veriler arasından okumak mümkün olsun.
bnyamin
Üye
Mesajlar: 44
Kayıt: 01 Mar 2019 12:55

Re: Comport Tarama ve Otomatik Bağlanma

Mesaj gönderen bnyamin »

https://i.hizliresim.com/BXEYMk.jpg[/img][/url]
https://i.hizliresim.com/zRHoyy.jpg[/img][/url]
https://i.hizliresim.com/wX8YU7.jpg[/img][/url]
https://i.hizliresim.com/BhWrog.jpg[/img][/url]

Resimleri [img] değil url olarak ekleyin
FreeMan35


Sayın ErtanK hocam resimlerdede görüldüğü üzere;

1. resimde araç yok iken gelen veri A 0 ve boşluk karakteri,

diğer resimlerde ise;

Araç var kantar sabit iken A değeri ve ağırlık bilgisi ve boşluk karakteri geliyor,
Araç yürüyor kantar sabit değilken,C değeri ve değişken ağırlık bilgisi ve boşluk karakteri geliyor sürekli olarak .
ertank
Kıdemli Üye
Mesajlar: 1651
Kayıt: 12 Eyl 2015 12:45

Re: Comport Tarama ve Otomatik Bağlanma

Mesaj gönderen ertank »

Merhaba,

Ekteki güncellenmiş projeyi deneyebilirsiniz. Ancak ezberden yazılan ve test edilmemiş kod olduğu için çalışacağını söyleyemem.
Dosya ekleri
com port listele.7z
(54.46 KiB) 115 kere indirildi
bnyamin
Üye
Mesajlar: 44
Kayıt: 01 Mar 2019 12:55

Re: Comport Tarama ve Otomatik Bağlanma

Mesaj gönderen bnyamin »

Sayın ErtanK hocam teşekkür ediyorum kod çalıştı belki benim gibi bilmeyen arkadaşlar olur şunu belirteyim apddatapackete data gelmesini sağlamak istiyorsak küçük bir ayar yapmak gerekli apddatapacket in properties kısmında Endcond yeri var oraya tıklayıp ecPacketsize değerini true yapalım packet size değerini de gelen data verisinin hane sayısını yazdım ben çalıştı ama hane sayısı mı yazılacak bilmiyorum.

Birde son olarak aranan Comport bulunduğunda listbox2 ye 1 adet değil de alt alta sürekli ekleniyor acaba bu nedendir.
ertank
Kıdemli Üye
Mesajlar: 1651
Kayıt: 12 Eyl 2015 12:45

Re: Comport Tarama ve Otomatik Bağlanma

Mesaj gönderen ertank »

Merhaba,

Daha önce belirttiğim gibi kodu test etme imkanım yok. Sebebinden emin değilim. ApdDataPacket1Packet() prosedürü içindeki kodun ilgili bölümünü aşağıdaki hale getirerek deneyebilirsiniz. Çözüm olacağından emin değilim.

Kod: Tümünü seç

    if ListBox2.Tag = 1 then
    begin
      if ListBox2.Items.IndexOf(ListBox1.Items[ListBox1.ItemIndex]) = -1 then
        // Port testi için bu metod kullanılır ise aşağıdaki kodlar tespit edilen kantarı ilgili listeye ekler
        ListBox2.Items.Add(ListBox1.Items[ListBox1.ItemIndex]);
    end;
bnyamin
Üye
Mesajlar: 44
Kayıt: 01 Mar 2019 12:55

Re: Comport Tarama ve Otomatik Bağlanma

Mesaj gönderen bnyamin »

Evet bu problemde sayenizde halloldu Sayın ErtanK hocam her şey için çok teşekkür ederim.
Cevapla