Seri port kullanan yazilimlarda karsilastigim genel bir hata

Başlatan bunalmis, 15 Mayıs 2007, 22:05:22

z

Diyelimki seri portu kullanan bir yazilimi calistirdiniz isinizi gordunuz ve programdan ciktiniz.

Ardindan seri port kullanan bir baska yazilim calistirdigimizda seri portu goremiyor.

Tahminimce ilk calistirilan ve ardindan cikilan program isletim sistemine seri portla isinin bittigini tam soyleyemiyor ve port bir sekilde diger isteklere kapali tutuluyor.

Bu sorunun ustesinden gelecek yontem biliyormusunuz?

Eger PC kapatilip acilirsa sorun duzeliyor. Bu sorunla daha cok free programlarda karsilasiyorum.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ankara06

Hocam kullandığınız programda kullacağınız seri portu seçtikten sonra bağlan ve bağlantıyı kes gibi seçenekler varsa böyle bir sorun olmaması lazım ben böyle bir program yazmıştım bağlantı kur ve bağlantıyı kes diye seçenekler koymuştum bilgisayarı açıp kapamadan aynı portla başka işler yapılabiliyordu

MICROCEBEL

Bunalmış hocam bende arkadaşın dediği yöntemi kullanmıştım.Yani portu birkere aktif ettik diyelim işimiz bittiğindede pasif ediyoruz bu şekilde porblem çıkmaz herhalde.Ama siz soruyosanız eminim başka problem vardır.Ben böyle birşeyle karşılaşmadım ama öneri olarak söylüyorum.

z

Iyide programlardan sadece kendime ait olani ben yaziyorum. Sorun benim programdan kaynaklanmiyor. Seri porti kullanan X programi kullandiktan sonra programdan cikip kendi programimi calistirmaya kalktigimda sorun cikiyor.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Analyzer

Selam,

Açık olan port stream'ini tekrar başka program açmaya çalıştığında win32 tepkisini koyuyor. Bildiğim kadarıyla Delphi kullanıyorsunuz. Delphi de ilgili COM stream'ini CloseFile(..) ile kapatacak kod yazıp programdan çıkarırsanız sorun olmayacağını düşünüyorum.

Analyzer
Üşeniyorum, öyleyse yarın!

SpeedyX

if (com.IsOpen) com.Close();
com.Open();

Şeklinde yaparsanız bence problem kalmaz, yada ufak bir programcık yazın, eğer com port açıksa kapatsın, pc yi yeniden başlatmaktansa bir exe ye tıklamak daha kullanışlı olur.

Mesela burada C# için birşeyler var:
http://msmvps.com/blogs/coad/archive/2005/03/23/39466.aspx

yada bu delphide şöyle yapılıyor;
 private
    objComport  : IComport;
.
.
.
objComport := CoComport.Create (); // procedure içinde
.
.
if objComport.IsOpened = -1 then ....

şeklinde, tabi kullanılan componente göre bazı ufak noktalar değişebilir.

Klein

object oriented dillerde , yukarıda bahsettiğiniz yöntemler sadece kendi açtıkları portları kapatabilirler.  Windowsta port açmak port kapatmak pic deki gibi fiziksel olarak açmak kapatmak gibi değildir. Bir başka programın açtığı portu kapatmak için : önce o uygulamanın handle numarasını sonra da portu açan nesnenin handle numarasını bilmelisiniz. sonra o uygulama ya da nesneye portu kapat mesajı gönderebilirsiniz.  Ama uygulama zaten kapatılmış olduğu için işler biraz daha karışabilir. Bu sorunun çözümü için windows servisleri incelenebilir.

hademe

PC yi resetlemeden portu tekrar kullanıma almak istiyorsanız aygıt yöneticisinden kaldırıp tekrar otomatik tarama yapıp buldurursanız 3-5 sn. de sorun çözülüyor.
Her türlü temizlik işleri yapılır.