VisionShow显示屏控制器通讯协议
通讯方式
RS-232C
波特率:  9600, 14400, 19200, 38400, 57600, 115200 可选(由控制软件进行设置)
数据长度: 8位
校验位:  无
停止位:  1位
流控制:  无
RS-485
与RS-232C相同
10/100M以太网
可支持局域网或Internet, 如需远程控制可采用外置CDMA模块进行无线通讯
数据结构及数据组织格式
显示数据由以下的结构组成:
根节点(Root)
  |----页面(Leaf)
  |----页面
        |-----字符串 (String)
    数据结构特点:
根节点下只能由页面节点构成,不能出现其他节点
页面节点下只能由各种对象节点构成,不能出现根节点及页面节点
第一个页面的计算公式为:
leaf=(PLeaf)((DWORD)root+sizeof(TRoot));
第一个对象的计算公式为:
object=(PObject)((DWORD)leaf+sizeof(TLeaf));
下一对象的计算公式为:
leaf=(PLeaf)((DWORD)leaf+leaf->size)
object=(Pobject)((DWORD)object+object->size)
数据结构的C语言形式:
根节点(Root)
#define  ROOT_PLAY          0x11
#define  ROOT_DOWNLOAD      0x12
#define  SCREEN_UNICOLOR    0x00
#define  SCREEN_COLOR      0x01
#define  SCREEN_GRAY        0x02
#define  SCREEN_FULLCOLOR  0x03
typedef struct ROOT{
WORD  id;    //数据流类型
  WORD  count; //页面数目
  DWORD size;  //整个数据流字节数(包含数据字节数和该元素本身字节数之和)
  WORD  type;  //要求的显示屏类型(单、双、全彩
  WORD  Reserved;
}TRoot, *PRoot;
数据结构说明:
id:  表明数据流的类型,有两种数据类型ROOT_PLAY及ROOT_DOWNLOAD
size: 表明该结构及下属数据的长度之和(特别注意:所有数据结构中的Size字段都必须是4字节对齐,如果数据不是4字节对齐,必须在数据之后填充0)
type: 表明数据流所要求的显示屏类型(SCREEN_UNICOLOR,SCREEN_COLOR)
页面节点(Leaf)
#define  OBJECT_LEAF        0x30
typedef struct LEAF{
WORD  id;    //页面标识
WORD  count;  //对象数目
DWORD time;  //页面显示时间单位为毫秒
DWORD Reserved;
  DWORD size;  //对象字节数
}TLeaf, *PLeaf;
数据结构说明:
id:  固定为OBJECT_LEAF
对象结构
#define    OBJECT_STRING    0x33
typedef struct RECT{      /*以左上角为原点*/
  short  left;
  short  top;
  short  right;
  short  bottom;
}TRect, *PRect;
typedef struct OBJECT{
  WORD    id;            //对象标识, 固定为OBJECT_STRING
  WORD    flicks;        //闪烁次数
  DWORD  size;          //对象字节数
TRect  rect;          //对象显示区域
}TObject;
typedef struct STRING{
  TObject  object;    //对象的一般定义
  WORD      method;    //显示方式
  WORD      speed;    //显示速度
  DWORD    Reserved[2]
  DWORD    color;    //字符颜:0xff=红  0xFF00=绿  0xFF0000=蓝
  DWORD    fontset;  //字符集(一般情况 0=16点阵 1=24点阵)
}TString, *PString;
        字符串数据结构说明:
        如果需要显示屏显示一个字符串,应该按如下步骤组织一个字符串:
1.分配一段内存,内存的长度为:TString数据结构长度+字符串长度+1
2.填写TString数据结构
3.将字符串拷贝到TString数据结构之后(字符串必须以NULL结尾(0x00))
    method: 显示方式
  1.  立即显示              2.    左滚显示
  3.  连续上滚              4.    中间向上下展开
  5.  中间向两边展开      6.    中间向四周展开
  7.  向左移入              8.      向右移入
  9.  从左向右展开          10.  从右向左展开
  11.  右上角移入              12.  右下角移入
  13.  左上角移入              14.  左下角移入
  15.  从上向下移入          16.  从下向上移入
  17.  闪  烁
数据组织实例
假定需要向显示屏发送字符串中国人民万岁abc,需进行如下操作:
1.填写Root数据结构(假定已分配了足够的内存, root已指向分配的内存)
root->id=ROOT_PLEAY;
root->count=0;
root->size=sizeof(TRoot);
root->type=SCREEN_COLOR;
    2.  填写Leaf数据结构
leaf=(PLeaf)((DWORD)root+sizeof(TRoot));
leaf->id=OBJECT_LEAF;
leaf->size=sizeof(TLeaf);
leaf->count=0;
leaf->time=1000;
root->count++;            //此处需回填root对象,表明增加了一个页面
root->size+=leaf->size;      //同样root所下属的数据长度已增加
    3.  填写String数据结构
string=(PString)((DWORD)leaf+sizeof(TLeaf));
string->object.id=OBJECT_STRING;
string-&left=0;
string-&op=0;
string-&ight=128;
string-&bottom=32;  //表明字符串显示在(0,0,128,32)这个区域内
string->object.flicks=5;        //表明需闪烁5次
string->method=17;            //显示方式为闪烁
string->speed=8;        //8个时钟周期闪烁一次(时钟周期为控制卡设置中的单步时间)
string->color=0xFFFF;        //0xff=红  0xFF00=绿 0xFF0000=蓝,此处为黄
string->fontset=0;            //字符集,0=16点阵宋体 1=24点阵宋体
    4. 拷贝数据
      str=中国人民万岁abc;
memcpy((char *)((DWORD)string+sizeof(TString)),str,strlen(str));
字符串长度的正确表示*((char *)((DWORD)string+sizeof(TString)+strlen(str)))=NULL;  (特别注意:每个字符串都必须以NULL结尾)
string->object.size=sizeof(TString)+strlen(str);
//处理对象4字节对齐模式
if  (string->object.size & 3)  string->object.size=(string->object.size & ~3)+4;
//回填Leaf对象及Root对象
leaf->count++;
leaf->size+=string->object.size;
root->size+=string->object.size;
上面的过程执行完成后,显示数据已经组织完毕,下面就是将数据组织起来发送出去
数据发送
数据发送是将上面形成的数据发送到控制器,由于发送过程可能产生错误、超时、溢出等错误,为了解决这些问题,必须制定有效的数据组织方式,使接收方能校验数据的正确性。
数据发送流程
红表示在这个流程中属于关键的部分
发送过程数据结构及常量
#define  PKC_BEGIN  0
#define  PKC_END    1
#define  PKC_DATA  2
#define  PKC_RESPOND 3
#define  PKP_LEADER  0x55
#define  PKP_SUFFIX  0xAA
#define  PKP_FILLCH  0xBB
#define  PKP_LENGTH  512
#define  PKP_MAX_LENGTH PKP_LENGTH*2+sizeof(TPKG_Header)*2
typedef struct PKG_HEADER{
  WORD  Command;
  BYTE  srcAddr;
  BYTE  dstAddr;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。