1.1TCP数据包协议流程

 

    说明:

1 上位机可以主动发起建立TCP连接的请求给下位机以建立TCP连接。

2 上位机可以将自定义的TCP服务器地址告知下位机,下位机在上电开机后会根据设置的地址发起建立TCP连接的请求与自定义TCP服务器建立TCP连接。

3 建立好TCP连接后, 双发要互发心跳包来维持连接。

4 建立好TCP连接后,上位机与下位机进行传输协议版本协商,选取双方都支持的传输协议版本。

5 假设上位机支持的最低传输协议版本号为PC_TRAN_MIN_VERSION,最高传输协议版本号为PC_TRAN_MAX_VERSION

6 假设下位机支持的最低传输协议版本号为ARM_TRAN_MIN_VERSION,最高传输协议版本号为ARM_TRAN_MAX_VERSION

7 上位机发送版本协商的请求(版本号为PC_TRAN_MAX_VERSION)给下位机。

8 下位机收到版本协商的请求后,提取命令包中的版本号(PC_VERSION),与当前支持的传输协议版本集进行比较:

a)   如果PC_VERSION小于ARM_TRAN_MIN_VERSION时,反馈传输协议版本过低的错误信息给上位机。

b)   如果PC_VERSION大于ARM_TRAN_MAX_VERSION时,下位机反馈版本信息(版本号为ARM_TRAN_MAX_VERSION)给上位机,并选取传输协议版本为ARM_TRAN_MAX_VERSION

c)   如果PC_VERSION大于等于ARM_TRAN_MIN_VERSION并且PC_VERSION小于等于ARM_TRAN_MAX_VERSION时,下位机将当前会话支持的传输协议切换至与上位机相同的版本,并反馈与上位机传输协议版本号相同的版本号给上位机。

9 如果上位机接收到传输协议版本过低的错误码信息后,则应该做断开连接处理。

10 如果上位机接收到了版本协商的反馈信息后,提取命令包中的版本号(ARM_VERSION, 与当前支持的传输协议版本集进行比较:

a)   如果ARM_VERSION小于PC_TRAN_MIN_VERSION时,上位机应该断开与下位机的连接,并以非网络传输的方式对下位机进行固件升级或者选取较低版本的上位机与下位机进行网络通信。

b)   如果ARM_VERSION大于等于PC_TRAN_MIN_VERSION并且ARM_VERSION小于等于PC_TRAN_MAX_VERSION时,上位机选取传输协议版本为ARM_VERSION

11 上位机与下位机协商好传输协议后,上位机和下位机就可以使用协商好的传输协议版本进行通信了。

12 使用TCP数据包通信的主要功能有:

a)   文件的下发和回读。

b)   XML格式的sdk请求和反馈。(SDK的大部分功能均采用XML格式信息进行交互)

1.2 传输协议版本协商

传输协议版本协商由两方面组成:上位机发送“协议版本请求”给下位机;下位机发送“协议版本应答”给上位机。

       协议版本请求

字段

命令包长度(Len)

命令(Cmd)

版本号(Version)

字节数

2字节

2字节

4字节

取值

8

kSDKServiceAsk

LOCAL_TCP_VERSION

 

      协议版本应答

字段

命令包长度(Len)

命令(Cmd)

版本号(Version)

字节数

2字节

2字节

4字节

取值

8

kSDKServiceAnswer

 

1.3 SDK协议交互

SDK协议交互由两方面组成:上位机发送“SDK接口请求”给下位机;下位机发送“SDK接口应答”给上位机。

  

  SDK接口请求

字段

命令包长度(Len)

命令(Cmd)

总长度

索引

SDK接口数据

字节数

2字节

2字节

4字节

4字节

N字节

取值

Len

kSDKCmdAsk

Total

Index

XmlData

 说明:

1.  Len值计算:Len=2+2+4+4+N;

2.  Total表示:SDK接口数据的总长度;total最大值为2*1024*1024

3.  Index表示:当前数据包中的XmlDataSDK接口数据中的索引位置;

4.  XmlData表示:SDK接口数据内容;XmlData在当前数据包中的最大长度值为9*1024 (2 + 2 + 4 + 4)个字节;

 

SDK接口应答

字段

命令包长度(Len)

命令(Cmd)

总长度

索引

SDK接口数据

字节数

2字节

2字节

4字节

4字节

N字节

取值

Len

kSDKCmdAnswer

Total

Index

XmlData

 

1.4 SDK协议版本协商

SDK协议版本协商使用“SDK协议交互”的数据传输方式进行通信,本小结只叙述SDK接口数据的内容;

它由两方面组成:上位机发送“SDK协议版本请求”给下位机;下位机发送“SDK协议版本应答”给上位机。

        

        详情请参考 GetIFVersion

  1.5错误码反馈

字段

命令包长度(Len)

命令(Cmd)

错误码(Code)

字节数

2字节

2字节

2字节

取值

6

kErrorAnswer

 

说明:

1.  下位机出错后,可通过发送该数据包通知上位机出错,并反馈相应的错误码。

2.  上位机出错后,可通过发送该数据包通知下位机出错,并反馈相应的错误码。

3.  下位机接收到错误码反馈后,下位机恢复到TCP连接刚建立好的状态。

4.  错误代码 参考 ErrorCode

 

1.6 TCP心跳包

1. TCP心跳包请求

 

字段

命令包长度(Len)

命令(Cmd)

字节数

2字节

2字节

取值

4

kTcpHeartbeatAsk

说明:

  上位机应该在超过30秒无任何数据发送给下位机时,发送此命令包给下位机用来维持连接的心跳;下位机以60秒为基准判断,如果超过60秒上位机没有发送任何数据给下位机,那么下位机会主动断开该TCP连接。

 

TCP心跳包反馈

 

字段

命令包长度(Len)

命令(Cmd)

字节数

2字节

2字节

取值

4

kTcpHeartbeatAnswer

说明:

    下位机在超过30秒无任何数据发送给上位机时,发送此命令包给上位机用来维持连接的心跳。

 

 

1.   UDP数据包协议流程

    说明:仅在以下情况可以使用UDP

1.   搜索局域网中的控制卡

2.   设置控制卡的有线网络地址信息

3.   设置用户自定义TCP服务器地址信息