类 PDO
java.lang.Object
com.darra.ethercat.slave.PDO
高性能 PDO (过程数据对象) 访问
对齐 C# Slave/PDO.cs: 零拷贝指针、直接读写、PDOArrayInstance、PDODataItem
-
嵌套类概要
嵌套类修饰符和类型类说明static classPDO 数组实例 - 按字节索引访问 PDO 数据 对齐 C# PDOArrayInstancestatic class单个 PDO 数据项 - 类型化访问 对齐 C# PDODataItem: Content, AsInt16, AsInt32, AsFloat, AsDouble 等 -
构造器概要
构造器 -
方法概要
修饰符和类型方法说明AsBuffer(boolean isInput) 获取 PDO 数据区的 ByteBuffer (零拷贝, 对应 C# AsSpan)long获取本从站 PDO 平均周期时间(纳秒).BatchRead(int[] offsets, int[] sizes) 批量读取多个 PDO 值 (高性能, 使用 ByteBuffer) 通过 GetIO 获取输入数据指针, 然后按偏移量读取多个值, 避免多次 DLL 调用。BatchReadPooled(short[] slaveIndices, int[] expectedSizes) 执行批量读取(复用 ByteBuffer,减少内存分配) 对应 C# BatchReadPooledintBatchWrite(int[] offsets, byte[][] values) 批量写入多个 PDO 值 (高性能, 直接写入 IOmap) 通过 GetIO 获取输出数据指针, 然后按偏移量写入多个值。intBatchWritePooled(short[] slaveIndices, byte[][] dataList) 执行批量写入(复用内部缓冲区) 对应 C# BatchWritePooledbooleanChanged()检查 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_memoryviewcom.sun.jna.Pointer获取从站的 PDO 性能统计 对应 C# GetPerformanceStatsInputArray(int length) 获取输入 PDO 数组实例 (零拷贝)booleanIsValid()检查 PDO 数据是否有效(已映射到过程映像, 输入或输出字节数 > 0).OutputArray(int length) 获取输出 PDO 数组实例 (零拷贝)shortpdoReadInt16(int offset) 类型化读取 PDO (int16).intpdoReadInt32(int offset) 类型化读取 PDO (int32).bytepdoReadInt8(int offset) 类型化读取 PDO (int8).shortpdoReadUint16(int offset) 类型化读取 PDO (uint16).intpdoReadUint32(int offset) 类型化读取 PDO (uint32).bytepdoReadUint8(int offset) 类型化读取 PDO (uint8).voidpdoWriteInt16(int offset, short value) 类型化写入 PDO (int16).voidpdoWriteInt32(int offset, int value) 类型化写入 PDO (int32).voidpdoWriteInt8(int offset, byte value) 类型化写入 PDO (int8).voidpdoWriteUint16(int offset, short value) 类型化写入 PDO (uint16).voidpdoWriteUint32(int offset, int value) 类型化写入 PDO (uint32).voidpdoWriteUint8(int offset, byte value) 类型化写入 PDO (uint8).intReadInputDataDirect(byte[] buffer) 读取全部输入数据intReadInputDataDirect(byte[] buffer, int offset, int count) 读取输入数据 (从 IOmap 直接读取)floatreadInputF32(int offset) 按偏移量读取输入数据 (float32)shortreadInputI16(int offset) 按偏移量读取输入数据 (int16)intreadInputI32(int offset) 按偏移量读取输入数据 (int32)bytereadInputI8(int offset) 按偏移量读取输入数据 (int8, 使用 U8 读取后转为有符号)intReadInputToBuffer(byte[] buf) 读取 PDO 输入数据到用户提供的 buffer (对应 C# ReadInputDataToSpan)shortreadInputU16(int offset) 按偏移量读取输入数据 (uint16)intreadInputU32(int offset) 按偏移量读取输入数据 (uint32)bytereadInputU8(int offset) 按偏移量读取输入数据 (uint8)void重置从站的性能统计 对应 C# ResetPerformanceStatsbooleanWriteFromTyped(byte[] data, int byteOffset) 从类型化数据写入 PDO 输出 (对应 C# WriteFromBaseData)intWriteOutputDataDirect(byte[] buffer) 写入全部输出数据intWriteOutputDataDirect(byte[] buffer, int offset, int count) 写入输出数据 (直接写入 IOmap)booleanwriteOutputF32(int offset, float value) 按偏移量写入输出数据 (float32)intWriteOutputFromBuffer(byte[] buf) 从用户 buffer 写入 PDO 输出数据 (对应 C# WriteOutputDataFromSpan)booleanwriteOutputI16(int offset, short value) 按偏移量写入输出数据 (int16)booleanwriteOutputI32(int offset, int value) 按偏移量写入输出数据 (int32)voidwriteOutputI8(int offset, byte value) 按偏移量写入输出数据 (int8, 使用 U8 写入)booleanwriteOutputU16(int offset, short value) 按偏移量写入输出数据 (uint16)booleanwriteOutputU32(int offset, int value) 按偏移量写入输出数据 (uint32)booleanwriteOutputU8(int offset, byte value) 按偏移量写入输出数据 (uint8)
-
构造器详细资料
-
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
获取输入 PDO 数组实例 (零拷贝)- 参数:
length- 输入数据字节数- 返回:
- PDOArrayInstance 实例
-
OutputArray
获取输出 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
批量读取多个 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
获取输入数据的 ByteBuffer (零拷贝访问) 对应 C# GetInputDataSpan / Python get_input_memoryview- 返回:
- 输入数据的 ByteBuffer, 失败返回空 ByteBuffer
-
GetOutputByteBuffer
获取输出数据的 ByteBuffer (零拷贝访问) 对应 C# GetOutputDataSpan / Python get_output_memoryview- 返回:
- 输出数据的 ByteBuffer, 失败返回空 ByteBuffer
-
BatchReadPooled
执行批量读取(复用 ByteBuffer,减少内存分配) 对应 C# BatchReadPooled- 参数:
slaveIndices- 从站索引数组expectedSizes- 预期数据大小数组- 返回:
- 以从站索引为键的数据 Map
-
BatchWritePooled
public int BatchWritePooled(short[] slaveIndices, byte[][] dataList) 执行批量写入(复用内部缓冲区) 对应 C# BatchWritePooled- 参数:
slaveIndices- 从站索引数组dataList- 要写入的数据数组- 返回:
- 成功写入的从站数量
-
AsBuffer
获取 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- 当前 bufferrequiredSize- 所需最小大小- 返回:
- 满足大小要求的 buffer
-