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 快速构建自己的工业自动化应用。