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格式信息进行交互)
传输协议版本协商由两方面组成:上位机发送“协议版本请求”给下位机;下位机发送“协议版本应答”给上位机。
字段 |
命令包长度(Len) |
命令(Cmd) |
版本号(Version) |
字节数 |
2字节 |
2字节 |
4字节 |
取值 |
8 |
kSDKServiceAsk |
LOCAL_TCP_VERSION |
协议版本应答
字段 |
命令包长度(Len) |
命令(Cmd) |
版本号(Version) |
字节数 |
2字节 |
2字节 |
4字节 |
取值 |
8 |
kSDKServiceAnswer |
SDK协议交互由两方面组成:上位机发送“SDK接口请求”给下位机;下位机发送“SDK接口应答”给上位机。
字段 |
命令包长度(Len) |
命令(Cmd) |
总长度 |
索引 |
SDK接口数据 |
字节数 |
2字节 |
2字节 |
4字节 |
4字节 |
N字节 |
取值 |
Len |
kSDKCmdAsk |
Total |
Index |
XmlData |
说明:
2.
Total表示:SDK接口数据的总长度;total最大值为2*1024*1024;
SDK接口应答
字段 |
命令包长度(Len) |
命令(Cmd) |
总长度 |
索引 |
SDK接口数据 |
字节数 |
2字节 |
2字节 |
4字节 |
4字节 |
N字节 |
取值 |
Len |
kSDKCmdAnswer |
Total |
Index |
XmlData |
SDK协议版本协商使用“SDK协议交互”的数据传输方式进行通信,本小结只叙述SDK接口数据的内容;
它由两方面组成:上位机发送“SDK协议版本请求”给下位机;下位机发送“SDK协议版本应答”给上位机。
详情请参考
GetIFVersion
字段 |
命令包长度(Len) |
命令(Cmd) |
错误码(Code) |
字节数 |
2字节 |
2字节 |
2字节 |
取值 |
6 |
kErrorAnswer |
说明:
1. 下位机出错后,可通过发送该数据包通知上位机出错,并反馈相应的错误码。
2. 上位机出错后,可通过发送该数据包通知下位机出错,并反馈相应的错误码。
3. 下位机接收到错误码反馈后,下位机恢复到TCP连接刚建立好的状态。
4. 错误代码 参考 ErrorCode。
1. TCP心跳包请求
字段 |
命令包长度(Len) |
命令(Cmd) |
字节数 |
2字节 |
2字节 |
取值 |
4 |
kTcpHeartbeatAsk |
说明:
上位机应该在超过30秒无任何数据发送给下位机时,发送此命令包给下位机用来维持连接的心跳;下位机以60秒为基准判断,如果超过60秒上位机没有发送任何数据给下位机,那么下位机会主动断开该TCP连接。
TCP心跳包反馈
字段 |
命令包长度(Len) |
命令(Cmd) |
字节数 |
2字节 |
2字节 |
取值 |
4 |
kTcpHeartbeatAnswer |
说明:
下位机在超过30秒无任何数据发送给上位机时,发送此命令包给上位机用来维持连接的心跳。
1.
搜索局域网中的控制卡
2.
设置控制卡的有线网络地址信息
3. 设置用户自定义TCP服务器地址信息