上位机软件接口说明
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上位机软件接口说明
1.基于数据流的socket编程接口
a.基于数据流的socket编程流程如下图1所示。上位机软件是服务器,月
球车软件是客户机。
图 1 基于数据流的socket编程流程
b.上位机服务器侦听自己IP地址和端口7001,等待客户机Socket连接。
等到客户机connect()操作的上位机等待并读取客户机的“请求数
据”,上位机处理服务请求后,写入“答应数据”给客户机,其流程如
上图所示。
客户机发起请求,上位机答应请求,命令总长度是40个字节,上传图像数据命令长度例外,命令长度不够40字节,数据内容填0.
客户机发给上位机通讯命令格式如下:
起始码(0x55, 1字节)+长度(2字节,包括命令码和数据内容)+命令码
(1字节)+数据内容(长度-1字节)
上位机回应客户机通讯命令格式如下:
取反起始码(0xaa, 1字节)+长度(2字节,包括命令码和数据内容)+取反命令码(1字节)+数据内容(长度-1字节)
客户机发给上位机具体命令码定义:
1. 0x01 客户机请求启动月球车
数据内容:无
2. 0x02 客户机请求上传图像
数据内容:需要传输图像总共有多少字节
3. 0x03 客户机上传图像数据
数据内容:图像数据
4. 0x04 客户机请求上传采集数据
数据内容:采集数据
上位机回应客户机具体命令码定义:
1. 0xFE 上位机回应客户机是否启动月球车请求
数据内容:第1字节为0马上启动,非0表示月球车等待非0秒后再发启动月球车请求。
2. 0xFD 上位机回应客户机上传图像请求
数据内容:第1字节为0马上启动,非0表示月球车等待非0秒后再发上传图像请求。
3. 0xFC 上位机回应客户机上传图像数据是否成功
数据内容:第1字节为1成功,0失败
4. 0xFB 上位机回应客户机上传采集数据请求
数据内容:第1字节为1成功,0失败
举例说明:
1. 客户机请求启动月球车及回应命令示例
客户机发给上位机请求启动月球车命令为
0x55 0x00 0x25 0x01 0x00, ... 0x00 (总共40字节),其中0x00 0x25为命令+数据内容长度,为37个字节,0x01为命令码,数据内容全是0。
上位机回应客户机可以马上启动月球车命令为
0xaa 0x00 0x25 0xFE 0x00, ... 0x00(第1字节数据为0)
2. 客户机请求上传图像及回应命令示例
客户机发给上位机请求上传图像命令为
0x55 0x00 0x25 0x02 0x00, 0x 00, 0xA0, 0x00, 0x00, 0xA0, 0x00, 0x80 (0x00)
(总共40字节),其中0x00 0x25为命令+数据内容长度,数据内容:0x00,
0x00, 0xA0, 0x00为图像大小=0xA000=40960字节,其后2个字节0x00,
0xA0是图像长度,再其后2个字节0x00, 0x80是图像宽度。
上位机回应客户机可以马上传输图像数据命令为
0xaa 0x00 0x25 0xFD 0x00, ... 0x00(第1字节数据为0)
客户机发给上位机请求上传上传图像数据命令为
0x55 0x03 0x00 0x03 0xa2, 0x3f, ... 0xd0 (总共0x300=768字节,数据内容
767字节)。0xa2, 0x3f, ... 0xd0为图像数据
上位机回应客户机传输图像数据是否成功命令为
0xaa 0x00 0x25 0xFC 0x00, ... 0x00(第1字节数据为0,传输成功)
3. 客户机请求上传采集数据及回应命令示例
0x55 0x00 0x25 0x04 0x0d, ... 0x44 (总共40字节),其中0x00 0x25为命令+
数据内容长度,为37个字节,0x0d, ... 0x44为采集数据内容。
上位机回应客户机可以马上启动采集数据命令为
0xaa 0x00 0x25 0xFB 0x00, ... 0x00(第1字节数据为0)
2.上位机图像格式转换
a.CMOS摄像头采集到的是16bits真彩图像,即RGB分别是5、6、
5bits。而计算机上显示的图像一般是24bits真彩图像,即RGB分别是
8、8、8bits。因此上位机收到月球车采集的图像时,需要进行格式转
换。
b.举例说明如下,CMOS摄像头采集后上位机接收了一幅320*256大小的
图片,存于buffer [320*256*2]中,每个像素16bits颜色信息,用2个字
节存放。上位机格式转换代码如下(在Delphi上测试成功,修改为C代
码)。注意VideoFrame.Canvas.Pixels[j, i]是在画布上显示一个像素点操
作。
#define LSIZE 320
#define RSIZE 256
unsigned char buffer[LSIZE*RSIZE*2];
int i, j, R, G, B;
for (i=0 ; i for (j=0; j { R = (buffer[2*(LSIZE*i+j)+1] & 0xF8); G = (buffer[2*(LSIZE*i+j)+1] & 0x07) << 13 + (buffer[2*(LSIZE*i+j)] & 0xE0) << 5; B = (buffer[2*(LSIZE*i+j)] & 0x1F) << 19; VideoFrame.Canvas.Pixels[j, i] = B + G + R; }