Com Port nasıl komut gönderilir ve alınır?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
naturelmania
Üye
Mesajlar: 66
Kayıt: 27 Nis 2006 09:29

Com Port nasıl komut gönderilir ve alınır?

Mesaj gönderen naturelmania »

Arkadaşlar com port için uzun zamandır bir araştırma yapıyordum elimde aşağıdaki kodlar var

Kod: Tümünü seç

SSP FIRMWARE COMMAND SET
'========serial mode commands
'
' 19.2K baud, no parity, inverted, always driven
'
' n is any real integer 0 <= n <= 9
' x is any character
' LF is a line feed character, decimal 10, hex A
' CR is a carriage return character, decimal 13, hex D
' "!" is the exclamation character, decimal 33, hex 21
'
' SSMODE if in manual mode, this command will initate the serial loop mode and
' only serial commands will control the instrument
' after the serial loop mode is entered, a "!" LF CR is sent on the
' serial port to acknowledge the mode change
' if the instrument is already in the serial loop mode, the
' acknowledgement code is sent again, "!" LF CR to confrim that the
' instrument is in the serial loop mode
'
' SGAINn sets gain of instrument of preamp stage. n can be 1, 2 or 3 only
' 1 = gain of 100, 2 = gain of 10, 3 = gain of 100
' "!" LF CR is returned on serial port to acknowledge command
'
' SInnnn sets integration time in units of 0.01 seconds. 0001 <= nnnn <= 9999
' "!" LF CR is returned on serial port to acknowledge command
'
' SCOUNT start a reading with selected gain and integration time.
' after the count is completed, the results are displayed on the
' instrument and sent on the serial port in the following format:
' C=nnnnn LF CR, where 00000 <= nnnnn <= 65535, leading zeros are sent
'
' SMnnnn initiate a fast reading cycle with selected gain and integration time.
' nnnn is the number of readings to do, 0000 <= nnnn <= 9999, leading
' zeros must be added for number to be correct
' after each reading is done the value is sent on the serial in the
' following format: nnnn LF CR where 0000 <= nnnn <= 9999
' the fast mode sequence can be interrupted by sending a SS
' once the fast mode is successfully stoped, a "!" LF CR is sent
'
' SFILTn if the auto filter option is available on the instrument, the filter
' number can be selected. n can be 1, 2, 3, 4, 5 or 6 only.
' once the filter move is complete a "!" LF CR is sent
'
' SHOMEx if the auto filter option is available on the instrument, this command
' makes the filter slider find position 1 and stay there.
' once the filter move is complete a "!" LF CR is sent
'
' SENDxx exits the serial loop mode and returns to manual mode.
' before leaving the serial loop mode, an "END" LF CR is sent
'
'=======serial error messages
'
' "ER=1" LF CR low battery voltage condition is sent at any time that the
' instrument detects a low voltage on the battery - SSP-3 only
'
' "ER=2" LF CR high voltage has shut down because of object to bright - SSP-5 only
Fakat ben bunların nasıl kullanılacağını bilemiyorum?
Fonksiyon yazmaya çalıştım fakat beceremedim :oops:
Comport komponentinden portwrite(SSMODE) mu diyeceğim acaba?
Portlar hakkında nasıl veri alınıp gönderildiği ile ilgili araştırmam var fakat çok fazla şey bilmediğim belli oluyor sanırım :cry:
Ben uğraşmaya devam ediyorum yardım veya önerileriniz için şimdiden teşekkür ederim.
var
sen : sevgili;
ben : aşık;
sevgi: aşk;
if ben aşık sana = True then
execute sevgi between(sen,ben);
:)))))
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
elimde aşağıdaki kodlar var demişsiniz ama hiç kod göndermemişsiniz. gönderdiğiniz döküman elinizdeki bir bileşenle ilgili açıklamalar.
sitede comport ile ilgili epey döküman ve örnek mevcut.
onları bi incelemenizi tavsiye ederim.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Re: Com Port nasıl komut gönderilir ve alınır?

Mesaj gönderen ikutluay »

Bunlar sadece portun kullanım ayarları. Biraz daha ilerlemiş olmanız lazım devreye girebilmemiz için.
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Kullanıcı avatarı
balsoft
Üye
Mesajlar: 60
Kayıt: 09 Şub 2005 06:01
Konum: ANKARA
İletişim:

Mesaj gönderen balsoft »

portlar konusunda uzun uzun konuşabiliriz ancak açıkcası
lonely yazdı:Bunlar sadece portun kullanım ayarları. Biraz daha ilerlemiş olmanız lazım devreye girebilmemiz için.
bu söyleminize bir anlam veremedim neyse yolladıklarınız bir kod değil standart portların işleyini anlatan bir döküman kısaca şöle söleyebiliriz hemen hemen tüm portlarda işlemler DTS-RTS-LF-CR gibi isimlendirilmiş şekilde işlerler bu isimlendirme kullanıcı yada programcı açısından hiç bii ifade etmez istediğin fiziksel portları kullanmaksa com yada lpt gibi windows 98 ve öncesi sürümlerinde direk port erişimine izin verildiği için bi kaç satırlık assembler kodlarından oluşmuş bi fonksiyonla halledebilirsin ama xp yada NT tabanlı bir windos sürümünde doğrudan port erişimi olmadığı için porta okuma yazma yaptıracaksan bu işi gören bi bileşen kullanman gerekir kullanabileceğin bileşenlerden aklıma gelen 2 si APRO yada SMPORT olabilir sitede aratırsan bunlar hakkında bilgi bulabilirsin olurda win98 yada 95 gibi bişi denemek istersin diye örnek bir kod vereyim

Kod: Tümünü seç

procedure portout(IOport:word;value:byte);assembler;
asm
xchg ax,dx //port'a bilgi gonder
out dx,al
end;
function portin(IOport:word):byte;assembler;
asm
mov dx,ax //porttan bilgi al
in al,dx
end;

//kullanımı
procedure TForm1.Button1Click(Sender: TObject);
begin
portout(8080,2);
label1.caption:=inttostr(portin(8080));
end;
tekrar söylüyorum bu kod XP 2000 yada NT sistemlerinde çalışmaz

NOT: Fiziksel portlarda port numarası olarak kullanacağın bileşenin özelliğine bağlı olarak port adresini HEX olarak yada decimal olarak girmen gerekebillir

kolay gelsin
Bilgini saklamaki daha fazla öğrenebilesin...
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Mesaj gönderen csunguray »

COM port kullanımı için en kolay ve güvenli yol MS'un MSCOMM32.OCX ini kullanmaktır. Bunu Windows\System32 klasörüne kopyalayın. Başlat > Çalıştır > regsvr32 MSCOMM32.OCX ile register edin. Sonra Delphi içerisinden Component > Import ActiveX Control > Microsoft Comm Control 6.0 'ı seçin. Bu işlem sonucunda ActiveX bileşen paletinde MsComm isimli bir bileşen oluşacaktır. Güle güle kullanın.
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri

Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
naturelmania
Üye
Mesajlar: 66
Kayıt: 27 Nis 2006 09:29

Mesaj gönderen naturelmania »

Cevaplarınız için çok teşekkür ederim aynı zamanda başka yerlerden ve arkadaşlarımdan da araştırmalarımı sürdürüyorum.
Şu anda kullandığım bileşen cport bileşenini kullanıyorum delphi studio 2006 için, benim zorlanmış olduğum noktanın porta nasıl gönderip nasıl alacağım olduğunu anladım. Sanırım porta verileri hexadesimal sayı halinde gönderiyoruz yani

Kod: Tümünü seç

begin
Comport1.Write(hexadesimal, buffer);
end;
gibi yazmamız gerekiyor aynı şekilde Read komutunu dinleyerek de karşıdan cevap beklememiz gerekiyor.
Peki birşey daha soracağım. Bir arkadaşım hyper terminali kullan portu dinle portta ne alınıp veriliyor öğrenirsin dedi. Fakat ben nerde yanlış yaptıysam hyper terminale com1 i gösterdiğimde dinlemesi için portu açıyor ve başka programların bu portu kullanmasını engelliyor. Böylelikle orijinal programın alete bağlanmasını engelliyor ve ben portu dinleyemiyorum.
Acaba bir porta örneğin (com1e) bağlı bir aletle, bu aletin programının iletişimini raporlayamaz mıyım? Yani bir nevi dinleme.
Hyper terminalin ayarlarını mı yanlış yaptım acaba? Yoksa bunun böyle bir özelliği yok mu? (Hemen hyper terminali araştırmaya başlıyorum)
Emek verip cevap yazan arkadaşlardan Allah(c.c) razı olsun...
Kolay gelsin.
var
sen : sevgili;
ben : aşık;
sevgi: aşk;
if ben aşık sana = True then
execute sevgi between(sen,ben);
:)))))
Kullanıcı avatarı
uğur alkan
Üye
Mesajlar: 227
Kayıt: 29 Ağu 2004 04:49
Konum: Istanbul

Mesaj gönderen uğur alkan »

Sistemde bir aygıtı yalnız bir program kullanabilir. Hyper Terminal compoert a yerleştiğinde sende doğal olarak orjinal program ile comport
meşgul veya kullanımda diye bir mesaj alırsın....

Sana ben Aproyu tavsiye etmek istiyorum 95,98,2000,XP hepsinde hiç bir sorun çıkartmadan çalışıyor. III. Parti bileşenlerden indirip kurabilirsin.



viewtopic.php?t=19745&highlight=apro

http://www.delphiturkiye.com/index.php? ... ofessional komponenet burada



viewtopic.php?t=18096&highlight=apro+seri+port porttan bilgi okumada burada
ayrıca haberleşme komutlarının detaylarını yukardaki linkte bulacaksın
Bazen sert rüzgarlar eser başını öne eğmekten asla korkma
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Evinde / işyerinde ikinci bir bilgisayarın varsa Null Modem kablosu ile iki bilgisayarı birbiri ile haberleştirebilirsin. O zaman Hyperterminal ile dinleme yapabilirsin.

- @uğur alkan gibi ben de Turbopower AsyncPro bileşenlerini tavsiye ederim. Kolaylıkla kavrayabilirsin. Bir başka başlıkta Comm porttan veri gönderme ve alma ile ilgili bir örnek vermiştim. Görceğin üzere TEXT bilgi gönderip alabilirsin. ref. viewtopic.php?p=119699#119701
Resim
Resim ....Resim
Cevapla