asyncapi: 2.6.0
info:
  title: Modbus RTU
  version: '1.0'
  description: Modbus over serial, RTU transmission mode. Frame boundaries are marked
    by line silence rather than sync bytes or a length field.
servers:
  serial_link:
    url: serial://tty/115200
    protocol: serial
    description: Physical UART Transport (115200 bps, 8N1.0)
    bindings:
      serial:
        baudRate: 115200
        dataBits: 8
        parity: even
        stopBits: 1.0
        framingType: delimited
        integrity: crc16_modbus
channels:
  omniuart/cmd/ReadCoilsRequest:
    publish:
      summary: 'Send command ReadCoilsRequest (ID: 0x01)'
      description: 'Function 0x01: Read boolean coils status.'
      message:
        name: ReadCoilsRequest_Message
        title: ReadCoilsRequest Command
        payload:
          $ref: '#/components/schemas/ReadCoilsRequest_Request'
  omniuart/cmd/ReadDiscreteInputsRequest:
    publish:
      summary: 'Send command ReadDiscreteInputsRequest (ID: 0x02)'
      description: 'Function 0x02: Read discrete inputs status.'
      message:
        name: ReadDiscreteInputsRequest_Message
        title: ReadDiscreteInputsRequest Command
        payload:
          $ref: '#/components/schemas/ReadDiscreteInputsRequest_Request'
  omniuart/cmd/ReadHoldingRegistersRequest:
    publish:
      summary: 'Send command ReadHoldingRegistersRequest (ID: 0x03)'
      description: 'Function 0x03: Read a block of holding registers.'
      message:
        name: ReadHoldingRegistersRequest_Message
        title: ReadHoldingRegistersRequest Command
        payload:
          $ref: '#/components/schemas/ReadHoldingRegistersRequest_Request'
  omniuart/cmd/ReadInputRegistersRequest:
    publish:
      summary: 'Send command ReadInputRegistersRequest (ID: 0x04)'
      description: 'Function 0x04: Read a block of input registers.'
      message:
        name: ReadInputRegistersRequest_Message
        title: ReadInputRegistersRequest Command
        payload:
          $ref: '#/components/schemas/ReadInputRegistersRequest_Request'
  omniuart/cmd/WriteSingleRegisterRequest:
    publish:
      summary: 'Send command WriteSingleRegisterRequest (ID: 0x06)'
      description: 'Function 0x06: Write one holding register.'
      message:
        name: WriteSingleRegisterRequest_Message
        title: WriteSingleRegisterRequest Command
        payload:
          $ref: '#/components/schemas/WriteSingleRegisterRequest_Request'
  omniuart/cmd/WriteMultipleRegistersRequest:
    publish:
      summary: 'Send command WriteMultipleRegistersRequest (ID: 0x10)'
      description: 'Function 0x10: Write multiple holding registers.'
      message:
        name: WriteMultipleRegistersRequest_Message
        title: WriteMultipleRegistersRequest Command
        payload:
          $ref: '#/components/schemas/WriteMultipleRegistersRequest_Request'
components:
  messages: {}
  schemas:
    ReadCoilsRequest_Request:
      type: object
      properties:
        command_id:
          type: integer
          const: 1
          description: Opcode ID for ReadCoilsRequest
        slaveAddress:
          type: integer
        startAddress:
          type: integer
        quantity:
          type: integer
          unit: coils
      description: 'Function 0x01: Read boolean coils status.'
    ReadDiscreteInputsRequest_Request:
      type: object
      properties:
        command_id:
          type: integer
          const: 2
          description: Opcode ID for ReadDiscreteInputsRequest
        slaveAddress:
          type: integer
        startAddress:
          type: integer
        quantity:
          type: integer
          unit: inputs
      description: 'Function 0x02: Read discrete inputs status.'
    ReadHoldingRegistersRequest_Request:
      type: object
      properties:
        command_id:
          type: integer
          const: 3
          description: Opcode ID for ReadHoldingRegistersRequest
        slaveAddress:
          type: integer
        startAddress:
          type: integer
        quantity:
          type: integer
          unit: registers
      description: 'Function 0x03: Read a block of holding registers.'
    ReadInputRegistersRequest_Request:
      type: object
      properties:
        command_id:
          type: integer
          const: 4
          description: Opcode ID for ReadInputRegistersRequest
        slaveAddress:
          type: integer
        startAddress:
          type: integer
        quantity:
          type: integer
          unit: registers
      description: 'Function 0x04: Read a block of input registers.'
    WriteSingleRegisterRequest_Request:
      type: object
      properties:
        command_id:
          type: integer
          const: 6
          description: Opcode ID for WriteSingleRegisterRequest
        slaveAddress:
          type: integer
        registerAddress:
          type: integer
        value:
          type: integer
      description: 'Function 0x06: Write one holding register.'
    WriteMultipleRegistersRequest_Request:
      type: object
      properties:
        command_id:
          type: integer
          const: 16
          description: Opcode ID for WriteMultipleRegistersRequest
        slaveAddress:
          type: integer
        startAddress:
          type: integer
        quantity:
          type: integer
          unit: registers
        byteCount:
          type: integer
      description: 'Function 0x10: Write multiple holding registers.'
