gpt4 book ai didi

java - 与 jnpout32pkg/jnpout32reg 的并口通信

转载 作者:太空宇宙 更新时间:2023-11-04 13:18:03 26 4
gpt4 key购买 nike

我正在尝试通过包 jnpout32reg ( http://www.hytherion.com/beattidp/comput/pport.htm ) 与并行端口通信,它是 inpout32 ( http://www.highrez.co.uk/downloads/inpout32/ ) 的 Java 实现。我已经使用并行端口测试仪 (download.cnet.com/Parallel-Port-Tester/3000-2086_4-75940249.html) 测试了 inpout32,它似乎运行良好。但是,java实现好像不行。

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();
}
}

与端口的连接已建立,我可以从端口读取(端口 378 返回 78,端口 379 返回 79 等...)。但是,我不能写输出。没有给出错误,但在接收端没有任何反应(与并行端口测试器相反)。

当我改用 jnpout32pkg(jnpout32reg 的不同版本)时,出现以下错误(即使我安装的所有内容都类似):

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

我做错了什么,pkg 和 reg 有什么区别?

最佳答案

在 Alexander Heimel (http://csflab.nin.knaw.nl/protocols/parallel-port-in-matlab) 和 Douglas Beattie (http://www.hytherion.com/beattidp/comput/pport.htm) 的大力帮助下,我终于找到了解决方法。

Python对inpout32(或者inpoutx64,取决于你使用的版本)没有问题,所以我写了下面的脚本。

# 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)

如果您只想发送一个脉冲(即之后立即将其设置回 0),请使用 sleep(0.002),然后是 p.Out32(address,0)。接下来,您通过 Java 执行此脚本,这是通过以下代码完成的:

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

其中address为并口地址(0x378),num为待写入值。

关于java - 与 jnpout32pkg/jnpout32reg 的并口通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36456252/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com