vb中pc从外界读取数据,如何区别电压与电流?是用通信协议来区别的吗?通信协议怎么写啊???给个例子吧,谢谢~!!!!

解决方案 »

  1.   

    通讯协议样本:
    1. 基本约定
    通讯波特率:4800 、9600、19200、57600 默认:9600
    地址:01H~1fH共31个地址可选   默认:1
    2.设备通讯
       命令格式
       地址帧格式:
    起始位    d0        d1         d2      d3       d4         d5       d6      d7         d8    停止位 
    0 X X X X X X X X 1 1
       指令帧格式:
    起始位    d0        d1         d2      d3       d4         d5       d6      d7         d8    停止位 
    0 X X X X X X X X 0 1
    其中:一次完整的通讯是,首先设校验位(d8)位为1,发送地址,再接着设校验位发送以下的所列的仪器指令3.仪器指令及应答格式
       主机发送通讯命令时,应设控制位d8=0. 仪器回送数据时,d8 亦为0
    主机发送给仪器的通讯命令必须遵循以下格式:命令长度 命令码 校验和
    其中:
    命令长度为命令码和校验和字节数;此处为全部02H
    校验和=256-(命令长度值+命令码值) MOD 256
    仪器应答数据遵循以下格式:
    地址 数据长度 命令码 数据1 ……. 数据N 校验和
    其中数据长度=2+n;n为要发送的数据字节总数(即地址,数据长度,命令码。校验和除外)
    校验和=256-(数据长度值+命令码值+数据1+…+数据N)mod 256下面以获取状态信息举例:
    取状态值02h(01 02 02 FC)假设地址设置为 “1“主机命令:
    地址 02h 02h 校验和
    仪器应答:
    地址 08H 02H N值高位 N值低位 气温 管温 转速高位 转速低位 校验和
    软件控制:
        在对本仪器编程时,请祥细参阅本仪器说明书中通讯协议部分!
    在本仪器在发送命令的过程中,为能确保每一次命令都能发送成功,建议软
    件的控制方式是采用循环发送命令直到有正确的应答,此时表示此命令已经
    成功发送,接收!
    命令清单:
    在单机方式下,当地址为1,命令如下(以下命令为十六进制):
       1.请求进行线性校正 :66 74 79 01 02 05 A5
    应答:01 02 05 F9
       2.请求转换到测量屏:66 74 79 01 02 06 A4
    应答:01 02 06 F8
       3.请求转换到稳态屏:66 74 79 01 02 07 A3
    应答:01 02 07 F7
       4.请求转换到加速屏:66 74 79 01 02 08 A2
    应答:01 02 08 F6
       5.请求开始或停止稳态测量:66 74 79 01 02 09 A1
    应答:01 02 09 F5
       6.请求进行一次加速触发:66 74 79 01 02 0B 9F
    应答:01 02 0B F3
       7.清除加速数据:66 74 79 01 02 0C 9E
    应答:01 02 0C F2
       8.切换加速方式:66 74 79 01 02 0D 9D
    应答:01 02 0D F1
       9.取状态:66 74 79 01 02 01 A9
       10.取测量值:66 74 79 01 02 02 A8
       11.取稳态值:66 74 79 01 02 03 A7
       12取加速值:66 74 79 01 02 04 A6
    在多机方式下,当地址为1,命令如下(以下命令为十六进制):
       1.请求进行线性校正:01 02 05 F9
    应答:01 02 05 F9
       2.请求转换到测量屏:01 02 06 F8
    应答:01 02 06 f8
       3.请求转换到稳态屏:01 02 07 F7
    应答:01 02 07 F7
       4.请求转换到加速屏:01 02 08 F6
    应答:01 02 08 F5
       5.请求开始或停止稳态测量:01 02 09 F5
    应答:01 02 09 F5
       6.请求进行一次加速触发:01 02 0B F3
    应答:01 02 0B F3
       7.清除加速数据:01 02 0C F2
    应答:01 02 0C F2
       8.切换加速方式:01 02 0D F1
    应答:01 02 0D F1
       9.取状态:01 02 01 FD
       10.取测量值:01 02 02 FC
       11.取稳态值:01 02 03 FB
       12.取加速值:01 02 04 FA
    2.串口交换方式
    串口类型:RS-232/RS-485
    波特率:4800/9600/19200
    帧格式:起始位Ox02 + 地址OxXX + 帧长度OxXXXX +命令0xXX+ 数据 + 校验OxXX + 结束位Ox03
    其中起始位1字节;地址1字节;帧长度2字节,低位在前;命令1字节;校验1字节;结束位1字节;帧长度=全帧的字节数
    校验和为地址+帧长度+命令+数据的连续累加和(进位丢弃)


    上位机发送检测命令(16进制,地址为01,格式"T 0 1",ASCII方式): 命令为"T",ASCII方式;数据为0/1(检测项目:尾气/烟度) 0/1(检测方法:怠速/双怠速,不透光/滤纸式),ASCII方式
    02+01+09+00+54+30+31+BF+03
    下位机应答:成功返回"A",失败返回"X",ASCII方式(延时50ms后应答)
    02+01+07+00+41+49+03       上位机发送取消检测命令"C",ASCII方式
    02+01+07+00+43+4B+03
    下位机应答:成功返回"A",失败返回"X",ASCII方式(延时50ms后应答)
    02+01+07+00+41+49+03     
    下位机发送检测结果,命令为"R",ASCII方式
    按以下格式返回数据 R 检测项目 检测方法 LowCO LowHC HighCO HighHC Lumda Smoke1 Smoke2 Smoke3 Smoke4 SmokeAvg
    检测项目:0/1  ASCII方式   尾气/烟度
    检测方法:0/1  ASCII方式  怠速/双怠速,不透光/滤纸式
    LowCO     格式 □□.□□,单位:%,6Bytes,ASCII方式
    LowHC     格式 □□□□,单位:ppm,5Bytes,ASCII方式
    HighCO     格式 □□.□□,单位:%,6Bytes,ASCII方式
    HighHC     格式 □□□□,单位:ppm,5Bytes,ASCII方式
    Lumda 格式 □.□□,5Bytes,ASCII方式
    Smoke1 格式 □□.□□,长度:6Bytes,单位:Rb/1/m,ASCII方式表示。
    Smoke2 格式 □□.□□,长度:6Bytes,单位:Rb/1/m,ASCII方式表示。
    Smoke3 格式 □□.□□,长度:6Bytes,单位:Rb/1/m,ASCII方式表示。
    Smoke4 格式 □□.□□,长度:6Bytes,单位:Rb/1/m,ASCII方式表示。
    SmokeAvg 格式 □□.□□,长度:6Bytes,单位:Rb/1/m,ASCII方式表示。

    数据间用空格(ASCII方式)补充 上位机应答:成功返回"A",失败返回"X",ASCII方式(延时50ms后应答)
    02+01+07+00+41+49+03