IO-Control-API.md
9.0 KB
IO控制 API 文档
文档信息
| 项目 | 内容 |
|---|---|
| 版本 | 1.1.0 |
| 状态 | 正式版 |
| 编写日期 | 2025-12-18 |
| 最后更新 | 2025-12-18 |
| 编写人 | MIMO 开发团队 |
更新日志
| 版本 | 日期 | 更新内容 | 编写人 |
|---|---|---|---|
| 1.1.0 | 2025-12-18 | 根据实际代码更新接口定义 | MIMO 开发团队 |
| 1.0.0 | 2025-12-16 | 初始版本 | MIMO 开发团队 |
1. 概述
本文档详细介绍了 MIMO 系统中 IO 控制相关的 API 接口,包括 IO 管理器接口 I_IOManager。这些 API 提供了对系统输入输出信号的统一管理和控制功能。
2. IO管理器接口
2.1 I_IOManager 接口
I_IOManager 是 IO 控制模块的核心接口,定义了对 IO 信号进行管理和操作的基本方法。
namespace DeviceLibrary
{
public interface I_IOManager
{
/// <summary>
/// 连接IO设备列表
/// </summary>
bool ConnectionIOList(List<string> dIODeviceNameList);
/// <summary>
/// 读取所有DI信号
/// </summary>
void ReadAllDI(string deviceName, byte slaveId);
/// <summary>
/// 读取所有DO信号
/// </summary>
void ReadAllDO(string deviceName, byte slaveId);
/// <summary>
/// 写入单个DO信号 (带延时)
/// </summary>
void WriteSingleDO(string deviceName, byte slaveId, ushort index, IO_VALUE value, int time);
/// <summary>
/// 写入单个DO信号
/// </summary>
void WriteSingleDO(string deviceName, byte slaveId, ushort index, IO_VALUE value);
/// <summary>
/// 获取DI信号值
/// </summary>
IO_VALUE GetDIValue(string deviceName, byte slaveID, ushort v);
/// <summary>
/// 获取DO信号值
/// </summary>
IO_VALUE GetDOValue(string deviceName, byte slaveID, ushort v);
/// <summary>
/// 根据配置对象获取IO值
/// </summary>
IO_VALUE GetIOValue(ConfigIO configIO);
/// <summary>
/// 关闭所有DO
/// </summary>
void CloseAllDO();
/// <summary>
/// 关闭所有连接
/// </summary>
void CloseAllConnection();
}
}
2.2 数据类型
IO_VALUE 枚举
public enum IO_VALUE
{
LOW = 0,
HIGH = 1,
None = 2
}
4. 监控接口
4.1 IOMonitor 类
IOMonitor 类用于监控 IO 状态变化,提供实时的 IO 状态更新和事件通知。
public class IOMonitor
{
/// <summary>
/// 初始化IO监控器
/// </summary>
/// <param name="ioManager">IO管理器实例</param>
public IOMonitor(I_IOManager ioManager);
/// <summary>
/// 开始监控
/// </summary>
/// <param name="scanIntervalMs">扫描间隔(毫秒)</param>
public void StartMonitoring(int scanIntervalMs = 50);
/// <summary>
/// 停止监控
/// </summary>
public void StopMonitoring();
/// <summary>
/// IO状态变化事件
/// </summary>
public event Action<int, bool, bool> IOStateChanged; // 参数:IO点ID,旧状态,新状态
/// <summary>
/// 监控状态事件
/// </summary>
public event Action<bool> MonitoringStateChanged; // 参数:是否正在监控
}
5. 具体实现类
5.1 IOManager 类
IOManager 是 I_IOManager 接口的具体实现类,负责实际的 IO 控制操作。
public class IOManager : I_IOManager
{
// 实现 I_IOManager 接口的所有方法
// ...
}
6. 异常处理
IO 控制模块定义了特定的异常类型,用于表示不同类型的 IO 操作异常:
-
IOInitializationException:IO 初始化异常 -
IOCommunicationException:IO 通信异常 -
IOOperationException:IO 操作异常 -
IOTimeoutException:IO 操作超时异常 -
IOConfigException:IO 配置异常
这些异常都继承自 DeviceException 基类。
7. 使用示例
7.1 基本用法
// 创建并初始化IO管理器
I_IOManager ioManager = new IOManager();
if (ioManager.Initialize())
{
try
{
// 读取输入点10的状态
bool inputState = ioManager.ReadInput(10);
Console.WriteLine($"Input 10 state: {inputState}");
// 写入输出点5为true
if (ioManager.WriteOutput(5, true))
{
Console.WriteLine("Output 5 set to true successfully.");
}
// 延时1秒后将输出点5设为false
Thread.Sleep(1000);
ioManager.WriteOutput(5, false);
}
catch (IOException ex)
{
Console.WriteLine($"IO error: {ex.Message}");
}
finally
{
// 关闭IO管理器
ioManager.Close();
}
}
else
{
Console.WriteLine("Failed to initialize IO manager.");
}
7.2 事件处理
// 创建并初始化IO管理器
I_IOManager ioManager = new IOManager();
if (ioManager.Initialize())
{
// 注册IO状态变化事件处理函数
ioManager.RegisterIOChangeHandler(10, (ioId, value) => {
Console.WriteLine($"IO {ioId} changed to: {value}");
});
// 注册所有IO点的变化事件(-1表示所有IO点)
ioManager.RegisterIOChangeHandler(-1, (ioId, value) => {
Console.WriteLine($"[Global] IO {ioId} changed to: {value}");
});
// 执行IO操作
// ...
}
7.3 批量操作
// 创建并初始化IO管理器
I_IOManager ioManager = new IOManager();
if (ioManager.Initialize())
{
try
{
// 批量读取输入点状态
List<int> inputIds = new List<int> { 10, 11, 12, 13 };
Dictionary<int, bool> inputStates = ioManager.ReadInputs(inputIds);
foreach (var kvp in inputStates)
{
Console.WriteLine($"Input {kvp.Key} state: {kvp.Value}");
}
// 批量写入输出点状态
Dictionary<int, bool> outputValues = new Dictionary<int, bool>
{
{ 1, true },
{ 2, false },
{ 3, true },
{ 4, false }
};
if (ioManager.WriteOutputs(outputValues))
{
Console.WriteLine("All outputs written successfully.");
}
}
catch (IOException ex)
{
Console.WriteLine($"IO batch operation error: {ex.Message}");
}
finally
{
// 关闭IO管理器
ioManager.Close();
}
}
7.4 高级功能
// 创建并初始化IO管理器
I_IOManager ioManager = new IOManager();
if (ioManager.Initialize())
{
try
{
// 设置输出点闪烁(亮500ms,灭500ms,闪烁5次)
ioManager.BlinkOutput(5, 500, 500, 5);
// 延时输出(5秒后将输出点6设为true)
ioManager.DelayedWriteOutput(6, true, 5000);
Console.WriteLine("Advanced IO functions set up successfully.");
}
catch (IOException ex)
{
Console.WriteLine($"Advanced IO error: {ex.Message}");
}
finally
{
// 关闭IO管理器前停止所有闪烁
ioManager.StopBlinkOutput();
// 关闭IO管理器
ioManager.Close();
}
}
7.5 使用IO监控器
// 创建并初始化IO管理器
I_IOManager ioManager = new IOManager();
if (ioManager.Initialize())
{
// 创建IO监控器
IOMonitor ioMonitor = new IOMonitor(ioManager);
// 注册IO状态变化事件
ioMonitor.IOStateChanged += (ioId, oldValue, newValue) => {
Console.WriteLine($"IO {ioId} changed from {oldValue} to {newValue}");
};
// 开始监控,扫描间隔为100ms
ioMonitor.StartMonitoring(100);
Console.WriteLine("IO monitoring started. Press any key to stop.");
Console.ReadKey();
// 停止监控
ioMonitor.StopMonitoring();
// 关闭IO管理器
ioManager.Close();
}
8. 最佳实践
初始化和资源释放:始终确保在使用 IO 管理器后正确关闭它,以释放资源。
错误处理:捕获并处理所有可能的 IO 操作异常,确保系统稳定运行。
批量操作:对于多个 IO 点的操作,优先使用批量操作方法,提高效率。
事件驱动:使用事件机制响应 IO 状态变化,避免频繁轮询。
命名规范:使用有意义的 IO 点名,便于系统维护和故障排查。
配置管理:通过配置文件管理 IO 映射关系,提高系统的可配置性和可维护性。
9. 注意事项
IO 操作通常是实时性要求较高的任务,应避免在主线程中频繁执行 IO 操作。
对于需要实时监控的场景,建议使用
IOMonitor类而不是自行实现轮询逻辑。批量读写操作比单个操作更高效,特别是在需要同时访问多个 IO 点时。
某些高级功能(如闪烁、延时输出)可能需要占用额外的系统资源,应谨慎使用。
在多线程环境中使用 IO 管理器时,需要注意线程安全问题。