VB.net Paralel port

Başlatan desman, 14 Nisan 2012, 16:24:18

desman

Visual basic 2010 'da toolbox ta serialport nesnesi var ancak paralel port nesnesini bulamadım acaba paralel port kontrolü yapılamıyor mu ??
Yapılıyorsa eğer nesneyi nerden bulabilirim?
A freshman at YTU

Mujdat117

#1
merhaba hocam

ben vb6 kullanıyorum ama vb de paralele port nesnesi hiç görmedim. paralele porta erişmek için genellikle "INPOUT32.DLL" dosyasını kullanırlar bu dosyayı proje dosyanızın içine veye system32 klasörüne kopyalayın. Bu dll dosyasının içinde porta erişmek için 2 tane api vardır.
Out port_adresi, Gönderilecek_veri
okunan=Int(port_adresi)
şeklinde çalışır.

resim üzerindede görüldüğü üzere 2 ile9 nolu pinleri çıkış pinleridir gönderdiğiniz veriyi bu pinlerden okursunuz.
yeşil olan pinler Status pinleri sarı renkli pinler Control Pinleri olarak geçer ve veri girişi çin kullanılır.
port Adresleri                               LPT1    LPT2
Data_PortAdresi                            &H378    &H278
status_port (Data_PortAdresi + 1)    &H379    &H279
control_port (Data_PortAdresi + 2)    &H37a    &H27a
port adresleri genelde bu şekildedir. Pc de adresi "Aygıt Yöneticisi\bağlantı noktaları\yazıcı bağlantınoktası" bölümünden "özellikller" diyerek formdan "kaynak" sekmesini tıklarsanız lpt portun pc deki adresini göreblirsiniz.


vb6 'da buton ile data portunun tüm pinlerini set eden basit kod örneği:
Private Sub Command6_Click()
Out &H378, 255
End Sub


Ayinesi iştir kişinin lâfa bakılmaz.Şahsın görünür rütbe-i aklı eserinde

esensoy

paralel port la interrupt nasıl kullanılıyor peki?
ayrı bir dll i mi var?
bir de muhtelif dll içinde ki fonksiyonların listesini nereden buluruz? mesela kernel32.dll içindekiler?
En tehlikeli an "zafer" anıdır.

Mujdat117

#3
en pratik yöntem timer kullanarak portta değişiklik olduğunda okunan veriyi daha önce oluşturdugunuz bir alt rutni çağırarak işleyin
örnek olarak
fomunuza bit timer ekleyin ve interval özelliğini 100ms ayarlayın.
şu şekilde 2 tane alt rutin oluşturun
Status_Chance( Okunan_Veri)'status portunda değişkilikleri burdan takiğ edin
Control_Chance( Okunan_Veri)'control portundaki değişiklikleride burdan
takip edin

timer 100ms de bir kesme oluşturur ve portların değerini okur bi önceki değerleri ile karşılaştırarak değişikjlik varmı yokmu kontrol edin hangi porta değişiklik varsa o port için oluşturduğunuz rutni çağırarak itediğiniz kodu çalıştırırsınız.

bir diğer yöntem sonsuz döngü ile yapabilirsinz
Dim SP1,SP2
Dim CP1,CP2
While Ture
SP1=Inp(Port_adresi)
if SP1<>SP2 then 
SP2=SP1
Status_Chance SP2
end if
CP1=Inp(Port_adresi)
if CP1<>CP2 then 
CP2=CP1
Control_Chance CP2
end if
DoEvents
wend

bu şekildede yapabilirsiniz ama DOEVENTS yazmayı unutmayın çünkü sonsuz döngüye girer ve pc kitleyebilir program.

paralele port için başka dll dosyalarıda gördüm fakat en yaygın kullanılanı"INPOUT32.DLL" dır. diğerlerini bende kullanmadım. oyuzden bişi söyleyemiycem

Api deklerasyonları için "ApiVıewer 2004" diye bir program var ben onu kullanıyorum dll dosyalarından apileri çekemez ama kayıtlı yüzlerce api var. api leri ve parametrelerini mikrosoftun sitesinden göreblirsiniz. dll dosyalarından ikon,dialog Sheet,Resim gibi gömülü bilgilerin alındığını biliyorum ama api leri çekebilen bi ugulama ben raslamadım.

Ayinesi iştir kişinin lâfa bakılmaz.Şahsın görünür rütbe-i aklı eserinde

esensoy

Mujdat zaten dediğin şekilde yapıyoruz fakat lptden encoder okuyacağım desen iş interrupta takılıyor,
timerlar kurtarmıyor,
o yüzden sordum, nette de interrupt la alakalı pek bir bilgiye rastlamadım,
En tehlikeli an "zafer" anıdır.

desman

Bu konudaki eksikliklerimi giderdim, bundan sonra paralel port kontrol etmek isteyen arkadaşlara yadımcı olması için
öğendiklerimi paylaşmak istedim uygulanacak adımlar;
1)INPOUT32.DLL dosyasını internetten indirin.
2)Bu dll dosyasını C:\Windows\System32 dosyasının içine atın.
3)Visual basic prejesi açın ve bir modul ekleyin ve şunları yapıştırın
Public Declare Function Inp Lib "inpout32.dll" _
Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Public Declare Sub Out Lib "inpout32.dll" _
Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)

4)Porta erişme komutuda böyle kullanılıyo;Bunu kodu yazdığınızda bütün data pinleri 1 olur.
Private Sub Gönder_Click()
Out Val("&378"), 255
End Sub

5)Son olarakta portta 18. pinden 25. pine kadar - ye bağlaıktan sonra sorunsuz olarak 2. pin ile 9. arasında çıkış alabilirsiniz.
Umarım yardımcı olur :)
A freshman at YTU

drf1

Merhaba ,
Vermiş olduğunuz bilgiler için teşekkür ederim .
Yaptığım denemelerde "Privileged instruction " hatası ile karşılaştım .hata "out32" komutunda .Araştırdığımda paralel portu kullanmak için verilen tüm örnek kodların asm de dahil olmak üzere "korumalı mod" mimarisi engelini aşamadığını gördüm . bu durumda InpOut32.dll ' yi nasıl kullanacağız. Win 98 den sonraki tüm sistemler direk porta yazmayı engelliyor . Aynı durum asm de de aynı hata ile karşımıza çıkıyor :
compiler ;
..
Out dx,ax
..
gördüğü yerde ,"privileged instruction " hatası veriyor.
Bu durumda bir çok arkadaş "kernel modda" yazılım yapılması gerektiğini söylüyor.Fakat Kernel moda nasıl geçileceğine dair bir ipucu bile bulamadım . Bu konuda bilgisi olan arkadaş varmı ?
Teşekkürler.


drf1


Mujdat117

merhaba
lpt port tan okuma ve veri gönderme yapan örnek bir uygulama yaptım
port kullanmayı öğrenmek içni faydalı olucaktır.

http://hotfile.com/dl/153098427/6c505cc/lpt.rar.html

Ayinesi iştir kişinin lâfa bakılmaz.Şahsın görünür rütbe-i aklı eserinde