类 PDO

java.lang.Object
com.darra.ethercat.slave.PDO

public class PDO extends Object
高性能 PDO (过程数据对象) 访问 对齐 C# Slave/PDO.cs: 零拷贝指针、直接读写、PDOArrayInstance、PDODataItem
  • 嵌套类概要

    嵌套类
    修饰符和类型
    说明
    static class 
    PDO 数组实例 - 按字节索引访问 PDO 数据 对齐 C# PDOArrayInstance
    static class 
    单个 PDO 数据项 - 类型化访问 对齐 C# PDODataItem: Content, AsInt16, AsInt32, AsFloat, AsDouble 等
  • 构造器概要

    构造器
    构造器
    说明
    PDO(short masterIndex, short slaveIndex)
     
  • 方法概要

    修饰符和类型
    方法
    说明
    AsBuffer(boolean isInput)
    获取 PDO 数据区的 ByteBuffer (零拷贝, 对应 C# AsSpan)
    long
    获取本从站 PDO 平均周期时间(纳秒).
    BatchRead(int[] offsets, int[] sizes)
    批量读取多个 PDO 值 (高性能, 使用 ByteBuffer) 通过 GetIO 获取输入数据指针, 然后按偏移量读取多个值, 避免多次 DLL 调用。
    Map<Short,byte[]>
    BatchReadPooled(short[] slaveIndices, int[] expectedSizes)
    执行批量读取(复用 ByteBuffer,减少内存分配) 对应 C# BatchReadPooled
    int
    BatchWrite(int[] offsets, byte[][] values)
    批量写入多个 PDO 值 (高性能, 直接写入 IOmap) 通过 GetIO 获取输出数据指针, 然后按偏移量写入多个值。
    int
    BatchWritePooled(short[] slaveIndices, byte[][] dataList)
    执行批量写入(复用内部缓冲区) 对应 C# BatchWritePooled
    boolean
    检查 PDO 数据是否发生变化(自上次调用后).
    static byte[]
    EnsureCapacity(byte[] current, int requiredSize)
    确保 buffer 足够大 (对应 C# EnsureCapacity)
    int
    获取本从站 PDO 错误计数.
    int
    获取本从站 PDO 预期数据大小(输入 + 输出总字节数).
    获取输入数据的 ByteBuffer (零拷贝访问) 对应 C# GetInputDataSpan / Python get_input_memoryview
    获取输出数据的 ByteBuffer (零拷贝访问) 对应 C# GetOutputDataSpan / Python get_output_memoryview
    com.sun.jna.Pointer
    获取从站的 PDO 性能统计 对应 C# GetPerformanceStats
    InputArray(int length)
    获取输入 PDO 数组实例 (零拷贝)
    boolean
    检查 PDO 数据是否有效(已映射到过程映像, 输入或输出字节数 > 0).
    OutputArray(int length)
    获取输出 PDO 数组实例 (零拷贝)
    short
    pdoReadInt16(int offset)
    类型化读取 PDO (int16).
    int
    pdoReadInt32(int offset)
    类型化读取 PDO (int32).
    byte
    pdoReadInt8(int offset)
    类型化读取 PDO (int8).
    short
    pdoReadUint16(int offset)
    类型化读取 PDO (uint16).
    int
    pdoReadUint32(int offset)
    类型化读取 PDO (uint32).
    byte
    pdoReadUint8(int offset)
    类型化读取 PDO (uint8).
    void
    pdoWriteInt16(int offset, short value)
    类型化写入 PDO (int16).
    void
    pdoWriteInt32(int offset, int value)
    类型化写入 PDO (int32).
    void
    pdoWriteInt8(int offset, byte value)
    类型化写入 PDO (int8).
    void
    pdoWriteUint16(int offset, short value)
    类型化写入 PDO (uint16).
    void
    pdoWriteUint32(int offset, int value)
    类型化写入 PDO (uint32).
    void
    pdoWriteUint8(int offset, byte value)
    类型化写入 PDO (uint8).
    int
    ReadInputDataDirect(byte[] buffer)
    读取全部输入数据
    int
    ReadInputDataDirect(byte[] buffer, int offset, int count)
    读取输入数据 (从 IOmap 直接读取)
    float
    readInputF32(int offset)
    按偏移量读取输入数据 (float32)
    short
    readInputI16(int offset)
    按偏移量读取输入数据 (int16)
    int
    readInputI32(int offset)
    按偏移量读取输入数据 (int32)
    byte
    readInputI8(int offset)
    按偏移量读取输入数据 (int8, 使用 U8 读取后转为有符号)
    int
    ReadInputToBuffer(byte[] buf)
    读取 PDO 输入数据到用户提供的 buffer (对应 C# ReadInputDataToSpan)
    short
    readInputU16(int offset)
    按偏移量读取输入数据 (uint16)
    int
    readInputU32(int offset)
    按偏移量读取输入数据 (uint32)
    byte
    readInputU8(int offset)
    按偏移量读取输入数据 (uint8)
    void
    重置从站的性能统计 对应 C# ResetPerformanceStats
    boolean
    WriteFromTyped(byte[] data, int byteOffset)
    从类型化数据写入 PDO 输出 (对应 C# WriteFromBaseData)
    int
    WriteOutputDataDirect(byte[] buffer)
    写入全部输出数据
    int
    WriteOutputDataDirect(byte[] buffer, int offset, int count)
    写入输出数据 (直接写入 IOmap)
    boolean
    writeOutputF32(int offset, float value)
    按偏移量写入输出数据 (float32)
    int
    从用户 buffer 写入 PDO 输出数据 (对应 C# WriteOutputDataFromSpan)
    boolean
    writeOutputI16(int offset, short value)
    按偏移量写入输出数据 (int16)
    boolean
    writeOutputI32(int offset, int value)
    按偏移量写入输出数据 (int32)
    void
    writeOutputI8(int offset, byte value)
    按偏移量写入输出数据 (int8, 使用 U8 写入)
    boolean
    writeOutputU16(int offset, short value)
    按偏移量写入输出数据 (uint16)
    boolean
    writeOutputU32(int offset, int value)
    按偏移量写入输出数据 (uint32)
    boolean
    writeOutputU8(int offset, byte value)
    按偏移量写入输出数据 (uint8)

    从类继承的方法 java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • 构造器详细资料

    • PDO

      public PDO(short masterIndex, short slaveIndex)
  • 方法详细资料

    • ReadInputDataDirect

      public int ReadInputDataDirect(byte[] buffer, int offset, int count)
      读取输入数据 (从 IOmap 直接读取)
      参数:
      buffer - 目标缓冲区
      offset - 目标缓冲区偏移
      count - 要读取的字节数, 0=全部
      返回:
      实际读取的字节数
    • ReadInputDataDirect

      public int ReadInputDataDirect(byte[] buffer)
      读取全部输入数据
    • WriteOutputDataDirect

      public int WriteOutputDataDirect(byte[] buffer, int offset, int count)
      写入输出数据 (直接写入 IOmap)
      参数:
      buffer - 源缓冲区
      offset - 源缓冲区偏移
      count - 要写入的字节数, 0=全部
      返回:
      实际写入的字节数
    • WriteOutputDataDirect

      public int WriteOutputDataDirect(byte[] buffer)
      写入全部输出数据
    • InputArray

      public PDO.PDOArrayInstance InputArray(int length)
      获取输入 PDO 数组实例 (零拷贝)
      参数:
      length - 输入数据字节数
      返回:
      PDOArrayInstance 实例
    • OutputArray

      public PDO.PDOArrayInstance OutputArray(int length)
      获取输出 PDO 数组实例 (零拷贝)
      参数:
      length - 输出数据字节数
      返回:
      PDOArrayInstance 实例
    • AvgCycleTimeNs

      public long AvgCycleTimeNs()
      获取本从站 PDO 平均周期时间(纳秒).

      从 GetPDOStats 返回的 pdo_stats_t.avg_cycle_time_ns 读取.

    • ErrorCount

      public int ErrorCount()
      获取本从站 PDO 错误计数.

      从 GetPDOStats 返回的 pdo_stats_t.error_count 读取.

    • IsValid

      public boolean IsValid()
      检查 PDO 数据是否有效(已映射到过程映像, 输入或输出字节数 > 0).

      从真实导出的 GetSlaveInputBytes/GetSlaveOutputBytes 派生.

    • Changed

      public boolean Changed()
      检查 PDO 数据是否发生变化(自上次调用后).

      [审计修复 2026-05-20] native 无 IsPDOChanged 导出, 诚实返回 false. 如需变化检测请自行对 InputArray(int) 做帧间 diff.

    • ExpectedSize

      public int ExpectedSize()
      获取本从站 PDO 预期数据大小(输入 + 输出总字节数).

      从真实导出的 GetSlaveInputBytes/GetSlaveOutputBytes 派生.

    • BatchRead

      public ByteBuffer[] BatchRead(int[] offsets, int[] sizes)
      批量读取多个 PDO 值 (高性能, 使用 ByteBuffer) 通过 GetIO 获取输入数据指针, 然后按偏移量读取多个值, 避免多次 DLL 调用。
      参数:
      offsets - 各 PDO 项在输入数据区的字节偏移
      sizes - 各 PDO 项的字节长度
      返回:
      ByteBuffer 数组, 每项对应一个 PDO 值; 读取失败的项为 null
    • BatchWrite

      public int BatchWrite(int[] offsets, byte[][] values)
      批量写入多个 PDO 值 (高性能, 直接写入 IOmap) 通过 GetIO 获取输出数据指针, 然后按偏移量写入多个值。
      参数:
      offsets - 各 PDO 项在输出数据区的字节偏移
      values - 各 PDO 项要写入的字节数组
      返回:
      成功写入的 PDO 项数量
    • GetPerformanceStats

      public com.sun.jna.Pointer GetPerformanceStats()
      获取从站的 PDO 性能统计 对应 C# GetPerformanceStats
      返回:
      性能统计指针, null 表示不可用
    • ResetPerformanceStats

      public void ResetPerformanceStats()
      重置从站的性能统计 对应 C# ResetPerformanceStats
    • GetInputByteBuffer

      public ByteBuffer GetInputByteBuffer()
      获取输入数据的 ByteBuffer (零拷贝访问) 对应 C# GetInputDataSpan / Python get_input_memoryview
      返回:
      输入数据的 ByteBuffer, 失败返回空 ByteBuffer
    • GetOutputByteBuffer

      public ByteBuffer GetOutputByteBuffer()
      获取输出数据的 ByteBuffer (零拷贝访问) 对应 C# GetOutputDataSpan / Python get_output_memoryview
      返回:
      输出数据的 ByteBuffer, 失败返回空 ByteBuffer
    • BatchReadPooled

      public Map<Short,byte[]> BatchReadPooled(short[] slaveIndices, int[] expectedSizes)
      执行批量读取(复用 ByteBuffer,减少内存分配) 对应 C# BatchReadPooled
      参数:
      slaveIndices - 从站索引数组
      expectedSizes - 预期数据大小数组
      返回:
      以从站索引为键的数据 Map
    • BatchWritePooled

      public int BatchWritePooled(short[] slaveIndices, byte[][] dataList)
      执行批量写入(复用内部缓冲区) 对应 C# BatchWritePooled
      参数:
      slaveIndices - 从站索引数组
      dataList - 要写入的数据数组
      返回:
      成功写入的从站数量
    • AsBuffer

      public ByteBuffer AsBuffer(boolean isInput)
      获取 PDO 数据区的 ByteBuffer (零拷贝, 对应 C# AsSpan)
      参数:
      isInput - true=输入数据, false=输出数据
      返回:
      ByteBuffer (小端序), 失败返回空 buffer
    • ReadInputToBuffer

      public int ReadInputToBuffer(byte[] buf)
      读取 PDO 输入数据到用户提供的 buffer (对应 C# ReadInputDataToSpan)
      参数:
      buf - 目标缓冲区
      返回:
      实际读取的字节数
    • WriteOutputFromBuffer

      public int WriteOutputFromBuffer(byte[] buf)
      从用户 buffer 写入 PDO 输出数据 (对应 C# WriteOutputDataFromSpan)
      参数:
      buf - 源缓冲区
      返回:
      实际写入的字节数
    • WriteFromTyped

      public boolean WriteFromTyped(byte[] data, int byteOffset)
      从类型化数据写入 PDO 输出 (对应 C# WriteFromBaseData)
      参数:
      data - 要写入的字节数据
      byteOffset - 输出区偏移
      返回:
      是否成功
    • readInputI8

      public byte readInputI8(int offset)
      按偏移量读取输入数据 (int8, 使用 U8 读取后转为有符号)
      参数:
      offset - 偏移量 (字节)
      返回:
      读取的值
    • readInputU8

      public byte readInputU8(int offset)
      按偏移量读取输入数据 (uint8)
      参数:
      offset - 偏移量 (字节)
      返回:
      读取的值
    • readInputI16

      public short readInputI16(int offset)
      按偏移量读取输入数据 (int16)
      参数:
      offset - 偏移量 (字节)
      返回:
      读取的值
    • readInputU16

      public short readInputU16(int offset)
      按偏移量读取输入数据 (uint16)
      参数:
      offset - 偏移量 (字节)
      返回:
      读取的值
    • readInputI32

      public int readInputI32(int offset)
      按偏移量读取输入数据 (int32)
      参数:
      offset - 偏移量 (字节)
      返回:
      读取的值
    • readInputU32

      public int readInputU32(int offset)
      按偏移量读取输入数据 (uint32)
      参数:
      offset - 偏移量 (字节)
      返回:
      读取的值
    • readInputF32

      public float readInputF32(int offset)
      按偏移量读取输入数据 (float32)
      参数:
      offset - 偏移量 (字节)
      返回:
      读取的值
    • writeOutputI8

      public void writeOutputI8(int offset, byte value)
      按偏移量写入输出数据 (int8, 使用 U8 写入)
      参数:
      offset - 偏移量 (字节)
      value - 要写入的值
    • writeOutputU8

      public boolean writeOutputU8(int offset, byte value)
      按偏移量写入输出数据 (uint8)
      参数:
      offset - 偏移量 (字节)
      value - 要写入的值
      返回:
      是否成功
    • writeOutputI16

      public boolean writeOutputI16(int offset, short value)
      按偏移量写入输出数据 (int16)
      参数:
      offset - 偏移量 (字节)
      value - 要写入的值
      返回:
      是否成功
    • writeOutputU16

      public boolean writeOutputU16(int offset, short value)
      按偏移量写入输出数据 (uint16)
      参数:
      offset - 偏移量 (字节)
      value - 要写入的值
      返回:
      是否成功
    • writeOutputI32

      public boolean writeOutputI32(int offset, int value)
      按偏移量写入输出数据 (int32)
      参数:
      offset - 偏移量 (字节)
      value - 要写入的值
      返回:
      是否成功
    • writeOutputU32

      public boolean writeOutputU32(int offset, int value)
      按偏移量写入输出数据 (uint32)
      参数:
      offset - 偏移量 (字节)
      value - 要写入的值
      返回:
      是否成功
    • writeOutputF32

      public boolean writeOutputF32(int offset, float value)
      按偏移量写入输出数据 (float32)
      参数:
      offset - 偏移量 (字节)
      value - 要写入的值
      返回:
      是否成功
    • pdoReadInt8

      public byte pdoReadInt8(int offset)
      类型化读取 PDO (int8). @param offset 字节偏移 @return 读取的值 (有符号)
    • pdoReadInt16

      public short pdoReadInt16(int offset)
      类型化读取 PDO (int16). @param offset 字节偏移 @return 读取的值
    • pdoReadInt32

      public int pdoReadInt32(int offset)
      类型化读取 PDO (int32). @param offset 字节偏移 @return 读取的值
    • pdoReadUint8

      public byte pdoReadUint8(int offset)
      类型化读取 PDO (uint8). Java byte 有符号, 上层 & 0xFF. @param offset 字节偏移 @return 读取的值
    • pdoReadUint16

      public short pdoReadUint16(int offset)
      类型化读取 PDO (uint16). Java short 有符号, 上层 & 0xFFFF. @param offset 字节偏移 @return 读取的值
    • pdoReadUint32

      public int pdoReadUint32(int offset)
      类型化读取 PDO (uint32). Java int 有符号, 上层 & 0xFFFFFFFFL. @param offset 字节偏移 @return 读取的值
    • pdoWriteInt8

      public void pdoWriteInt8(int offset, byte value)
      类型化写入 PDO (int8). @param offset 字节偏移 @param value 写入值
    • pdoWriteInt16

      public void pdoWriteInt16(int offset, short value)
      类型化写入 PDO (int16). @param offset 字节偏移 @param value 写入值
    • pdoWriteInt32

      public void pdoWriteInt32(int offset, int value)
      类型化写入 PDO (int32). @param offset 字节偏移 @param value 写入值
    • pdoWriteUint8

      public void pdoWriteUint8(int offset, byte value)
      类型化写入 PDO (uint8). @param offset 字节偏移 @param value 写入值 (取低 8 位)
    • pdoWriteUint16

      public void pdoWriteUint16(int offset, short value)
      类型化写入 PDO (uint16). @param offset 字节偏移 @param value 写入值 (取低 16 位)
    • pdoWriteUint32

      public void pdoWriteUint32(int offset, int value)
      类型化写入 PDO (uint32). @param offset 字节偏移 @param value 写入值
    • EnsureCapacity

      public static byte[] EnsureCapacity(byte[] current, int requiredSize)
      确保 buffer 足够大 (对应 C# EnsureCapacity)
      参数:
      current - 当前 buffer
      requiredSize - 所需最小大小
      返回:
      满足大小要求的 buffer