uint8 frameType = frame.getFrameType(); if( frameType==FrameLink_Type_U ) { //通道测试确认帧 if( frame.getTestFrConf()==1 ) { m_Flag &= ~IEC104_FLAG_UT1; GetUpTime( &m_TimeOut_NoGram ); return; } //通道测试帧 if( frame.getTestFrAvai()!=0 ) { frame.setTestFrAvai( 0x00 ); frame.setTestFrConf( 0x01 ); KFprintf("%s:%d 104 m_iDataMgrNo=%d\n",__FILE__,__LINE__,m_env->m_iDataMgrNo); } //启动数据传输 if( frame.getStartDtAvai()!=0 ) { frame.setStartDtAvai( 0x00 ); frame.setStartDtConf( 0x01 ); KFprintf(KFPRINTF_LEVEL_IMPORTANT,"StartDt--- 开启应用数据传输 ---\n"); if (!m_env->m_104startdtresrt)//默认0 复位 { this->resetAnyway(); } if ( m_env->m_ClearSendQueFlag ) //默认0:不清空发送队列 { m_asduSendQue.ClearAllDataBuff(); } memset(m_sendBuf,0,MaxLen_Buf); this->m_env->m_TxBuf.ResetBuf(); m_Flag |= IEC104_FLAG_STARTDT; //设置STARDT标识 OutputLogMsgToLogFile("var/log/s104.log",320000,"%s:%d INFO! STARTDT! 104startdtresrt=%d ClearSendQueFlag=%d RtuNo=%d\n", __FILE__,__LINE__,m_env->m_104startdtresrt,m_env->m_ClearSendQueFlag,m_env->m_sRtuNo); //GetUpTime( &m_TimeOnStartDT ); //SysSleepMs(2,0); this->m_dataTransflag = 0x01; this->m_env->m_appLayer->StartDTProcess(); //ztn 20170719 add } //停止数据传输 if( frame.getStopDtAvai()!=0 ) { frame.setStopDtAvai( 0x00 ); frame.setStopDtConf( 0x01 ); memset(m_sendBuf,0,MaxLen_Buf); this->m_env->m_TxBuf.ResetBuf(); m_Flag &= ~IEC104_FLAG_STARTDT; //清除STARDT标识 this->m_dataTransflag = 0x00; this->m_env->m_appLayer->Ini
时间: 2024-04-06 19:32:02 浏览: 226
opencv_face_detector_uint8.pb
这段代码也是关于IEC 104协议相关的操作,接着上面的代码,首先通过调用frame.getFrameType()函数获取了一帧数据的类型,如果是U帧,则根据不同的标志位进行不同的处理。如果是通道测试确认帧,则将m_Flag中的某些标志位清除,并更新超时计时器的时间。如果是通道测试帧,则对一些标志位进行设置,并进行相应的日志输出。如果是启动数据传输帧,则对一些标志位进行设置,清空发送缓存区,调用相关函数进行处理,并打印相应的日志信息。如果是停止数据传输帧,则对一些标志位进行处理,清空发送缓存区,并调用相关函数进行初始化。这段代码比上面那段代码更加复杂,涉及到更多的标志位和处理逻辑,但依然需要更多的上下文信息才能进行准确的解读。
阅读全文