485通讯协议怎么写.docx
《485通讯协议怎么写.docx》由会员分享,可在线阅读,更多相关《485通讯协议怎么写.docx(7页珍藏版)》请在冰豆网上搜索。
485通讯协议怎么写
竭诚为您提供优质文档/双击可除
485通讯协议怎么写
篇一:
485通讯协议设置
通讯协议
Rcm-t2控制仪采用标准modbus-Rtu通讯协议,协议采用主从方式,只有主站发出查询时,从站才能相应主站;从站只相应对其单独发出的指令,对于广播信息,从站只接收,而不向主站相应命令。
modbus通讯协议传输方式
Rcm-t2控制仪,串口通讯参数:
1位起始位,8位数据位,无校验,1位停止位,波特率:
9600,采用Rtu通讯方式。
Rcm-t2控制仪地址列表
篇二:
Rs485通讯协议介绍
第九章串行口Rs485通讯协议
9.1通讯概述
本公司系列变频器向用户提供工业控制中通用的Rs485通讯接口。
通讯协议采用modbus标准通讯协议,该变频器可以作为从机与具有相同通讯接口并采用相同通讯协议的上位机(如plc控制器、pc机)通讯,实现对变频器的集中监控,另外用户也可以使用一台变频器作为主机,通过Rs485接口连接数台本公司的变频器作为从机。
以实现变频器的多机联动。
通过该通讯口也可以接远控键盘。
实现用户对变频器的远程操作。
本变频器的modbus通讯协议支持两种传送方式:
Rtu方式和ascii方式,用户可以根据情况选择其中的一种方式通讯。
下文是该变频器通讯协议的详细说明。
9.2通讯协议说明
9.2.1通讯组网方式
(1)变频器作为从机组网方式:
单主机多从机
图9-1从机组网方式示意图
单主机单从机
(2)多机联动组网方式:
-107-
图9-2多机联动组网示意图
9.2.2通信协议方式
该变频器在Rs485网络中既可以作为主机使用,也可以作为从机使用,作为主机使用时,可以控制其它本公司变频器,实现多级联动,作为从机时,pc机或plc可以作为主机控制变频器工作。
具体通讯方式如下:
(1)变频器为从机,主从式点对点通信。
主机使用广播地址发送命令时,从机不应答。
(2)变频器作为主机,使用广播地址发送命令到从机,从机不应答。
(3)用户可以通过用键盘或串行通信方式设置变频器的本机地址、波特率、数据格式。
(4)从机在最近一次对主机轮询的应答帧中上报当前故障信息。
9.2.3通讯接口方式
通讯为Rs485接口,异步串行,半双工传输。
默认通讯协议方式采用ascii方式。
默认数据格式为:
1位起始位,7位数据位,2位停止位。
默认速率为9600bps,通讯参数设置参见p3.09~p3.12功能码。
9.3ascii通讯协议字符结构:
10位字符框(Forascii)
(1-7-2格式,无校验)
(1-7-1格式,奇校验)
-108-
(1-7-1格式,偶校验)
11位字符框(ForRtu)
(1-8-2格式,无校验)
(1-8-1格式,奇校验)
(1-8-1格式,偶校验)
通讯资料结构:
ascii模式
-109-
通讯地址:
00h:
所有变频器广播(broadcast)01h:
对01地址变频器通讯。
0Fh:
对15地址变频器通讯。
10h:
对16地址变频器通讯。
以此类推……….,最大可到254(Feh)。
功能码(Function)与资料内容(data):
03h:
读出寄存器内容。
06h:
写入一笔资料到寄存器。
08h:
回路侦测。
功能码03h:
读出一个寄存器内容:
例如:
读出寄存器地址2104h内容(输出电流):
ascii模式:
-110-
Rtu模式:
功能码06h:
写入一笔资料到寄存器。
例如:
对变频器地址01h,写p0.02=50.00hz功能码。
ascii模式:
-111-
篇三:
485通讯协议标准
编号:
密级:
内部页数:
__________
基于Rs485接口的dgl通信协议(修改)
编写:
____________________校对:
____________________审核:
____________________批准:
____________________
北京华美特科贸有限公司二○○二年十二月六日
1.前言
在常见的数字式磁致伸缩液位计中,多采用Rs485通信方式。
但Rs485标准仅对物理层接口进行了明确定义,并没有制定通信协议标准。
因此,在Rs485的基础上,派生出很多不同的协议,不同公司均可根据自身需要设计符合实际情况的通信协议。
并且,Rs485允许单总线多机通信,如果通信协议设计不好,就会造成相互干扰和总线闭锁等现象。
如果在一条总线上挂接不同类型的产品,由于协议不一样,很容易造成误触发,造成总线阻塞,使得不同产品对总线的兼容性很差。
随着Rs485的发展,modicon公司提出的modbus协议逐步得到广泛认可,已在工业领域得到广泛应用。
而modbus的协议规范比较烦琐,并且每字节数据仅用低4位(范围:
0~15),在信息量相同时,对总线占用时间较长。
dgl协议是根据以上问题提出的一种通信协议。
在制定该协议时已充分考虑以下几点要求:
a.兼容于modbus。
也就是说,符合该协议的从机均可挂接到同一总线上。
b.要适应大数据量的通信。
如:
满足产品在线程序更新的需要(未来功能)。
c.数据传输需稳定可靠。
对不确定因素应加入必要的冗错措施。
d.降低总线的占用率,保证数据传输的通畅。
2.协议描述
为了兼容其它协议,现做以下定义:
通信数据均用1字节的16进制数表示。
从机的地址范围为:
0x80~0xFd,即:
msb=1;命令和数据的数值范围均应控制在0~0x7F之间。
即:
msb=0,以区别地址和其它数据。
液位计的编码地址为:
0x82~0x9F。
其初始地址(出厂默认值)为:
0x81。
罐旁表的编织地址为:
0xa2~0xbF。
其初始地址(出厂默认值)为:
0xa1。
其它地址用于连接其它类型
的设备,也可用于液位计、罐区表地址不够时的扩充。
液位计的命令范围为:
0x01~0x2F,共47条,将分别用于参数设定、实时测量、诊断测试、在线编程等。
通信的基本参数为:
4800波特率,1个起始位,1个结束位。
字节校验为奇校验。
本协议的数据包是参照modbusRtu通信格式编写,并对其进行了部分修改,以提高数据传输的速度。
另外,还部分参照了haRt协议。
其具体格式如下:
表中,数据的最大字节数为16个。
也就是说,整个数据包最长为20个字节。
“校验和”是其前面所有数据异或得到的数值,然后将该数值msb位清零,使其满足0~7F的要求。
在验证接收数据包的“校验和”是否正确时,可将所有接收数据(包括“校验和”)进行异或操作,得到的数据应=0x80。
这是因为,只有“地址”的msb=1,所以异或结果的msb也必然等于1。
本协议不支持modbus中所规定的广播模式。
3.时序安排
在上电后,液位计将先延迟10秒,等待电源稳定。
然后,用5秒的时间进行自检和测试数据。
接着产品进入待机状态并打开Rs485通信接口,等待主机的请求。
因此,主机应在液位计上电20秒后,再将液位计置为工作状态,进行测量操作。
液位控制器(hmt-900或h-1000)主要用于液位计的供电和防爆安全隔离。
主机可通过Rts信号控制(hmt-900或h-1000)供给液位计的电源。
当Rts有效时,电源将被打开。
因此,液位计的电源是可以通过主机软件控制的。
在现场应用中,主机软件的工作时序一般应遵循以下几个步骤。
1)在开主机前,并认真检查各相关设备的电源和电缆连接情况。
2)在启动主机软件时,打开相应串行端口。
使能Rts信号,给液位计上电。
3)软件初始化操作,延迟20秒。
4)读液位计的相应参数,然后将液位计置为工作状态。
5)此时,主机可进入正常的轮训、记录、显示、报警等工作。
主机软件的主要工作是通过Rs485总线和各个液位计进行dgl格式的数据包通信。
因此,通信时序安排的好坏显得很重要。
在本协议中,主机只能有1个,并完全控制总线,任何从机在没有主机请求时,必需保持接收状态。
在设计从机电路时,应保证从机在上电时不能出现对总线的占用(发送状态),哪怕是很短的时间。
以免增加系统功耗,影响其“本质安全”性能。
虽然主机控制着总线,但在总线空闲状态,主机也应处于接收状态。
只有在向指定的从机发送请求数据包时,才进入发送状态。
主机的发送接收状态切换由其串口的dtR信号控制,可称为mdtR
mdtR在在t5(t7时刻)t5-t3=8~18ms,t6-t5=1.9~3.5ms,t7-t6=10~60ms,t8-t7=1~3.5ms。
一次通信的最长时间将控制在160ms以内。
两次数据包通信的间隔应≥20ms。
根据以上描述和规定,我们就可以精确地进行主机和从机的通信控制。
并根据可能出现的各种通信错误和故障,进行冗错设计。
4.命令定义
命令0x01通信协议识别码
请求数据:
0byte
应答数据:
3byte字符串“dgl”44,47,4c命令0x02地址更改
请求数据:
1bytenewadr-0x80应答数据:
1bytenewadr-0x80
注:
应答数据中仍保留为原来地址不变
命令0x03,0x4保留
命令0x05读厂家名
请求数据:
0byte
应答数据:
10byte字符串“almRtltd.”命令0x06读产品类型
请求数据:
0byte无应答数据:
8bytedt0~7
浮子数温度测点外管类型测杆材料安装形式防爆类型xx
命令0x07读产品杆长
请求数据:
0byte无
应答数据:
2bytedt0,dt1
基数:
2mm,范围:
≤20m,gl=(dt1*128+dt0)*2mm
命令0x08读温度测点位置
请求数据:
0byte
应答数据:
5bytedt0~4对应于Vt1~5位置相对杆长的百分数(0~99)。
命令0x09读产品序列号请求数据:
0byte无
应答数据:
4byte具体待定,存于mcueepRom中。
命令0x0a读电路和程序的版本号
请求数据:
0byte
应答数据:
2bytedt0电路版本,dt1程序版本命令0x0b读零点校准参数数据
请求数据:
0byte
应答数据:
8bytedt0~7
level1zero=((dt2*128+dt1)*128+dt0)*0.01mmdt30,数据求反level2zero=((dt6*128+dt5)*128+dt4)*0.01mmdt70,数据求反
命令0x0F设置产品工作状态
请求数据:
1bytedt0=0,产品工作;dt00,产品待机;应答数据:
1byte和请求数据相同。
命令0x10读液位1(level1,油面)数据
请求数据:
0byte
应答数据:
3bytedt0,dt1,dt2
分辨率:
0.01mm,范围:
30mm~20m(0x1e8480,dt2=7a,dt1=09,dt0=0)。
当dt2=dt1=dt=0时,液位下溢出;当dt2=dt1=dt=7F时,液位上溢出;level1=((dt2*128+dt1)*128+dt0)*0.01mm
命令0x11读液位2(level2,界面)数据
请求数据:
0byte
应答数据:
3bytedt0,dt1,dt2
level2=((dt2*128+dt1)*128+dt0)*0.01mm
命令0x12读两个液位数据
请求数据:
0byte
应答数据:
6bytedt0,dt1,dt2,dt3,dt4,dt5
level1=((dt2*128+dt1)*128+dt0)*0.01mmlevel2=((dt5*128+dt4)*128+dt3)*0.01mm
建议:
如需读液面2的数据时,应采用该命令。
这样,可同时得到液位1的值,
提高了通信速度。
命令0x13~0x14保留
命令0x15读各测杆测点温度(只有一个温度测点)
请求数据:
0byte
应答数据:
10bytedt0~9
分辨率(刻度):
kd=0.015625℃(2^-6),范围:
-56~130℃
Vt1=(dt1*128+dt0)*kd-56,Vt2=(dt3*128+dt2)*kd-56,
命令0x16保留
从以上协议可知,每个通信数据都用1byte的16进制数表示,数据包中的地址(addRess)字段长度为1byte,当ht-1000(主机)向upsd3200(从机)发送数据时,数据包中的地址(addRess)字段中msb应为1,因为此时数据包要到达的地址是从机,从机的地址范围为:
0x80~0xFd,即:
msb=1。
主机(ht-1000)没有地址(也许理论上应该有),主从机通信过程是这样的:
主机不断发出4个字节的数据包(地址,命令,字节数,校验和)去查询从机的测量情况,其中字节数为0,则没有数据字节,只需4个字节就可构成一个数据包。
如下:
811600178816001e84160012871600118F160019
以上5个数据包就是主机发往从机的数据包,第一个字节是地址,共有5个地址,即发往5个从机,每发一个数据包,主机会等待从机的回应,然后再发下一个数据包,如果等待超时,则认为通信错误(ht-1000上会显示xx号罐通信错误)。
若有回应,则主机进行数据处理,在友好的人机界面上显示相关测量信息。
第二个字节16是命令字,16的具体含义可查询具体命令字信息。
第三个00代表数据位是零个,第四个字节是校验和。
(这里设计协议的原则是尽可能是通信的字节数变少,减少信息在传输过程中的丢失,当然也要考虑扩展性)