DeviceLibrary-API.md
7.9 KB
DeviceLibrary API 文档
1. 概述
DeviceLibrary 是 MIMO 系统中的设备控制层核心库,提供了统一的设备抽象和控制接口,支持各类工业设备的接入和控制。本文档详细介绍了 DeviceLibrary 提供的主要 API 接口及其使用方法。
2. 核心接口
2.1 IAxisManager 接口
轴管理器接口,提供对运动轴的管理和控制功能。
public interface IAxisManager
{
/// <summary>
/// 检查轴是否使能
/// </summary>
bool IsServeoOn(string portName, short slvAddr);
/// <summary>
/// 打开板卡/控制器
/// </summary>
bool OpenCard();
/// <summary>
/// 关闭板卡/控制器
/// </summary>
bool CloseCard();
/// <summary>
/// 回零运动
/// </summary>
bool HomeMove(string portName, short slvAddr, int highVel, int lowVel, int acc);
/// <summary>
/// 绝对运动
/// </summary>
void AbsMove(string portName, short slvAddr, int targetPosition, int targetSpeed, int ptpAcc, int ptpDec);
}
2.2 I_IOManager 接口
IO 管理器接口,提供对 IO 信号的管理和控制功能。
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 WriteSingleDO(string deviceName, byte slaveId, ushort index, IO_VALUE value);
/// <summary>
/// 获取DI信号值
/// </summary>
IO_VALUE GetDIValue(string deviceName, byte slaveID, ushort v);
}
2.3 ISafetyDevice 接口
安全设备接口,提供对安全相关设备的暂停和恢复功能。
public interface ISafetyDevice
{
/// <summary>
/// 暂停设备
/// </summary>
void Pause();
/// <summary>
/// 恢复设备
/// </summary>
void Resume();
}
2.4 IRobot 接口
机器人设备接口,提供对机器人设备的管理和控制功能。
public interface IRobot
{
/// <summary>
/// 机器人配置
/// </summary>
Robot_Config Config { get; set; }
/// <summary>
/// 机器人名称
/// </summary>
string Name { get; set; }
/// <summary>
/// 是否可以运行
/// </summary>
bool canRunning { get; set; }
/// <summary>
/// 是否忙碌
/// </summary>
bool isBusy { get; set; }
/// <summary>
/// 是否报警
/// </summary>
bool isAlarm { get; set; }
/// <summary>
/// 运行状态
/// </summary>
RunStatus runStatus { get; set; }
/// <summary>
/// 运行
/// </summary>
void Run();
}
2.5 RunStatus 枚举
机器人运行状态枚举。
public enum RunStatus
{
Stop,
Running,
HomeReset
}
3. 具体实现类
3.1 AxisManager 类
轴管理器的具体实现,提供对运动轴的管理和控制。
public class AxisManager : IAxisManager
{
// 实现 IAxisManager 接口的所有方法
// ...
}
3.2 IOManager 类
IO 管理器的具体实现,提供对 IO 信号的管理和控制。
public class IOManager : I_IOManager
{
// 实现 I_IOManager 接口的所有方法
// ...
}
3.3 HIKCamera 类
海康相机设备的封装实现。
public class HIKCamera
{
/// <summary>
/// 相机名称
/// </summary>
public string Name;
/// <summary>
/// 设备名称
/// </summary>
public string DeviceName;
/// <summary>
/// 图像显示控件
/// </summary>
public PictureBox picture;
/// <summary>
/// 相机事件,当采集到图像时触发
/// </summary>
public event EventHandler<Bitmap> camera_event;
}
3.4 OKLE_WeightSensor 类
OKLE系列重量传感器的实现,用于轴负载检测。
public class OKLE_WeightSensor
{
/// <summary>
/// 初始化传感器
/// </summary>
public bool Init();
/// <summary>
/// 端口是否打开
/// </summary>
public bool IsPortOpen { get; }
/// <summary>
/// 关闭传感器
/// </summary>
public void Close();
/// <summary>
/// 获取当前重量值
/// </summary>
public double GetWeight();
/// <summary>
/// 获取峰值重量
/// </summary>
public double PeakWeight();
/// <summary>
/// 设置报警阈值
/// </summary>
public bool SetAlarmWeight(double kg);
}
4. 设备通信模块
4.1 ServerCommunication 类
与服务器通信的模块,实现数据上传和状态同步功能。
public class ServerCommunication
{
/// <summary>
/// 开启服务器连接定时器
/// </summary>
public void StartConnectServer();
/// <summary>
/// 停止服务器连接
/// </summary>
public void StopConnectServer();
/// <summary>
/// 发送库位状态
/// </summary>
/// <param name="posid">库位ID</param>
/// <param name="storeStatus">库位状态</param>
public bool SendStoreState(string posid, StoreStatus storeStatus);
/// <summary>
/// 发送流水线状态(心跳)
/// </summary>
public void SendLineStatus();
}
5. 辅助工具类
5.1 CodeManager 类
条码和相机管理工具类。
public class CodeManager
{
/// <summary>
/// 加载配置
/// </summary>
public static void LoadConfig();
/// <summary>
/// 加载相机
/// </summary>
public static void LoadCamera(bool isReLoad);
/// <summary>
/// 扫描条码
/// </summary>
public static List<CodeInfo> CameraScan(List<string> cameraNameList);
/// <summary>
/// 关闭指定相机
/// </summary>
public static void CloseCamera(string cameraName);
}
5.2 ConfigHelper 类
配置管理工具类,提供配置文件的读取和保存功能。
public class ConfigHelper.Config
{
/// <summary>
/// 读取配置
/// </summary>
public static T Get<T>(string key, T defaultVal = default(T));
/// <summary>
/// 设置配置
/// </summary>
public static void Set<T>(string key, T value);
/// <summary>
/// 重载配置
/// </summary>
public static void ReloadConfig();
}
6. 异常处理
DeviceLibrary 定义了一系列自定义异常类,用于表示不同类型的设备操作异常:
-
DeviceInitializationException:设备初始化异常 -
DeviceCommunicationException:设备通信异常 -
DeviceOperationException:设备操作异常 -
DeviceTimeoutException:设备超时异常
这些异常继承自 DeviceException 基类,可以通过捕获基类来处理所有设备相关异常。
7. 使用示例
7.1 轴控制示例
// 假设已通过 Config 配置好轴参数
AxisBean axis = new AxisBean(axisConfig, "Robot1");
// 绝对运动到位置 1000
MoveInfo moveInfo = new MoveInfo("TestMove");
axis.AbsMove(moveInfo, 1000, 50); // 目标位置1000,速度50%
// 回零
axis.HomeMove(moveInfo);
// 检查是否在位
if (axis.IsOnSite(1000))
{
Console.WriteLine("Axis reached target.");
}
7.2 IO控制示例
// 读取DI信号
// 假设 deviceName="" (本地板卡), slaveId=0, index=10
IO_VALUE val = IOManager.GetDIValue("", 0, 10);
if (val == IO_VALUE.HIGH)
{
Console.WriteLine("Input 10 is HIGH");
}
// 写入DO信号
// 假设 index=5
IOManager.SetDOValue("", 0, 5, IO_VALUE.HIGH);
8. 总结
DeviceLibrary 提供了丰富的设备控制和管理 API,支持各类工业设备的接入和控制。通过统一的接口设计和完善的异常处理机制,使得设备操作更加简单、可靠。开发者可以基于这些 API 快速构建自己的工业自动化应用。