可变信息标志通讯协议显科

上传人:最*** 文档编号:11172806 上传时间:2020-04-20 格式:DOC 页数:13 大小:211.50KB
返回 下载 相关 举报
可变信息标志通讯协议显科_第1页
第1页 / 共13页
可变信息标志通讯协议显科_第2页
第2页 / 共13页
可变信息标志通讯协议显科_第3页
第3页 / 共13页
点击查看更多>>
资源描述
可变信息标志通信协议1 文档历史发放及记录2014-72 本文档说明3 通信协议说明3.1 协议适用范围本协议为上位机和设备的通信的应用协议,与通信方式无关. 所以同时适用于串口,485,无线和以太网等通迅方式.具体设置如下:l 串口和485和无线.这几种通信方式实际都是采用串口来通信.相关参数如下所示:u 波特率 - 2400-19200可调u 数据位 - 8u 奇偶校验 - 无校验u 停止位 - 1u 流控制 - 无l 以太网.系统使用TCP连接,设备作为服务器段,中心控制软件作为客户端. 可使用在10-100m以太网中,推荐采用10m半双工通信模式.ip地址可以根据具体项目的环境配置.端口固定为5168. 注意网络通信模式有两种方式:l 长连接方式.系统一开始就建立起TCP/IP连接.中间发送指令不需要建立连接.缺点是长时间运行,在网络环境不好断线的境况下.维护连接比较麻烦.l 短连接.每次发送指令都连接一次.完成指令通信后就断掉连接.缺点是每次发送连接麻烦.3.2 协议通信流程本协议为主-从结构的半双工通信方式。监控中心计算机,手持单元或其它数据终端为主站,可变限速标志或可变信息标志为从站。每个可变信息标志均有独立的地址编码。3.3 指令基本结构帧是传送信息的基本单元。帧格式如图8 所示。 说 明 代 码 帧头0x02H指令编码C设备编码A0数据域DATA校验码CS帧尾0x03H3.3.1 指令头3.3.2 帧头指令开始标识,值固定为0x02H=00000010B。如在指令帧头与帧尾之间有任意字节等于 STX,ETX 或 ESC,则需转义,具体如下 转义前转义后STX - 0x02(帧头)STX 转成 ESC 和 0xE7ETX - 0x03(帧尾)ETX 转成 ESC 和 0xE8ESC - 0x1B (转义符)ESC 转成 ESC 和 0x003.3.3 设备编码由2个字节构成可以为监控中心通讯设备、可变限速标志,可变信息标志等设备号等。具体使用可由用户自行决定。当地址为 0x00H 时,为广播地址。范围 01 - 993.3.4 指令编码2个字节,范围 “00”“99”。具体见协议详解3.3.5 指令体应用数据区,不定长数据.根据具体指令而定. 具体见协议详解3.3.6 校验码采用CRC 2字节校验,计算范围 = 指令编码 + 设备编码 + 数据域 .计算方法见【附录一】.3.3.7 帧尾指令开始标识,值固定为0x02H=00000010B。如在指令帧头与帧尾之间有任意字节等于 STX,ETX 或 ESC,则需转义,具体如下 转义前转义后STX - 0x02(帧头)STX 转成 ESC 和 0xE7ETX - 0x03(帧尾)ETX 转成 ESC 和 0xE8ESC - 0x1B (转义符)ESC 转成 ESC 和 0x003.4 指令一览表指令描述备注设备控制指令通信状态测试通信状态好坏设备总状态获得设备的总状态设备详细状态获得设备的详细状态参数设备led灯状态获得设备坏点数和坐标重新启动计算机重新启动计算机打开关闭设备开关屏及其他设备指令获得亮度控制模式获得亮度模式设置亮度控制模式设置亮度控制模式设置设备电源模式设置电源控制模式获得通道信息获取设备显示通道信息好坏内容发布相关文件下发通用文件下发命令文件上传通用文件上传命令显示指定列表显示制定列表获得当前显示列表获得当前设备显示列表文件名获得当前显示内容获得当前设备显示具体内容维护指令时间同步同步设备时间获取当前时间获得设备当前时间获取启动时间获得最后一次启动时间获取当前版本获取设备当前版本(主程序,协议版本,列表版本)4 指令详解4.1 通讯状态检测通讯状态检测功能描述通讯状态检测预置条件检测系统的通讯状态指令格式0x02(帧头) 0x30 0x30(指令头) 0x30 0x31(目的地址) 0x00 0x00(校验位) 0x03(帧尾)返回值0x02(帧头) 0x30 0x30(指令头) 0x31 0x31(目的地址) 0x01(指令执行情况,00表示异常,01表示正常 ) 0x00 0x00(校验位) 0x03(帧尾)指令详解应用举例指令说明4.2 总状态检测总状态检测功能描述本指令向显示设备查询设备的总状态,用于平时的设备状态监控。预置条件指令格式0x02(帧头) 0x30 0x31(指令头) 0x32 0x32(目的地址) 0x00 0x00(校验位) 0x03(帧尾)返回值0x02(帧头) 0x30 0x31 (指令头)0x31 0x31(目的地址) 0x01(指令执行情况,00表示异常,01表示正常) 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 (设备状态,1个字节30表示异常,31表示正常) 0x00 0x00(校验位) 0x03(帧尾)指令详解九个状态值,分别代表:通讯、电源电压、风扇、门开关状态、系统、驱动通道、LED像素、感光头、防雷器,其他保留应用举例指令说明4.3 获得设备详细状态获得设备详细状态功能描述作为一条测试和维护指令,本指令获得设备详细状态。预置条件指令格式0x02(帧头) 0x30 0x37(指令头) 0x32 0x32(目的地址) 0x00 0x00(校验位) 0x03(帧尾)返回值0x02(帧头) 0x30 0x37(指令头)0x31 0x31(目的地址) 0x01(指令执行情况,00表示异常,01表示正常) 0x00 0x00 (箱体个数,2个字节,以ascii码表示,0x3032表示为 箱体) 0x30 0x30 0x30 (亮度A) 0x30 0x30 0x30 (亮度B) 0x30 0x30 0x30 (总温度)0x30 0x30 0x30 (220v电源) 0x30 0x30 0x30 (防雷器)0x00 0x00 。0x00 0x00 (单箱体状态,不定长数据,长度 = 箱体个数X30,每个箱体的状态如下: 8个箱体状态数据,字节为24个字节,分别是“温度”、“电源1”、“电源2”、“电源3”、“电源4”、“电源5”、“门开关”、“保留”,温度和电源是实际数值,门开关正常值是3;然后是箱体驱动好坏,3个字节,1是正常; 最后是单元系统好坏,3个字节,5是正常) 0x00 0x00(校验位) 0x03(帧尾)指令详解应用举例4.4 获得屏幕坏点数获得屏幕坏点数功能描述作为一条测试和维护指令,本指令返回屏幕坏点数。预置条件作为一条测试和维护指令,本指令返回屏幕坏点数。指令格式0x02(帧头) 0x30 0x32(指令头) 0x32 0x32(目的地址) 0x30(是否返回坏点坐标,0X30为不返回坏点坐标,0X31为返回坏点坐标)0x00 0x00(校验位) 0x03(帧尾)返回值0x02(帧头) 0x30 0x32(指令头)0x31 0x31(目的地址) 0x01(指令执行情况,00表示异常,01表示正常) 0x00 0x00 0x00 0x00 0x00 0x00 (失效点数,6个字节,以ascii码表示) 0x30 0x30 0x30 (屏体宽度) 0x30 0x30 0x30 (屏体高度)0x00 0x00 。0x00 0x00 (led状态数据,不定长数据,八个点一个字节,自己的每个位为点的好坏,1是坏点,0是好点,排列顺序是从左到右,从上到下. 当选择不返回坐标时,本数据不返回) 0x00 0x00(校验位) 0x03(帧尾)指令详解应用举例4.5 获得设备驱动通道信息的好坏获得设备驱动通道信息的好坏功能描述作为一条测试和维护指令,本指令返回驱动好坏。预置条件作为一条测试和维护指令,本指令返回驱动好坏。指令格式0x02(帧头) 0x30 0x39(指令头) 0x32 0x32(目的地址) 0x00 0x00(校验位) 0x03(帧尾)返回值0x02(帧头) 0x30 0x39(指令头)0x31 0x31(目的地址) 0x01(指令执行情况,00表示异常,01表示正常) 0x00 0x00 0x00 0x00 0x00 0x00 (96个字节,0x30为异常,0x31为正常, 6个字节为一个单元的6个驱动通道,总共16个单元.每8 列为一个驱动通道,320宽的屏体有10个单元,每单元4个驱动通道) 0x00 0x00(校验位) 0x03(帧尾)指令详解应用举例4.6 手动复位可变信息标志手动复位可变信息标志功能描述手动复位可变信息标志预置条件重新复位可变信息标志。主要用于在修改了下位机的配置文件后,需要重新复位来使配置生效。指令格式0x02(帧头) 0x30 0x33(指令头) 0x31 0x31(目的地址) 0x00 0x00(校验位) 0x03(帧尾)返回值0x02(帧头) 0x30 0x33(指令头) 0x31 0x31(目的地址) 0x01(指令执行情况,00表示异常,01表示正常) 0x00 0x00(校验位) 0x03(帧尾)指令详解应用举例4.7 设置设备电源控制模式设置设备电源控制模式功能描述设置设备电源控制模式预置条件设置设备电源控制模式指令格式0x02(帧头) 0x30 0x38(指令头) 0x31 0x31(目的地址) 0x31(需要设置的电源模式,x030为普通模式,0x31为省电模式)0x00 0x00(校验位) 0x03(帧尾)返回值0x02(帧头) 0x30 0x38(指令头) 0x31 0x31(目的地址) 0x01(指令执行情况,00表示异常,01表示正常) 0x00 0x00(校验位) 0x03(帧尾)指令详解应用举例4.8 打开/关闭系统设备打开/关闭系统设备功能描述本指令打开关闭系统设备。预置条件在正常的运行中,下位机会自动根据设备运行状态自动打开或关闭,特殊的情况下才使用本命令手动开关可变信息标志的相关设备。指令格式0x02(帧头) 0x30 0x34(指令头)0x32 0x32(目的地址) 0x00(设备定义,0x30为可变信息标志电源,其他预留) 0x00(开/关,0x31 表示打开,0x30 关闭) 0x00 0x00(校验位) 0x03(帧尾)返回值0x02(帧头) 0x30 0x34(指令头) 0x31 0x31(目的地址) 0x01(指令执行情况,00表示异常,01表示正常)0x00(设备定义,0x30为可变信息标志,其他预留设备) 0x00(设备当前状态,0x31 表示设备打开,0x30表示设备关闭) 0x00 0x00(校验位) 0x03(帧尾)指令详解应用举例4.9 获取亮度调节方式和当前显示亮度获取亮度调节方式和当前显示亮度功能描述获取亮度调节方式和当前显示亮度预置条件设备共有两种亮度控制方式:手动控制。手动控制主要在自动控制发生故障时使用(比如光敏电阻失效时)。自动控制。根据环境亮度的检测自动调节屏体亮度。指令格式0x02(帧头) 0x30 0x35(指令头) 0x31 0x31(目的地址) 0x00 0x00(校验位) 0x03(帧尾)返回值0x02(帧头) 0x30 0x35(指令头) 0x31 0x31(目的地址) 0x01(指令执行情况,00表示异常,01表示正常) 0x01(亮度模式,0x30 手动,0x31 自动,0x32 程序调光 ) 0x32 0x32(红色, 亮度级别031) 0x00 0x00(绿色, 亮度级别031) 0x00 0x00(蓝色, 亮度级别031) 0x00 0x00(环境亮度) 0x00 0x00(校验位) 0x03(帧尾)指令详解应用举例4.10 设置亮度信息设置亮度信息功能描述本指令设置亮度信息预置条件设备共有两种亮度控制方式:手动控制。手动控制主要在自动控制发生故障时使用(比如感光头失效时)。自动控制。根据环境亮度的检测自动调节屏体亮度。指令格式0x02(帧头) 0x30 0x36(指令头)0x31 0x31(目的地址) 0x30(调整模式,30为可调,31为自动) 0x00 0x00(红色, 亮度级别031) 0x00 0x00(绿色, 亮度级别031) 0x00 0x00(蓝色, 亮度级别031) 0x00 0x00(校验位) 0x03(帧尾)返回值0x02(帧头) 0x30 0x36(指令头) 0x31 0x31(目的地址) 0x01(指令执行情况,00表示异常,01表示正常) 0x30(调整模式,30为可调,31为自动) 0x00 0x00(校验位) 0x03(帧尾)指令详解应用举例4.11 文件下发指令文件发送指令功能描述文件发送指令预置条件文件发送指令,本指令作为通用文件发送指令。可以向下位机发送到xkcms目录下的任何文件,包括播放列表文件,图片文件,字体文件,系统配置文件,硬件配置文件以及程序升级文件等。需要注意的是,在往下面发送相应文件时,需要加上文件的目录和文件本身。指令格式0x02(帧头) 0x32 0x30(指令头) 0x31 0x31(目的地址) 0x37(0x30更新,0x31立即显示,0x32重新启动,默认为0x31) 0x37(文件帧标记,0x30 覆盖【头帧或唯一帧】,0x31 追加【中间帧】,0x32 帧结束) 0x30 0x30 0x30(文件名长度)0x30 。 0x30 (文件名,不定长度,包括文件路径,默认起始目录为xkcms,例如发送播放列表文件000.xkl时,文件名为 list000.xkl。) 0x30 0x30 0x30 0x30 (帧序列,即文件偏移地址为帧序列x 2048个字节) 0x30 。 0x30 (文件具体内容,不定长度)0x00 0x00(校验位) 0x03(帧尾)返回值0x02(帧头) 0x32 0x30(指令头) 0x31 0x31(目的地址) 0x01(指令执行情况,00表示异常,01表示正常) 0x00 0x00(校验位) 0x03(帧尾)指令详解下位机的目录如下:xkcms -主目录-animate -动画文件目录 -000.xka -动画文件 -001.xka -. -010.xka-font -字体文件,不需要更新,就不列出-image -图片目录 -000.bmp -图片文件 -001.bmp -. -049.bmp-list -播放列表目录 -000.xkl -播放列表文件 -001.xkl -. -099.xkl-log -运行日志目录文件 -xxxxxxxx.log -xxxxxxxx是日期的八位数字-temp -临时目录bright.cfg -亮度配置文件device.cfg -设备配置文件xkcms.cfg -系统配置文件xkcms.exe -主程序如果需要发送播放列表,则文件名为:list000.xkl.其他以此类推。l 文件偏移地址-读文件偏移指读取文件内容时文件指针的偏移字节数。l 一次下载文件内容不超过 2048 字节,如果文件长度超过 2048 字节,必须分 多次下载直至文件内容为 0 字节。应用举例4.12 文件读取指令文件读取指令功能描述文件读取指令预置条件文件读取指令指令格式0x02(帧头) 0x32 0x31(指令头) 0x31 0x31(目的地址) 0x30 0x30 0x30(文件名长度)0x30 。 0x30 (文件名,不定长度,包括文件路径,默认起始目录为xkcms,例如发送播放列表文件000.xkl时,文件名为 list000.xkl。) 0x30 0x30 0x30 0x30 (帧序列,即文件偏移地址为帧序列x 2048个字节) 0x00 0x00(校验位) 0x03(帧尾)返回值0x02(帧头) 0x32 0x31(指令头) 0x31 0x31(目的地址) 0x01(指令执行情况,00表示异常,01表示正常) 0x00 0x00(校验位) 0x03(帧尾)指令详解下位机的目录如下:xkcms -主目录-animate -动画文件目录 -000.xka -动画文件 -001.xka -. -010.xka-font -字体文件,不需要更新,就不列出-image -图片目录 -000.bmp -图片文件 -001.bmp -. -049.bmp-list -播放列表目录 -000.xkl -播放列表文件 -001.xkl -. -099.xkl-log -目录文件-temp -临时目录bright.cfg -亮度配置文件device.cfg -设备配置文件xkcms.cfg -系统配置文件xkcms.exe -主程序如果需要发送播放列表,则文件名为:list000.xkl.其他以此类推。l 文件偏移地址-读文件偏移指读取文件内容时文件指针的偏移字节数。l 一次下载文件内容不超过 2048 字节,如果文件长度超过 2048 字节,必须分 多次下载直至文件内容为 0 字节。应用举例4.13 显示指定显示列表显示指定显示列表功能描述本指令告诉下位机显示已经存储在下位机的哪一个播放列表文件。预置条件作为下位机,本地存储器可以存储99个播放列表,里面存储一些常见的交通信息。用户通过本指令就可以简单让下位机显示想要的内容。指令格式0x02(帧头)0x32 0x32(指令头)0x31 0x31(目的地址)0x470x46(文件名,“000.xkl”,7个字节,其中”000“为播放列表的编码,范围是000999) 0x00 0x00(校验位) 0x03(帧尾)返回值0x02(帧头)0x32 0x32(指令头) 0x31 0x31(目的地址) 0x01(指令执行情况,00表示异常,01表示正常) 0x00 0x00(校验位) 0x03(帧尾)指令详解应用举例4.14获取当前显示列表获取当前显示列表功能描述本指令读取当前显示列表文件的编号。预置条件有时不知道下位机正在显示什么内容时,本指令可获得正在显示的显示列表编号。指令格式0x02(帧头) 0x32 0x33(指令头) 0x31 0x31(目的地址) 0x00 0x00(校验位) 0x03(帧尾)返回值0x02(帧头) 0x32 0x33(指令头) 0x31 0x31(目的地址) 0x01(指令执行情况,00表示异常,01表示正常) 0x470x46(文件名,“000.xkl”,7个字节,其中”000“为播放列表的编码,范围是0000999) 0x00 0x00(校验位) 0x03(帧尾)指令详解应用举例4.15同步下位机时间同步下位机时间功能描述同步下位机时间预置条件同步下位机时间指令格式0x02(帧头) 0x34 0x30(指令头) 0x32 0x32(目的地址) 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30(14位时间) 0x00 0x00(校验位) 0x03(帧尾)返回值0x02(帧头) 0x34 0x30(指令头) 0x31 0x31(目的地址) 0x01(指令执行情况,00表示异常,01表示正常) 0x00 0x00(校验位) 0x03(帧尾)指令详解14字节为时间的字符串 如 “ 20071001020315”应用举例4.16读取下位机时间读取下位机时间功能描述读取下位机时间预置条件读取下位机时间指令格式0x02(帧头) 0x34 0x31(指令头) 0x30 0x31(目的地址) 0x00 0x00(校验位) 0x03(帧尾)返回值0x02(帧头) 0x34 0x31(指令头)0x30 0x31(目的地址) 0x01(指令执行情况,00表示异常,01表示正常) 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 (14位时间) 0x00 0x00(校验位) 0x03(帧尾)指令详解14字节为时间的字符串 如 “ 20071001020315”应用举例4.17获取启动时间获取启动时间功能描述获取启动时间预置条件获取启动时间指令格式0x02(帧头) 0x34 0x32(指令头) 0x31 0x31(目的地址) 0x00 0x00(校验位) 0x03(帧尾)返回值0x02(帧头) 0x34 0x32(指令头)0x31 0x31(目的地址) 0x01(指令执行情况,00表示异常,01表示正常) 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 (14位时间) 0x00 0x00(校验位) 0x03(帧尾)指令详解14字节为时间的字符串 如 “ 20071001020315”应用举例【附录一】 CRC 算法的 C 语言实现unsigned short gen_crc(const unsigned char *buffer, int buffer_length) unsigned char c, treat, bcrc; unsigned short wcrc = 0; int i, j; for (i = 0; i buffer_length; i+) c = bufferi; for (j = 0; j 8; j+) treat = c & 0x80; c 8) & 0x80; wcrc = 1; if (treat != bcrc) wcrc = 0x1021; return wcrc;【附录二】 CRC 算法的 C 语言实现(查表法)unsigned short crc_table256 =0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7,0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF,0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6,0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE,0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485,0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D,0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4,0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC,0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823,0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B,0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12,0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A,0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41,0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49,0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70,0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78,0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F,0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067,0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E,0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256,0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D,0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C,0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634,0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB,0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3,0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A,0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92,0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9,0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1,0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8,0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0;unsigned short gen_crc(const unsigned char *buffer, int buffer_length)unsigned short crc = 0;int i;for (i = 0; i 8) bufferi) & 0xFF (crc 8);return crc;【附录三】 CRC 算法的 Delphi 实现function gen_crc(const Buffer: array of Byte; const BufferLength: Smallint): Word;varc, treat, bcrc: Byte;wcrc: Word;i, j: Smallint;beginwcrc := 0;i := 0;while i BufferLength dobeginc := Bufferi;for j := 0 to 7 dobegintreat := c and $80;c := c shl 1;bcrc := (wcrc shr 8) and $80;wcrc := wcrc shl 1;if treat bcrc thenwcrc := wcrc xor $1021;end;i := i + 1;end;gen_crc := wcrc;end;【附录四】 CRC 算法的 Visual Basic 实现Private Function gen_crc(Buffer() As Byte, BufferLength As Integer) As IntegerDim c As Byte, treat As Byte, bcrc As ByteDim wcrc As IntegerDim tempInt As Integer, tempLong As Longwcrc = 0For i = LBound(Buffer) To LBound(Buffer) + BufferLength - 1c = Buffer(i)For j = 1 To 8treat = c And &H80tempInt = CInt(c) * 2If tempInt = 256 ThentempInt = tempInt - 256End Ifc = CByte(tempInt)If wcrc 0 ThentempLong = CLng(wcrc) + 65536ElsetempLong = CLng(wcrc)End IftempInt = Int(tempLong / 256)bcrc = CByte(tempInt) And &H80If wcrc = 65536 ThentempLong = tempLong - 65536End IfIf tempLong = 32768 ThentempLong = tempLong - 65536End Ifwcrc = CInt(tempLong)If treat bcrc Thenwcrc = wcrc Xor &H1021End IfNext jNext igen_crc = wcrcEnd Function - 13 -
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 模板表格


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!