#ifndef CCLINKIECONTROL_H #define CCLINKIECONTROL_H #include "PerformanceMelsec.h" enum class CCLinkIEControlMode : short { UNKNOWN = 0x0194, // 未知 ONLINE = 0x0000, // 在线 OFFLINE = 0x0002, // 离线 INTER_STATION_TEST = 0x0005, // 站间测试 LINE_TEST = 0x0006, // 线路测试 LOOPBACK_TEST = 0x0007, // 自回送测试 HW_TEST = 0x0009, // H/W测试 BUS_IF_TEST = 0x000E // 总线I/F测试 }; class CCCLinkIEControl final : public CPerformanceMelsec { public: CCCLinkIEControl(); ~CCCLinkIEControl() override; struct LedStatus { bool bExtPw; // 外部电源状态 (b15) bool bRd; // 数据接收状态 (b6) bool bDLnk; // 数据链接状态 (b5) bool bPrm; // 管理功能状态 (b4) bool bErr; // 错误状态 (b3) bool bSd; // 数据发送状态 (b2) bool bMode; // 动作模式 (b1) bool bRun; // 运行状态 (b0) // 转换为字符串,用于调试 std::string ToString() const { std::ostringstream oss; oss << "CC-Link IE Control Network LED Status: {" << "\n Ext Power: " << (bExtPw ? "ON" : "OFF") << "\n Receive Data: " << (bRd ? "Receiving" : "Not Receiving") << "\n Data Link: " << (bDLnk ? "Linked" : "Not Linked") << "\n Management: " << (bPrm ? "Managing" : "Not Managing") << "\n Error: " << (bErr ? "Error Detected" : "No Error") << "\n Send Data: " << (bSd ? "Sending" : "Not Sending") << "\n Mode: " << (bMode ? "Executing" : "Not Executing") << "\n Run: " << (bRun ? "Running" : "Stopped") << "\n}"; return oss.str(); } }; // 读取目标站点CPU类型 // short ReadCPUCodeEx(const StationIdentifier& station, short& nCPUCode); // 板模式获取/设置 int SetBoardModeEx(CCLinkIEControlMode mode); CCLinkIEControlMode GetBoardModeEx(); // 获取板状态 int GetBoardStatusEx(BoardStatus& status); // 读取LED状态 int ReadLedStatus(LedStatus& outLedStatus); int ReadDataEx(const StationIdentifier& station, DeviceType enDevType, long devNo, long size, void* pData); private: static CCLinkIEControlMode ConvertToCCLinkIEControlMode(short nMode); static int ValidateBoardStatus(const BoardStatus& status); }; #endif //CCLINKIECONTROL_H