液晶流量仪通讯协议一、概述此协议采用MODBUS通讯协议,传输模式为RTU模式。Modbus协议是一种主-从式协议。任何时刻只有一个设备能够在线路上进行发送。由主站管理信息交换,且只有它能发起。它会相继对从站进行轮询。从站之间不能进行直接通信。二、串口设置通讯方式:异步串口通讯接口,如RS-485,RS-232等;波特率:1200,2400,4800,9600,19200可选(可由设定仪表参数相互更改,默认9600)注:通讯不隔离时,波特率可选择19200bps,隔离通讯则只能选择1200-9600bps。数据位:8位,无奇偶校验,1位停止位。三、通讯帧格式在以下的通信协议中,通信格式将参照如下的格式进行。设备地址Address功能代码Function数据DataCRC校验结束符8Bit8BitN个8Bit16BitT1-T2-T3-T4当间隔时间长于或等于3.5字符时,T1-T2-T3-T4即作为检测到帧结束。其中:设备地址Address=1~255,0是广播地址。功能代码Function:(十六进制)03:读取保持寄存器;10:写入多个寄存器;41:读取历史数据。其中,03,10是符合标准MODBUS通讯命令,用来读写仪表相关寄存器参数;41是本仪表自定义命令,用来读取有关历史数据而定义的命令。首寄存器地址:要读取的第一个内部寄存器的地址,双字节。每个保持寄存器的值数据为双字节。寄存器数:要读取或修改的内部寄存器个数,双字节。读取的字节数:被读取的内部寄存器的数据的字节总数,单字节。CRC校验:循环冗余校验参数。3.1读N个寄存器值:功能代码03注意:Hi为高字节,Lo为低字节,每个双字节数据都是高字节在前,低字节在后。主站请求:8字节设备地址Address功能代码Function首寄存器地址寄存器数CRC校验结束符HiLoHiLoHiLo1~25503xxxxxxxxxxxxT1-T2-T3-T41字节1字节2字节2字节2字节从站响应:设备地址Address功能代码Function读取的字节数首寄存器数值。。。末寄存器数值CRC校验结束符HiLoHiLoHiLo1~25503XxxxXx。。。xxxxxxxxT1-T2-T3-T41字节1字节1字节2字节n×2字节2字节2字节例1:主站使用功能03读取第一路测量值(寄存器地址0003,见附表),从站地址01。由于测量值是浮点类型,所以要读两个寄存器数值。主站请求:设备地址Address功能代码Function首寄存器地址寄存器数CRC校验结束符HiLoHiLoHiLo0x010x030x000x030x000x020x650xCBT1-T2-T3-T41字节1字节2字节2字节2字节从站响应:设备地址Address功能代码Function读取的字节数首寄存器数值末寄存器数值CRC校验结束符HiLoHiLoHiLo0x010x0340x450xA20x3E0xB60xDF0x0BT1-T2-T3-T41字节1字节1字节2字节2字节2字节说明:第一路测量值=0.356,浮点表示从低到高的四个字节分别是0xA2,0x45,0xB6,0x3E,modbus传输时每个寄存器都是高字节在前,低字节在后。例2:主站使用功能03读取第一路信号类型(寄存器地址002C,见附表),从站地址01。由于信号类型是Char型,所以读一个寄存器数值(再次强调,modbus的寄存器数值都是双字节)。设备地址Address功能代码Function首寄存器地址寄存器数CRC校验结束符HiLoHiLoHiLo0x010x030x000x2C0x000x010x450xC3T1-T2-T3-T41字节1字节2字节2字节2字节从站响应:设备地址Address功能代码Function读取的字节数寄存器数值CRC校验结束符HiLoHiLo0x010x030x020x000x010x790x84T1-T2-T3-T41字节1字节1字节2字节2字节仪表信号类型是1~5V。3.2写N个寄存器值:功能代码16主站请求:8字节设备地址Address功能代码Function首寄存器地址寄存器数字节数首字数据。。。CRC校验结束符HiLoHiLoHiLoHiLo1~25516xxxxxxxxxxxxxx。。。xxxT1-T2-T3-T41字节1字节2字节2字节1字节2字节n×2字节2字节从站响应:设备地址Address功能代码Function首寄存器地址寄存器数CRC校验结束符HiLoHiLoHiLo1~25516xxxxxxxxxxxxT1-T2-T3-T41字节1字节2字节2字节2字节例3:使用功能16将从站信号类型改成4~20mA,信号类型寄存器地址0x002C,见附表,从站地址01。主站请求:设备地址Address功能代码Function首寄存器地址寄存器数字节数首字数据CRC校验结束符HiLoHiLoHiLoHiLo0x010x100x000x2C0x000x010x020x000x030xE10xFDT1-T2-T3-T41字节1字节2字节2字节1字节2字节2字节从站响应:设备地址Address功能代码Function首寄存器地址寄存器数CRC校验结束符HiLoHiLoHiLo0x010x100x000x2C0x000x010xC00x00T1-T2-T3-T41字节1字节2字节2字节2字节3.3异常响应当从站不能执行发送给它的请求时,它将返回一个异常响应。异常响应的格式:设备地址Address响应代码错误代码CRC校验结束符HiLo1~255xxxxxxxxT1-T2-T3-T41字节1字节1字节2字节响应代码:请求的功能代码+0x80(最高位被置为1)。错误代码:1=请求中需访问寄存器地址不在寄存器地址范围内。2=请求中一次需访问寄存器的数量超过可连续访问寄存器数量的的最大值。3=从站写保护。3.4读取历史数据相关命令,功能代码:65读取历史数据分三步完成,首先读取通道的量程上下限和小数点,第二步读取历史数据长度和记录间隔,最后才是读取通道的历史数据。至于最后一步,由于历史数据不可能一次全部读完,上位机必须重复发出读取下一批历史数据命令,直至仪表发送完所有历史数据后才结束读取。这里提到读取下一批历史数据命令,其实读取历史数据命令还有一条子命令就是重复读取历史数据命令,由于通讯有可能出错,导致刚才一批历史数据读取失败,上位机可以发送该命令,重新读取刚才的那批历史数据,而不需要重新开始读取所有的历史数据,提高读取效率。下面详细介绍读取通道历史数据的各个子命令。3.4.1读取通道的量程上下限和测量值小数点主站请求:5个字节设备地址Address功能代码Function参数地址CRC校验结束符1~2556529~3116BitT1-T2-T3-T4从站响应:13个字节设备地址Address功能代码Function量程下限浮点字节1量程下限浮点字节2量程下限浮点字节3量程下限浮点字节41~25565xxxxxxxx量程上限浮点字节1量程上限浮点字节2量程上限浮点字节3量程上限浮点字节4小数点CRC校验结束符xxXxxxxx0~316BitT1-T2-T3-T4说明:小数点就是通道测量值在仪表中显示的小数点位数,上位机可以不予置理。3.4.2读取通道的历史数据长度和记录终止时间,记录间隔主站请求:5个字节设备地址Address功能代码Function参数地址CRC校验结束符1~2556532~3416BitT1-T2-T3-T4从站响应:15字节设备地址Address功能代码Function历史长度Long字节1历史长度Long字节2历史长度Long字节3历史长度Long字节4终止时间(年)终止时间(月)1~25565xxxxxxxx0~990~12终止时间(日)终止时间(时)终止时间(分)终止时间(秒)记录间隔CRC校验结束符0~310~230~590~591~24016BitT1-T2-T3-T4说明:历史长度是指仪表记录的该通道的所有历史数据的数量,最长不会超过0x2AAAA个数据,每个记录数据用一个short型表示。记录间隔是每两个数据的间隔时间,有以下九种间隔时间:1,2,4,6,15,30,60,120,240秒。终止时间是指仪表记录的最后一个数据的时间。3.4.3读取通道的历史数据主站请求:6个字节设备地址Address功能代码Function参数地址下一批历史数据CRC校验结束符1~2556535~370~116BitT1-T2-T3-T4从站响应:最多204字节设备地址Address功能代码Function历史数据1高字节历史数据1低字节。。。历史数据n高字节1~25565xxxx。。。xx历史数据n低字节CRC校验结束符xx16BitT1-T2-T3-T4说明:历史数据是short型,-20000~20000的码值在量程范围内的-100~100%。上位机如果读取下一批历史数据,那么在发送包的参数地址后面下一批历史数据标志字节写1,如果重新读取上一批历史数据,这个标志字节写0。仪表最多一次上传100个历史数据,如果一旦发送的数据长度小于100,就说明已经发送完最后一批历史数据,此时上位机就要停止读取下一批历史数据了,否则仪表将返回空的历史数据,此时返回的整个包长度就是4个字节。表一03,16命令对应的保持寄存器地址表,一共有39个参数。寄存器地址(DEC)参数名称数据格式类型备注00第一路信号类型Char读写最多26种信号类型01第二路信号类型Char读写02第三路信号类型Char读写03第一路测量值Float只读浮点型,占用两个寄存器地址,下同05第二路测量值Float只读07第三路测量值Float只读09第一路量程上限Float读写量程范围-9999.9~999999,以下所有浮点参数类似。11第一路量程下限Float读写13第二路量程上限Float读写15第二路量程下限Float读写17第三路量程上限Float读写19第三路量程下限Float读写21第一报警状态Char只读22第二报警状态Char只读23第三报警状态Char只读24第一路报警值Float读写26第二路报警值Float读写28第三路报警值Float读写30流量模型Char读写31大气压力Float读写33补偿系数K0Float读写35补偿系数K1Float读写37补偿系数K2Float读写39补偿系数K3Float读写41补偿系数K4Float读写43补偿系数K5Float读写45补偿系数K6Float读写47补偿系数K7Float读写49补偿系数K8Float读写51系数A1Float读写53系数A2Float读写55工况密度Float读写57标况密度Float读写59瞬时流量Float只读61瞬时热能Float只读63累积流量整数部分Long只读累积值是由整数部分加上纯小数后得到的,如累积值2355.46,那么整数部分就是2355,小数部分是0.4665累积流量小数部分Float只读67累积热能整数部分Long只读69累积热能小数部分Float只读表二读取历史数据相关参数地址,适合65命令:32第一路历史数据长度和终止时间,记录间隔1long+6char+1char只读历史数据长度(long)+记录的终止时间(6char)+记录间隔(char)33第二路历史数据长度和终止时间,记录间隔1long+6char+1char只读34第三路历史数据长度和终止时间,记录间隔1long+6char+1char只读35第一路历史数据Nshort只读每一个数据由2个字节组成,数据长度根据实际长度决定。36第二路历史数据Nshort只读37第三路历史数据Nshort只读表三信号类型0~5V,1~5V,0~10mA,0~20mA,4~20mA,B,E,J,K,S,T,WRe,Pt100,Pt100.1,Cu50,Cu100,Ba1,Ba2,f2,√4~20mA,√0~10mA,√1~5V,√0~5V,30~350ohm,-5~5V,-0