做301重定向会影响网站权重吗,网站建设 销售,流量卡分销代理平台,基于h5的网站开发前言
最近依旧是开发规约解析工具的103篇#xff0c;已经完成了通用分类服务部分的解析#xff0c;现在着手开始搞扰动数据传输#xff0c;也就是故障录波的传输。
在103故障录波#xff08;扰动数据#xff09;的报文中#xff0c;数据是一个数据集一个数据集地存放已经完成了通用分类服务部分的解析现在着手开始搞扰动数据传输也就是故障录波的传输。
在103故障录波扰动数据的报文中数据是一个数据集一个数据集地存放所以为了方便我们采用pData[offset]这种方式来访问到每一个数据用结构体TJC103_Wave来定义数据集之前三行的其余字段部分初步打算用结构体来访问其余字段部分而用BYTEunsigned char型的指针来访问数据集因为涉及到偏移量所以采用pData[offset]这种方式来访问较为简单。
以下为部分代码实现
//.h文件
//新增103规约发送接收帧结构体
typedef struct
{BYTE bStart; //启动字符BYTE bLength; //长度BYTE bControl1;//控制域1BYTE bControl2;//控制域2BYTE bControl3;//控制域3BYTE bControl4;//控制域4BYTE bType; //类型标识BYTE bQualifier;//结构限定词BYTE bReason; //传送原因 BYTE bAddress; //公共地址BYTE bFUN; //功能类型BYTE bINF; //信息序号BYTE bData; BYTE bGenData; //从NGD开始
} TJC103RxdFm, TJC103TxdFm;TJC103RxdFm m_pRxdFm_JC103; //存储报文的结构体//故障录波数据准备好报文的应用服务数据格式
typedef struct
{BYTE bNotUsed; //未用BYTE bDataType; //数据类型WORD wFaultNumber; //故障序号WORD wPowerGrid; //电网故障序号未用BYTE NOC; //模拟量路数WORD NOE; //每路模拟量的点数WORD INT; //非实际数DWORD dwNotUsed; //没有使用全部为零WORD StartRecordWave; //启动与录波开始的间隔点数WORD ExitRecordWave; //出口与录波开始的间隔周波数WORD ReturnRecordWave; //返回与录波开始的间隔周波数BYTE bData; //数据
} TJC103_Wave;
报文解析处理
//.cpp文件
bool CXfloatDlg::Rxd68_JC103_Burst_Trans_Ready_26() //扰动数据传输准备就绪
{TJC103_Wave* JC103_Wave (TJC103_Wave*) (m_pRxdFm_JC103-bData);SetTop_JC103(扰动数据传输准备就绪);qy.Format(%02X%s传送原因bReason:%s\r\n, m_pRxdFm_JC103-bReason, GetSpace(1), SETReason_JC103(m_pRxdFm_JC103-bReason));m_result qy;qy.Format(%02X%s数据单元公共地址:%d\r\n, m_pRxdFm_JC103-bAddress, GetSpace(1), m_pRxdFm_JC103-bAddress);m_result qy;qy.Format(%02X%s功能类型FUN:%d\r\n, m_pRxdFm_JC103-bFUN, GetSpace(1), m_pRxdFm_JC103-bFUN);m_result qy;qy.Format(%02X%s信息序号INF:%d %s\r\n, m_pRxdFm_JC103-bINF, GetSpace(1), m_pRxdFm_JC103-bINF, GetINFstrign(m_pRxdFm_JC103-bINF));m_result qy;qy.Format(%02X%s未用\r\n, JC103_Wave-dwNotUsed, GetSpace(1));m_result qy;qy.Format(%02X%s数据类型:%d\r\n, JC103_Wave-bDataType, GetSpace(1), JC103_Wave-bDataType);m_result qy;//其余字段...BYTE* pData (JC103_Wave-bData);while (1){//循环输出数据部分..pData[wOffset];//循环输出数据部分..}return TRUE;
}其中最主要的代码便是这两行
TJC103_Wave* JC103_Wave (TJC103_Wave*) (m_pRxdFm_JC103-bData);BYTE* pData (JC103_Wave-bData);我们收到的报文内容存放在m_pRxdFm_JC103中第一句将m_pRxdFm_JC103-bData的地址赋值给JC103_Wave并且强制转换为TJC103_Wave类型以 TJC103_Wave的方式来访问 m_pRxdFm_JC103-bData 的内容并且可以通过JC103_Wave-bData来访问到数据类型的值通过(JC103_Wave-bData)来访问到其地址。
第二句则是将JC103_Wave-bData的地址赋值给pData并且可以通过pData[0] 、pData[1]来访问到后续的值。
例如报文 68 0C 18 00 04 00 1A 81 1F 01 FF 00 00 01 由103规约可知1A是类型标识是26进入上面我们提到的Rxd68_JC103_Burst_Trans_Ready_26函数并且可以知道此时m_pRxdFm_JC103-bData的值便是最后一个00而最后的00 01其实在内存中就是紧跟在m_pRxdFm_JC103-bData的值00之后的所以我们这时可以通过JC103_Wave 来接管后面两个字节的监控同时可以用JC103_Wave-bNotUsed来访问到这个最后的00 用JC103_Wave-bDataType访问到最后的01。
因为我们最后要操作数据并且数据是一个数据集一个数据集地存放所以我们需要通过pData[offset]这种方式来访问到每一个数据所以我们将JC103_Wave-bData的地址在赋值给一个BYTE型指针这样我们就可以一个字节一个字节地访问到每一个数据了。