当前位置:首页 > C++ > IEC104 > 正文内容

基于C++和Qt开发IEC104规约主站调试软件(第四章)

tiandi2025-09-10IEC10427


基于C++和Qt开发IEC104规约主站调试软件需要综合协议规范、多线程编程和GUI框架知识以及IEC104通讯规约相关知识,以下是分步骤实现方案:
最终成果展示: 最终成果
IEC104通讯规约知识学习:https://download.csdn.net/download/liangwwe0/90616493?spm=1011.2124.3001.6210
上一章内容回顾: IEC104主站解析遥信、遥测数据


1.创建遥控遥调命令下发对话框

(点击报文发送按钮弹出此对话框)
在这里插入图片描述

2.下发单点遥控功能(0x2D)

核心代码示例:

     
     int dataAddr = sendfui->dataAddrEdit->text().toInt();
     QString typeStr = sendfui->typeBox->currentText();
    int l=typeStr.indexOf('(');
    int r = typeStr.indexOf(')');
    int type = typeStr.mid(l+1,r-l-1).toInt();
    switch (type) {
    case C_SC_NA_1:
    {
        bool selectCommand = false;
        if(cmd){
            int state = MessageReminder("选择单点遥控执行方式","选择执行","立即执行","取消");
            if(state==1)
                selectCommand = true;
            else if(state==-1)
                return;
        }
        else if(!MessageReminder("从站返回单点遥控激活确认","确认","取消"))
                return;
        SingleCommand cmd = SingleCommand_create(nullptr, dataAddr, value.toBool(), selectCommand, IEC60870_QUALITY_GOOD);
        CS104_Connection_sendProcessCommand(m_iec104con, (IEC60870_5_TypeID)type, (CS101_CauseOfTransmission)cause,dataAddr, (InformationObject)cmd);
        SingleCommand_destroy(cmd);
        if(selectCommand)
            emit showMessageSignal(QString("类型:%1,执行方式:选择执行,原因:%2,地址:%3,值:%4,时间:%5").arg(typeStr).arg(causeStr).arg(dataAddr).arg(value.toBool()).arg(time),0);
        else
            emit showMessageSignal(QString("类型:%1,执行方式:立即执行,原因:%2,地址:%3,值:%4,时间:%5").arg(typeStr).arg(causeStr).arg(dataAddr).arg(value.toBool()).arg(time),0);
    }
        break;

单点遥控运行演示
在这里插入图片描述

3.归一化遥调设置(0x30)

核心代码示例:

 case C_SE_NA_1:
 {
    QVariant value = sendfui->valueEdit->text();   
 	MeasuredValueNormalized cmd = MeasuredValueNormalized_create(nullptr, dataAddr,value.toFloat(), IEC60870_QUALITY_GOOD);
    CS104_Connection_sendProcessCommand(m_iec104con, (IEC60870_5_TypeID)type, (CS101_CauseOfTransmission)cause,dataAddr, (InformationObject)cmd);
    MeasuredValueNormalized_destroy(cmd);
    emit showMessageSignal(QString("类型:%1,原因:%2,地址:%3,值:%4,时间:%5").arg(typeStr).arg(causeStr).arg(dataAddr).arg(value.toFloat()).arg(time),0);}
    break;

归一化值遥调设置运行演示
在这里插入图片描述

4.总结

本章主要描述IEC104主站软件遥控、遥调功能和部分核心代码,其它类型标识遥控遥调方法类似。
下期分享IEC104主站调试软件总召唤、时钟同步功能。


发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。