2016-04-06 11 views
1

Bir Java Port inpout32 (http://www.highrez.co.uk/downloads/inpout32/) uygulaması olan jnpout32reg (http://www.hytherion.com/beattidp/comput/pport.htm) aracılığıyla Paralel Bağlantı Noktası ile iletişim kurmaya çalışıyorum. Inpout32'i, Paralel Bağlantı Noktası Test Cihazı (download. Cnet. Com/Parallel-Port-Tester/3000-2086_4-75940249.html) ile test ettim. Bununla birlikte, java uygulaması işe yaramıyor.jnpout32pkg/jnpout32reg ile Paralel Bağlantı Noktası İletişimi

package ioTest_reg; 
import hardware.jnpout32.*; 

public class ioTestReg 
{ 
     static short datum; 
     static short Addr; 
     static pPort lpt; 

    static void write() 
    { 
     datum = 0x001; 
      // Notify the console 
      System.out.println("Write to Port: " + Integer.toHexString(Addr) + 
           " with data = " + Integer.toHexString(datum)); 
      //Write to the port 
      long start = System.currentTimeMillis(); 
      long stop = System.currentTimeMillis(); 
      while (stop-start < 10000){ 
       lpt.output((short)0x001); 
       stop = System.currentTimeMillis(); 
      } 
      System.out.println("Finished"); 
    } 


    static void do_read_range() 
    { 
      // Try to read 0x378..0x37F, LPT1: 
      for (Addr=0x378; (Addr<0x380); Addr++) { 
       //Read from the port 
       datum = (short) lpt.input(Addr); 
       // Notify the console 
       System.out.println("Port: " + Integer.toHexString(Addr) + 
            " = " + Integer.toHexString(datum)); 
      } 
    } 


    public static void main(String args[]) 
    { 
     lpt = new pPort(); 
     Addr=0x378; 
     datum=0x01; 
     write(); 
     // Try to read 0x378..0x37F, LPT1: 
     do_read_range(); 
    } 
} 

portu ile bağlantısı yapıldığında ve ben (Liman 378 78 döndürür, 379 getiri 79 vs ...) limanlarından okuyabilir. Ancak çıktı yazamam. Hata verilmez, ancak alıcı tarafında hiçbir şey olmaz (Paralel Port Test Cihazı ile tersi). Nerede yanlış yapıyorum

Exception in thread "main" java.lang.UnsatisfiedLinkError: ioTest_pkg.jnpout32.ioPort.Out32(SS)V 

ve arasındaki fark nedir: Ben jnpout32pkg (jnpout32reg farklı bir versiyonu) kullandığınızda

yerine, (Ben benzer şeyi yüklü olsa bile) aşağıdaki hatayı alıyorum pkg ve reg?

cevap

0

Alexander Heimel (http://csflab.nin.knaw.nl/protocols/parallel-port-in-matlab) ve Douglas Beattie'den (http://www.hytherion.com/beattidp/comput/pport.htm) bazı büyük yardımlarla sonunda bir geçici çözüm bulmayı başardım.

Python, inpout32 ile (veya kullandığınız sürüme bağlı olarak inpoutx64) sorun yaşamadığından, aşağıdaki komut dosyasını yazdım. Yalnızca bir darbe göndermek istiyorsanız

# import windll, to be able to load the inpoutx64.dll/inpout32.dll file 
from ctypes import windll 
import sys 
from time import sleep 
## If no input is given, write '1' to parallel port 
address = int(888) # 0x378 in hex 
num = 1 

## if two inputs are given 
if len(sys.argv) > 2: 
    # cast string arguments to: 
    address = int(sys.argv[1],16) # hexadecimal integer 
    num = int(sys.argv[2]) # decimal integer 

# load dll. 
# Select either inpout32.dll or inpoutx64.dll, depending on which 
# Python version you use. If you get the error: 
# WindowsError: [Error 193] %1 is not a valid Win32 application 
# You have used the wrong one. 
p = windll.LoadLibrary("C:\\Python27\\DLLs\\inpout32.dll") 

# write data 
p.Out32(address,num) 

p.Out32(address,0) ardından sleep(0.002) kullanın (yani hemen ardından geri 0'a ayarlayın). Ardından, şu kodla Java, üzerinden bu senaryoyu yürütün:

String cmd = "python C:\\Path\\To\\Code\\WriteParPort.py "+ address +" " + num; 
Process p = Runtime.getRuntime().exec(cmd); 

hangi adres olarak paralel bağlantı noktası adresi (0x378) 'dir ve num to-yazılabilir değerdir.

İlgili konular