此485通讯协议适合于JK72S-RS,JK92S-RS,SD76-RS,SD92-RS,JK86,大屏计数器等
仪表可以后配数字通讯接口,其接口为 RS485,可以多达 255块 仪表并联在一起接到上位机对应的通讯口上,通过数字通讯口与上位计算机连接。在上位机上运行适当的通讯程序可检查和修改仪表中的各种参数,数字通讯线通过仪表后部端子连接到计算机。
仪表与上位机通讯为被动方式,即仪表不会主动向上位机发数据,必须由上位机向仪表发出读写命令仪表才会作相应的响应。对不同的仪表通讯时由上位机软件发出不同的表号进行区别。
仪表正常通电并进入正常显示状态;
在二级参数设定模式下,将仪表设置为有效的地址及波特、数字结构.
依次按“SET”键可得到并循环显示下列参数:
Adrset 仪表地址号:默认为01.(范围01-255)
BAUSET 通讯速率:默认为9600.(范围9600-4800)
代码 | 数据位 | 停止位 | 校验位 |
0 | 8 | 1 | 1 |
1 | 8 | 1 | 无 |
2 | 8 | 1 | 奇 |
3 | 8 | 1 | 偶 |
UArt 数字结构由下面的代码
表示不同的结构组合:
出厂默认值1.
一、 通讯类型和帧格式
本系列仪表使用异步串行通讯接口,符合标准 RS485 接口电平规范。通讯信号兼容标准 MODBUS
RTU 协议,默认数据帧格式为 1 位起始位、8 位数据位、无校验、1 位停止位。通讯传输数据的波特率可设
置为 4800 或 9600Bit/S 。(必要时在仪表后部端子并接一只 100Ω左右的电阻)
表1-1 MODBUS数帧默认设置格式
波特率 | 起始位 | 数据位 | 校验位 | 停止位 |
9600 | 1 | 8 | None | 1 |
二、通讯信息的发送格式
仪表端为从机,接收仪表数据一端为主机,控制指令首先由主机发送到指定地址的从机,指定地址的从机接收到了命令,如果接收数据CRC 校验和指令格式正确,从机会执行相应的操作,然后从机把执行结果返回到主机。
1、【仪表地址码】(1 个字节)
地址范围 1-32,主机发送的指令包含了仪表地址,被指定的仪表收到指令后执行操作并返回执行结果。(同一总线内的仪表地址码不能重复,仪表地址码需先在仪表菜单ADRSET中设定好)
2、【操作指令码】(1个字节)
指令代码由主机发送给从机,从机收指令代码执行相应操作。如果从机执行操作正常原样返
回收到的指令代码,如果执行异常从机将接收到的功能码最高位置 1 后再返回。
表2-1 操作指令码
指令码 | 指令功能 | 指令说明 |
0x03 | 寄存器多读操作指令码 | 可一次读出一个或全部工作寄存器地址内容 |
0x10 | 寄存器多写操作指令码 | 可用来写入报警值和工作参数数据 |
0x06 | 寄存器单写操作指令码 | 仅用来写入产品复位操作和暂停/恢复操作 |
3、【数据码】(不同指令代码数据所发送的数据码长度不同)
需要发送给仪表的数据(例如报警值、设定值等)。
• 通信发送和接收信息格式
1. 以下通过四组示例说明SD76系列仪表MODBUS数据的发送:
示例一:读取仪表当前报警状态
由PLC或上位机向仪表发01 03 00 00 00 01 84 0A数据即可,发送各字节数据含义见表1
示例二:读取仪表上排显示数值
由PLC或上位机向仪表发01 03 00 21 00 02 94 01数据即可,发送各字节数据含义见表1
示例三:读取仪表下排显示数值
由PLC或上位机向仪表发01 03 00 23 00 02 35 C1数据即可,发送各字节数据含义见表1
示例四:控制仪表上排数值清零
由PLC或上位机向仪表发01 06 00 00 00 02 08 0B数据即可,发送各字节数据含义见表2
示例五:设置AL1和AL2报警值分别设置为10和20(AL1和AL2必须同时修改)
由PLC或上位机向仪表发01 10 00 0F 00 04 08 00 00 00 10 00 00 00 20 62 75数据即可
表1JK72S仪表MODBUS常用多读(03)操作指令
序号 | 功能 | 仪表地址 | 多读 指令码 | 起始地址 | 读取数量 | CRC16 校验码 |
1 | 读取仪表当前报警状态 | 0x01 | 0x03 | 0x0000 | 0x0001 | 0x840A |
2 | 读取仪表上排显示数值 | 0x01 | 0x03 | 0x0021 | 0x0002 | 0x9401 |
3 | 读取仪表下排显示数值 | 0x01 | 0x03 | 0x0023 | 0x0002 | 0x35C1 |
表2 SD76仪表MODBUS常用单写(06)操作指令
序号 | 功能 | 设备地址 | 单写 指令码 | 写入地址 | 写入数据 | CRC16 校验码 |
1 | 仪表上排显示数值复位 | 0x01 | 0x06 | 0x0000 | 0x0002 | 0x080B |
2 | 仪表下排显示数值复位 | 0x01 | 0x06 | 0x0000 | 0x0001 | 0x480A |
3 | 仪表暂停运行 | 0x01 | 0x06 | 0x0000 | 0x0004 | 0x8809 |
4 | 仪表恢复运行 | 0x01 | 0x06 | 0x0000 | 0x0008 | 0x880C |
2.PLC或上位机接收到的数据结构见表3,更多寄存器含义详见<2. JK72S系列仪表寄存器功能说明>文档。
表3 JK72S仪表MODBUS返回的数据格式
序号 | 功能 | 设备地址 | 指令码 | 返回数据的字节数 | 返回的 数据 | CRC16 校验码 |
1 | 返回上排显示数据 6 | 0x01 | 0x03 | 0x02 | 0x0006 | 0x3846 |
2 | 返回下排显示数据-2 | 0x01 | 0x03 | 0x02 | 0xFFFE | 0x7834 |
3 | 返回仪表AL1报警中状态 | 0x01 | 0x03 | 0x02 | 0x0001 | 0x7984 |
4 | 返回仪表AL2报警中状态 | 0x01 | 0x06 | 0x02 | 0x0002 | 0x3985 |
• 通讯错误处理
如果在指令序列和CRC校码码均正确的情况下,出现了操作错误,仪表将向主机返回错误信息,从机
将此次接收到的【操作指令码】高位置1后连同【仪表地址码】、【错误码】一起作为错误信息返回。
表4 从机返回错误代码格式
序号 | 功能 | 设备地址 | 0x80+ 指令码 | 错误代码 | CRC16校验码 |
1 | 不支持的操作指令 | 0x01 | 0x83 | 0x08 | 0x40F6 |
2 | 无效的寄存器地址 | 0x01 | 0x83 | 0x09 | 0x8136 |
3 | 无效的波特率数据 | 0x01 | 0x83 | 0x10 | 0X40FC |
表5 JK72S系列仪表错误代码总表
错误代码 | 错误含义 | 备 注 |
0x08 | 不支持的操作指令 | 所有模式 |
0x09 | 无效的寄存器地址 | 所有模式 |
0x10 | 无效的波特率数据 | 所有模式 |
0x11 | 无效的起始值1 | 所有模式 |
0x12 | 无效的起始值2 | 所有模式 |
0x13 | 无效的报警值1 | 所有模式 |
0x14 | 无效的报警值2 | 所有模式 |
0x15 | 无效的输出模式1 | 所有模式 |
0x16 | 无效的输出模式2 | 所有模式 |
0x17 | 无效的输出时间1 | 所有模式 |
0x18 | 无效的输出时间2 | 所有模式 |
0x19 | 无效的计时器模式1 | 计时器专用 |
0x1A | 无效的计时器模式2 | 计时器专用 |
0x1B | 无效的计时组合模式 | 计时器专用 |
0x1C | 无效的计时器模式 | 计时计数器专用 |
0x1D | 无效的计数器模式 | 计时计数器专用 |
0x20 | 无效的小数点 | 计米器/总量批次专用 |
0x21 | 无效的计数组合模式 | 计米器专用 |
0x22 | 无效的计数频率 | 计米器/总量批次专用 |
0x23 | 无效的编码器设置 | 总量批次专用 |
0x24 | 无效的锁键设置 | 总量批次专用 |
JK72S仪表寄存器功能说明
说明: 1.寄存器的基地址为0x0000,PLC地址的基地址为40001。
2.功能码0x03为读取多个保持寄存器,0x06为写1个保持寄存器单元,0x10写多个保持寄存器。
3.AL1报警值和AL2报警值的4个寄存器(0x000F~0x0012)必须同时写入,读取时可以分开读。
寄存器字地址 | 寄存器内容 | 数据类型 | 参数说明 | 适用功能码 |
0x0020 (40033) | 上排显示小数点 (低字节) | 8位无符号整数 | 0x00=小数点的右边有0位数; 0x01=小数点的右边有1位数; 0x02=小数点的右边有2位数; ... | 0x03 |
下排显示小数点 (高字节) | 8位无符号整数 | 内容同上 | 0x03 | |
0x0021~0x0022 (40034~40035) | 上排数码管整数值 | 32位有符号整数 | 上排小数点位置由40033寄存器低字节定义 | 0x03 |
0x0023~0x0024 (40036~40037) | 下排数码管整数值 | 32位有符号整数 | 下排小数点位置由40033寄存器高字节定义 | 0x03 |
0x0025~0x0026 (40038~40039) | 上排数码管浮点值 | 32位单精度浮点数 | 例如:0x41280000 表示10.5 | 0x03 |
0x0027~0x0028 (40040~40041) | 下排数码管浮点值 | 32位单精度浮点数 | 内容同上 | 0x03 |
0x0000 (40001) | 读取报警状态 (低字节) | 8位无符号整数 | 0x01=AL1报警了; 0x02=AL2报警了; 0x10=仪表暂停中; 上述值相加所得到的值表示状态同时出现 | 0x03 |
读取仪表工作模式 (高字节) | 8位无符号整数 | 0x00=计数计米器; 0x01=计时器; 0x02=计时计数器; 0x03=总量计米器; 0x04=批次计米器 | ||
0x0000 (40001) | 清零和复位控制 | 16位无符号整数 | 0x0001=下排数码管复位; 0x0002=上排数码管复位; 上述值相加所得到的值表示同时控制 | 0x06 |
0x0001~0x0002 (40002~40003) | 上排数码管显示值 | BCD码 | 低3个字节有效,最高的1个字节要舍弃 例如:0x000100代表100 (BCD为无负号数,显示的是绝对值) | 0x03 |
0x0003~0x0004 (40004~40005) | 下排数码管显示值 | BCD码 | 内容同上 | 0x03 |
0x0006~0x0007 (40007~40008) | TIA1 继电器1闭合时长 | BCD码 | 内容同上 | 0x03 |
0x0008~0x0009 (40009~40010) | TIA2 继电器2闭合时长 | BCD码 | 内容同上 | 0x03 |
(40011~40012) | PRE1上排初始值 | BCD码 | 内容同上 | 0x03、0x10 |
0x001C~0x001D (40013~40014) | PRE2下排初始值 | BCD码 | 内容同上 | 0x03、0x10 |
0x000F~0x0010 (40016~40017) | AL1 报警值 | BCD码 | 内容同上 | 0x03、0x10 |
0x0011~0x0012 (40018~40019) | AL2 报警值 | BCD码 | 内容同上 | 0x03、0x10 |
0x0014~0x0015 (40021~40022) | SCAL计数器倍率 | BCD码 | 内容同上 | 0x03、0x10 |
计仪表工作状态:01 03 00 00 00 01 84 0A 16进制 指令03 地址0000H
0x0018 dp
0x0005 set
0x000A pc0
0x000B pc1
0x000C sc2 sc1
0x000D net addr
0x000E baud
0x0013 cn cset
0x001E OUT2 OUT1 两个值一起读
485通讯指令
读取当前值上方一排测量值
01 03 00 01 00 02 95 CB
读取当前值上下两排设定值/测量值
01 03 00 01 00 04 15 C9
读取当前仪表AL1与AL2继电器是否有报警输出。
01 03 00 00 00 01 84 0a
清零1,清零2,暂停/取消,复位
以下以操作地址1举例(写单一寄存器指令06H)
(所有数据都是16进制)
1.清零1号上面一排LED(两路单独输入时有效,计数或计米时请用第三条复位指令)
01 06 00 00 00 01 48 0a
2.清零2号下面一排LED(两路单独输入时有效)
01 06 00 00 00 02 08 0b
3.清零1号/2号(相当于复位)
01 06 00 00 00 03 C9 CB
4.暂停
01 06 00 00 00 04 88 09
5.恢复运行
01 06 00 00 00 08 88 0C
6. 写入AL1 AL2
01 10 00 0F 00 04 08 00 12 34 56 00 56 78 90 1E 6B
7. 写入AL1
01 10 00 0F 00 02 04 00 11 22 33 BB 5F
以上4/5两条指令若同时存在,则4优先(即暂停比恢复优先级高)
1.读取全部寄存器数据(地址区间:00H--1DH,共1EH个寄存器)
指令:01 03 00 00 00 1E C5 C2
2.读取当前状态(地址区间:00H-01H-02H-03H-04H,共5个寄存器)
指令:01 03 00 00 00 05 85 C9
2.仅写入AL1数据(数据值:123456,地址区间: 12H-13H,共2个寄存器)
指令:01 10 00 12 00 02 04 00 12 34 56 45 81
3.写初始值1为2
01 10 00 1a 00 02 04 00 00 00 02 F3 1D
4.写入其它参数值(要求一次至少写入2个寄存器数据)
例:写入OUT1=1,OUT2=2(地址区间:08H-09H,共2个寄存器)
指令:01 10 00 08 00 02 04 00 01 00 02 22 08
注:当前测量值第一排和第二排采用bcd码读写,第一个字节最高位为1时为负数,为0时表示正数,从第一个字节的第5位开始置1表示小数点位置在第1位,往后依次为4对应第2位........0对应第6位,
-1.05500 表示为A0 10 55 00
-10.5500表示为90 10 55 00
-105.500表示为88 10 55 00
-1055.00表示为84 10 55 00
-10550.0 表示为82 10 55 00
-105500表示为 81 10 55 00