Comport Tarama ve Otomatik Bağlanma [Çözüldü]
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Comport Tarama ve Otomatik Bağlanma [Çözüldü]
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.
Re: Comport Tarama ve Otomatik Bağlanma
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.
Re: Comport Tarama ve Otomatik Bağlanma
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?
Resmi en büyük haliyle bile kaydettim ama burada küçük görünüyor jpg olduğundan mıdır bilemedim?
Re: Comport Tarama ve Otomatik Bağlanma
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.
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.
Ş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;
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
Re: Comport Tarama ve Otomatik Bağlanma
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.
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.
Re: Comport Tarama ve Otomatik Bağlanma
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.
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.
Re: Comport Tarama ve Otomatik Bağlanma
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 .
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 .
Re: Comport Tarama ve Otomatik Bağlanma
Merhaba,
Ekteki güncellenmiş projeyi deneyebilirsiniz. Ancak ezberden yazılan ve test edilmemiş kod olduğu için çalışacağını söyleyemem.
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) 116 kere indirildi
Re: Comport Tarama ve Otomatik Bağlanma
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.
Birde son olarak aranan Comport bulunduğunda listbox2 ye 1 adet değil de alt alta sürekli ekleniyor acaba bu nedendir.
Re: Comport Tarama ve Otomatik Bağlanma
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.
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;
Re: Comport Tarama ve Otomatik Bağlanma
Evet bu problemde sayenizde halloldu Sayın ErtanK hocam her şey için çok teşekkür ederim.