网络通信数据包与串口通信数据包异同:
网络通信数据包与串口通信数据包异同:
相同点:中间数据(从0x68到检验码)是一样的
不同点:串口数据需要加0xA5开头,0xAE结尾,中间数据需要转码:
0xa5 è 0xaa 0x05。目的是避免与起始符0xa5相同
0xae è 0xaa 0x0e。目的是避免与结束符0xae相同。
0xaa è 0xaa 0x0a。目的是避免与转义符0xaa相同。
而网络数据只需要在中间的数据前加上下面的部分即可:
| 数据 | 数值 | 长度(字节) | 意义描述 | 
| ID Code | 0x00000000 ~ 0xffffffff | 4 | 控制卡的识别码,高字节在前。 需要与设置到卡上的值相同。 | 
| 网络数据长度 | 0x0000 ~ 0xffff | 2 | 从”包类型”开始,到“数据校验和”的数据字节数,低字节在前 | 
| 保留 | 0x0000 | 2 | 保留备用。填0 | 
比如 网络通讯:
 BYTE *buf;
	 buf = new BYTE[ 18 ];
	 ulong2buf_be( buf+lenSerch , 0xffff );// 控制卡的识别码,高字节在前
	 lenSerch +=4;
	 ushort2buf( &buf[ lenSerch ] , 10 );//网络数据长度
	 lenSerch +=2;
	 ushort2buf( &buf[lenSerch] , 0 );//保留
	 lenSerch +=2;
	 nPOS = lenSerch;
	 buf[ lenSerch ++] = 0x68;//包类型
buf[ lenSerch ++] = 0x32 ;//卡类型码
buf[ lenSerch ++] = 0xff;//;卡id
buf[ lenSerch ++] = 0x90;//命令码(CMD
	 buf[ lenSerch ++] =0x01;//返回标记
	 buf[lenSerch ++] = 0x03;//选项
	 buf[lenSerch++] = bypos;//标记
	 
	 buf[ lenSerch++ ] = bydata ;//要设置的值
	 //校验和
	 unsigned short wdchek = cheknnume( &buf[ lenSerch ] , lenSerch - nPOS );
	 ushort2buf( &buf[ lenSerch ] , wdchek );
	 lenSerch += 2;
	 if( WriteAndRead( buf , lenSerch , nPOS , INQUIRY , pPSign ) )
	 {
		 pPSign->SetRelayInfo( byRelayInfo );
		 CString StrModify = pPSign->GetModifySQL( pPSign->GetID() );
		
		if( theApp.m_adoConn.ExecuteNoSelectSQL( StrModify ) )
		{
			MessageBox("Set success");
		}
		bSuccess = TRUE;
	 }
	 if (buf)
	 {
		 delete []buf ;
		 buf = NULL;
	 }
	SetRadioCan();
	return bSuccess;
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号