zoukankan      html  css  js  c++  java
  • 网络通信数据包与串口通信数据包异同:

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

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

  • 相关阅读:
    pytest之fixture的详细使用
    pytest之自定义标记mark
    解决pytest.mark自定义标签导致的warning
    pytest之参数化parametrize的使用
    Jenkins上allure报告清空上一次运行记录
    Jenkins配置从节点并生成allure测试报告
    《编程珠玑》笔记:数组循环左移
    精确覆盖 DLX
    海量数据的插入和查找 bloom filter
    ORACLE数据库的一些限制
  • 原文地址:https://www.cnblogs.com/chenzuoyou/p/3270335.html
Copyright © 2011-2022 走看看