#ifndef CHANNELMANAGER_H #define CHANNELMANAGER_H #include #include #include #include /** * @brief 通道管理器 * * 管理校验仪的输入/输出通道状态 * - 输入通道1: 4线制,支持所有测量功能 * - 输入通道2: 2线制,支持基本测量 * - 输出通道1/2: 2线制,支持电压/电流/波形输出 */ class ChannelManager : public QObject { Q_OBJECT public: enum ChannelType { INPUT_CHANNEL, OUTPUT_CHANNEL }; enum ChannelId { INPUT_CHANNEL_1 = 1, INPUT_CHANNEL_2 = 2, OUTPUT_CHANNEL_1 = 3, OUTPUT_CHANNEL_2 = 4 }; enum OperationType { // 通用状态 NONE, // 输入通道操作状态 VOLTAGE_MEASUREMENT, // 电压测量 MV_MEASUREMENT, // mV测量 MA_MEASUREMENT, // mA测量 AC_MEASUREMENT, // 交流测量 RESISTANCE_MEASUREMENT, // 电阻测量(含热电阻及多线制) FREQUENCY_MEASUREMENT, // 频率测量 SWITCH_MEASUREMENT, // 开关量测量 INSULATION_MEASUREMENT, // 绝缘电阻测量 // 输出通道操作状态 VOLTAGE_OUTPUT, // 电压输出 MV_OUTPUT, // mV输出 MA_OUTPUT, // mA输出 WAVEFORM_OUTPUT, // 波形输出 RESISTANCE_SIMULATION // 电阻模拟(含热电阻及多线制) }; enum ConnectionType { TWO_WIRE, THREE_WIRE, FOUR_WIRE }; struct ChannelCapability { ChannelType type; int maxWires; QStringList wireColors; QList supportedConnections; QList supportedOperations; }; struct OperationDetails { OperationType operation; QString description; ConnectionType connectionType; }; static ChannelManager *instance(); // 通道状态查询 bool isChannelAvailable(ChannelId channel) const; bool canChannelSupport(ChannelId channel, OperationType operation, ConnectionType connection = TWO_WIRE) const; // 通道占用/释放 bool occupyChannel(ChannelId channel, OperationType operation, const QString &description = QString(), ConnectionType connectionType = TWO_WIRE); void releaseChannel(ChannelId channel); // 通道信息获取 OperationType getChannelOperation(ChannelId channel) const; QString getChannelDescription(ChannelId channel) const; OperationDetails getChannelOperationDetails(ChannelId channel) const; ChannelCapability getChannelCapability(ChannelId channel) const; QList getAvailableChannels(ChannelType type) const; QList getSupportedOperations(ChannelId channel) const; // 显示名称 QString getOperationDisplayName(OperationType operation) const; QString getConnectionTypeDisplayName(ConnectionType connection) const; QString getDetailedOperationDescription(const OperationDetails &details) const; QString getChannelDisplayName(ChannelId channel) const; // 类型判断 bool isInputChannelOperation(OperationType operation) const; bool isOutputChannelOperation(OperationType operation) const; // 查询 QList getChannelsWithOperation(OperationType operation) const; signals: void channelStatusChanged(ChannelId channel, OperationType operation, const QString &description); void channelReleased(ChannelId channel); private: explicit ChannelManager(QObject *parent = nullptr); void initializeChannelCapabilities(); struct ChannelStatus { bool occupied; OperationDetails operationDetails; QDateTime occupiedTime; }; QMap m_channelStatus; QMap m_channelCapabilities; static ChannelManager *m_instance; }; #endif // CHANNELMANAGER_H