Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何强制使用Java';在通过串行连接发送的消息之间,是否将jSerialComm设置为短时间空闲?_Java_Serial Port_Outputstream_Serial Communication - Fatal编程技术网

如何强制使用Java';在通过串行连接发送的消息之间,是否将jSerialComm设置为短时间空闲?

如何强制使用Java';在通过串行连接发送的消息之间,是否将jSerialComm设置为短时间空闲?,java,serial-port,outputstream,serial-communication,Java,Serial Port,Outputstream,Serial Communication,我正在使用Java的jSerialComm包在几个不同的操作系统设置(Windows和Linux,一些带有USB到串行适配器,另一些带有直接串行端口)上通过共享RS485串行连接与一系列设备通信。设备的要求表明,它可以处理发往其他设备的消息,但传出的消息必须遵循以下规则 传输设备应保证至少两个字符的间隔时间,然后才能访问通信信道。需要此空闲线路延迟以允许信号转换器和/或多路复用器感测线路已空闲 这里的问题是jSerialComm及其内部OutputStream会在它或底层串行驱动程序需要时发送它

我正在使用Java的jSerialComm包在几个不同的操作系统设置(Windows和Linux,一些带有USB到串行适配器,另一些带有直接串行端口)上通过共享RS485串行连接与一系列设备通信。设备的要求表明,它可以处理发往其他设备的消息,但传出的消息必须遵循以下规则

传输设备应保证至少两个字符的间隔时间,然后才能访问通信信道。需要此空闲线路延迟以允许信号转换器和/或多路复用器感测线路已空闲

这里的问题是jSerialComm及其内部OutputStream会在它或底层串行驱动程序需要时发送它接收到的所有字节。我可以将字节写入输出,但无法知道它们何时被发送到设备。因此,如果我有两个设备,并且一个接一个地向每个设备发送一条消息,第一个设备将正确地接收到它的消息,但是第二个设备将忽略它的消息,因为两条消息之间没有空闲时间(它显然假设两条消息对于第一个设备来说只是一条长消息)

我试过一些方法

  • 使用jserialcomm中描述的事件监听器,但这些监听器仅在Windows系统上工作,并且只有在驱动程序工作时才工作(我的设置似乎不是这样)

  • 发送每个字节[]后等待任意时间,尽管这可能太慢或在不同的系统中不可靠

  • 在每条消息之前或之后添加额外的1或0。我希望驱动程序不会发送任何信息,或者设备会将它们视为空闲连接,但这不起作用



我想我需要的是一种方法,可以知道消息的字节是何时发送的,或者有一种方法可以在消息之间强制一些空闲时间。有人知道这样做的方法吗?

确保消息之间有空闲线路的典型方法是(a)只有一个发送方,即只有一个线程打开并写入此串行终端。(b) 将每个完整消息作为一个系统调用发送。(c) 在发送另一条消息之前使用-type函数。如果波特率较慢,则可能还需要显式延迟。(d) 建议你用示波器来验证你在做什么。谢谢你的回复。我已经讨论了(a)点,我可以尝试(d)点,但是有没有一种方法可以在Java中处理(b)点和(c)点?Java OutputStream似乎将给定的字节数组逐字节写入较低的系统/驱动程序缓冲区,而不是一次全部写入。我不知道如何控制数据在操作系统级别的处理方式。“有没有办法处理点(b)”——最重要的是你能控制什么。因此,您的代码必须生成完整的消息,然后通过原始的直接写入机制发送完整的消息。根据,您的消息将在单个系统调用中提交。“…和(c)在Java中?”--根据,当成功写入所有数据时,您可以收到回调通知。