网络通信数据包与串口通信数据包异同:

网络通信数据包与串口通信数据包异同:

相同点:中间数据(从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;

 

转载于:https://www.cnblogs.com/chenzuoyou/p/3270335.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值