教程

创建新驱动程序的策略

qianmoQqianmoQ· 更新于 2026-10-01· 阅读 3 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

请参阅其他现有模块,了解其中部分内容的实现方式。

准备新的协议模块

  1. 为你的协议创建一个新的 protocol 模块。

  2. 为新模块创建 pom.xml 文件。

  3. 在 src/main/release/ 中创建一个新的 mspec 文件,其中只包含一两个虚拟类型。

  4. 在 src/main/java 中创建一个新的 Protocol 类,实现 org.apache.plc4x.plugins.codegenerator.protocol.Protocol。

    • getName() 返回的值将用于 maven 驱动代码生成。
  5. 创建一个名为 src/main/resources/META-INF/services/org.apache.plc4x.plugins.codegenerator.protocol.Protocol 的新文件,并在其中列出新的协议类。

  6. 测试能否成功构建新的协议模块。

准备新的驱动模块

  1. 在 plc4j/drivers 下创建一个新的 driver 模块

  2. 为新模块创建 pom.xml 文件。

    • 务必添加对你的协议模块的 maven 依赖。
    • 务必确保其中包含 update-generated-code profile。
    • 务必引用你在协议模块中使用的协议名称。
  3. 在 src/main/java 中创建 Driver 类,实现 org.apache.plc4x.java.api.PlcDriver。

  4. 创建一个名为 src/main/resources/META-INF/services/org.apache.plc4x.java.api.PlcDriver 的文件,并在其中列出新的驱动类。

  5. 测试能否成功构建新的驱动模块,并且代码生成正常工作。

开始实现协议解析器与序列化器

  1. 抓取你想要为其创建驱动的通信数据。

  2. 在 WireShark 中打开抓包文件

  3. 开始在你的 mspec 文件中定义你看到的类型

  4. 在协议模块的 src/test/resources 目录中创建一个 ParserSerializerTestsuite.xml 文件。

  5. 为录制文件中的每个数据包添加空的测试用例:在 Wireshark 中将 TCP/UDP/其他协议的负载以 hex-stream 形式复制出来,并粘贴到测试用例的 raw 元素中。

  6. 在驱动模块中,在 src/test/java 中创建一个继承 org.apache.plc4x.test.parserserializer.ParserSerializerTestsuiteRunner 的 ParserSerializer 测试,并引用你的协议模块的 ParserSerializerTestsuite.xml 文件。

  7. 迭代实现处理抓包文件所需的全部 mspec 类型:

    • 在 mspec 文件中添加/更新类型
    • 重新构建协议模块
    • 重新构建驱动模块(启用 update-generate-code profile)
    • 运行 ParserSerializer 测试

开始实现驱动逻辑

一旦你能够处理所有已观测通信的抓包文件,就可以开始实现驱动协议逻辑了。

TODO:继续编写这部分内容。

评论

登录后参与评论

正在加载评论…