使用java发送带有标头和正文的mesage并输出一个串行端口

使用java发送带有标头和正文的mesage并输出一个串行端口,java,serial-port,Java,Serial Port,我到处找,找不到这个问题的答案。我相当肯定这并不困难,可能是因为我的搜索没有使用正确的措辞 我正在与万向节控制器通信。我已经能够连接到它所连接的串行端口。我找不到有关如何格式化如下消息的信息: 每个命令包括 标题和正文的,都带有校验和。标题或正文校验和错误的命令,或 如果车身尺寸与预期不同,则应忽略 有人能告诉我如何像那样写入串行端口吗 谢谢, Loren通过串行端口与设备通信有两种典型方法。在这两种情况下,最终结果都是通过导线发送原始位。如果您的设备需要,您可以发送ASCII字符串,但由于您的

我到处找,找不到这个问题的答案。我相当肯定这并不困难,可能是因为我的搜索没有使用正确的措辞

我正在与万向节控制器通信。我已经能够连接到它所连接的串行端口。我找不到有关如何格式化如下消息的信息:

每个命令包括 标题和正文的,都带有校验和。标题或正文校验和错误的命令,或 如果车身尺寸与预期不同,则应忽略

有人能告诉我如何像那样写入串行端口吗

谢谢,


Loren

通过串行端口与设备通信有两种典型方法。在这两种情况下,最终结果都是通过导线发送原始位。如果您的设备需要,您可以发送ASCII字符串,但由于您的摘录特别提到了数据包打包,我冒昧地说,它们需要字节

您复制粘贴的摘录听起来像是来自一本手册,该手册解释了通信所需的确切协议。简而言之,您将执行以下操作

  • 设置串行端口
  • 准备串行数据
  • 发送您的串行数据
  • 我喜欢使用jSSC进行串行通信,尽管很多人使用RXTX。jSSC对我来说更可靠,所以我将在我的示例中使用它。设备手册应指定所需的波特率、数据位、停止位、奇偶校验和握手(如果有)

    这里我们设置一个端口(根据需要替换您的参数)。有关此操作的详细信息,请参见文档

    要构建数据包,您需要知道:

  • 标题格式
  • 长度要求/限制
  • 校验和法
  • 在这里,我将制作一个超级简单的包,它只是一个示例,很可能不适用于您的用例

    // Format is: [length][7 data bytes][8 bit additive checksum]
    // Create an empty byte array
    byte[] packet = new byte[8];
    
    // Our simple header
    packet[0] = packet.length;
    
    // Some data
    byte[] dummyData = new byte[] { 1, 2, 3, 4, 5, 6, 7 };
    
    // Copy data to packet
    System.arraycopy(dummyData, 0, packet, 0, dummyData.length);
    
    // Go do the checksum (good exercise for you)
    byte checksum = getChecksum(packet);
    packet[7] = checksum;
    
    现在我们有了一个端口,一些数据。。。现在呢?让我们把它寄出去

    // Just send those bytes
    _port.writeBytes(packet);
    
    一旦掌握了窍门,请阅读如何读取响应、如何设置DataReceivedEvents以及如何更高效地创建数据包。谷歌的一些好术语:

    • jSSC
    • JavaRXTX
    • 波特率
    • 异步/同步数据处理

    哇,这太棒了!非常感谢你
    // Just send those bytes
    _port.writeBytes(packet);