瓦萨变频器通讯协议新串口通讯协议SUN.docx
《瓦萨变频器通讯协议新串口通讯协议SUN.docx》由会员分享,可在线阅读,更多相关《瓦萨变频器通讯协议新串口通讯协议SUN.docx(16页珍藏版)》请在冰豆网上搜索。
![瓦萨变频器通讯协议新串口通讯协议SUN.docx](https://file1.bdocx.com/fileroot1/2023-2/25/347aab5b-5fd5-41d3-b9eb-0c6df6c45753/347aab5b-5fd5-41d3-b9eb-0c6df6c457531.gif)
瓦萨变频器通讯协议新串口通讯协议SUN
串行通讯功能V1.0
使用串口通讯功能时,使用参数E011来设定变频器的通讯界面、通讯格式和和通讯地址。
1通讯口参数设定
E011=TF.ID(T:
通讯界面、F:
通讯格式,ID:
通讯地址):
1.通讯地址设定范围:
ID=01~99,工作在同一网络中的多台机器均应单独设定其地址。
2.通讯界面设定说明如下:
通讯界面
说明
T=0
Ascii通讯模式,RS232
T=1
Ascii通讯模式,RS485
T=2
ModbusRTU通讯模式,RS232
T=3
ModbusRTU通讯模式,RS485
3.通讯格式设定说明如下:
通讯格式
说明
F=0
2400bps,7Databits,EvenParity,2Stopbits
F=1
4800bps,7Databits,EvenParity,2Stopbits
F=2
9600bps,7Databits,EvenParity,2Stopbits
F=3
19200bps,7Databits,EvenParity,2Stopbits
F=4
2400bps,8Databits,EvenParity,1Stopbits
F=5
4800bps,8Databits,EvenParity,1Stopbits
F=6
9600bps,8Databits,EvenParity,1Stopbits
F=7
19200bps,8Databits,EvenParity,1Stopbits
F=8~9
保留
2硬件接口
选配相应的通讯接口板,可以实现RS485或RS232通讯所需的功能。
3Ascii通讯模式
本通讯模式采用标准ASCII(AmericanStandardCodeforInformationinterchange)字符实现变频器与上位机之间的通讯。
3.1对变频器的命令
经由RS485界面与变频器之间的讯息沟通都是通过ASCII,结尾需加CR符号(0x0D)。
3.1.1运转控制命令:
命令格式[C,uu,cc,fffff]
C:
运转控制命令之起始字符。
uu:
通讯地址,指定第uu台接受本字符。
uu(ID)可指定为第00~99台。
若uu=00,则所有的变频器都必须接受命令,但变频器不会回复数据给上位机。
cc:
十进制运转控制命令代码(00~15)。
由四个二进制信号组成。
cc=8*Bit-3(寸动)+4*Bit-2(逆转)+2*Bit-1(正转)+Bit-0(复位)
fffff:
速度设定值。
3.1.2参数书写命令:
命令格式[W,uu,nnn,ddddd]
W:
参数书写命令之起始字符。
uu:
通讯地址,指定第指定第uu台接受本字符。
uu(ID)可指定为第00~99台。
若uu=00,则所有的变频器都必须接受命令,但变频器不会回复数据给上位机。
nnn:
参数号码为三位数“nnn”,参数号码由000~999。
ddddd:
欲写入之参数值,由00000~65535。
3.1.3参数读取命令(变频器在将会回复参数值及运转状况)
命令格式[R,uu,nnn]
R:
参数读取命令之起始字符。
uu:
通讯地址,指定第指定第uu台接受本字符。
uu(ID)可指定为第01~99台。
读取命令时,地址uu(ID)指定为0时无效。
nnn:
参数号码为三位数“nnn”,参数号码由000~999。
3.2变频器回复电脑的讯息
在变频器接到要求的参数读取命令时,立即开始回复该参数及当时之运转资料。
回复讯息之格式[P,uu,nnn,tt,ddddd,s,aaaa]
P:
参数回复讯息之起始字符。
uu:
指出本字符串为第uu台回复讯息。
由各变频器的参数Pr.93决定本身的通讯地址。
nnn:
参数号码为三位数“nnn”,参数号码由000~255。
tt:
回复参数之小数点类型。
tt=4,特殊类型整数
tt=3,两位小数
tt=2,一位小数
tt=0,整数
ddddd:
回复之参数值(00000~65535)。
s:
回复变频器输出状态。
s=1,变频器逆转输出中。
s=2,变频器正转输出中。
s=3,变频器停止。
s=其它值,未定义。
aaaa:
回复变频器最近四次故障记录。
(0000~9999)
四个数字分别代表最近四次故障之代码记录:
千位数之a:
代表现在的故障状况之代码。
百位数之a:
代表前一次的故障状况之代码。
十位数之a:
代表前二次的故障状况之代码。
个位数之a:
代表前三次的故障状况之代码。
4ModbusRTU通讯模式
本通讯模式采用标准ModbusRTU(RemoteTerminalUnit)通讯格式。
通讯格式
START(起始位)
大于10ms的间隔时间
ADR(通讯地址)
8-bit通讯地址
CMD(通讯指令)
8-bit指令码
DATA(数据)(n-1)
n×8-bit数据内容(n<=25)
…….
DATA(数据)0
CRCCHK(校验)Low
CRC校验值值
CRCCHK(校验)High
END
大于10ms的间隔时间
ADR(通讯地址)
合法的通讯地址范围在0到99之间。
通讯地址为0表示对所有变频器进行广播,在此情况下,变频器将不会发送回复信息。
通讯对应的地址规定如下:
项目
地址(Hex/Dec)
功能说明
驱动器内部设定参数
0~0xff
0~255
对应变频器的内部参数号码(F000~F255)
驱动器内部控制参数
0x2000
8192
控制指令
0x2001
8193
设置频率
驱动器内部状态参数
0x2100
8448
运行频率
0x2101
8449
输出电流
0x2102
8450
直流母线电压
0x2103
8451
输出电压
0x2104
8452
散热器温度
0x2105
8455
输入端子状态(DI1~DI6)
0x2106
8456
控制端子状态(DI7~DI12)
0x2107
8457
输出端子状态(DO1~DO6)
0x2108
8458
当前控制指令
0x2109
8459
当前运行状态
0x210a
8460
当前变频器故障类型
0x210b
8461
当前设置频率
驱动器内部位控制变量
0x3000
12288
停止控制
0x3001
12289
复位控制
0x3002
12290
正向运行控制
0x3003
12291
反向运行控制
0x3004
12292
正向点动运行控制
0x3005
12293
反向点动运行控制
0x3006
12294
DI1控制
0x3007
12295
DI2控制
0x3008
12296
DI3控制
0x3009
12297
DI4控制
0x300a
12298
DI5控制
0x300b
12299
DI6控制
0x300c
12300
DI7控制
0x300d
12301
DI8控制
0x300e
12302
DI9控制
0x300f
12303
DI10控制
0x3010
12304
DI11控制
0x3011
12305
DI12控制
驱动器内部位状态变量
0x3100
12544
停止状态
0x3101
12545
运行状态
0x3102
12546
正向运行状态
0x3103
12547
反向运行状态
0x3104
12548
直流刹车状态
0x3105
12549
故障状态
0x3106
12550
DI1状态
0x3107
12551
DI2状态
0x3108
12552
DI3状态
0x3109
12553
DI4状态
0x310a
12554
DI5状态
0x310b
12555
DI6状态
0x310c
12556
DI7状态
0x310d
12557
DI8状态
0x310e
12558
DI9状态
0x310f
12559
DI10状态
0x3110
12560
DI11状态
0x3111
12561
DI12状态
0x3112
12562
DO1状态
0x3113
12563
DO2状态
0x3114
12564
DO3状态
0x3115
12565
DO4状态
0x3116
12566
DO5状态
0x3117
12567
DO6状态
CMD(指令指令)及DATA(数据字符)
数据字符之格式依指令码而定。
可用之指令码叙述如下:
3.3.1数据读取指令(0x03):
读取N个字(word,16-bit双字节),N最大为12。
例如:
从地址0x01之交流电机驱动器的地址0x0010开始读取2个字:
上位机发送信息
变频器回复信息
ADR
0x01
ADR
0x01
CMD
0x03
CMD
0x03
数据地址(High)
0x00
资料数
0x04(byte)
数据地址(Low)
0x10
数据1(High)
0x00
资料数(High)
0x00(word)
数据1(Low)
0x55
资料数(Low)
0x02(word)
数据2(High)
0x00
CRCCHK(Low)
0xc5
数据2(Low)
0xaa
CRCCHK(High)
0xce
CRCCHK(Low)
0x6a
CRCCHK(High)
0x5c
3.3.2数据写入指令(0x05)
写1个字(word,16-bit双字节),例如,将5000(0x1388)写到地址为0x01变频器内部的0x0010地址:
上位机发送信息
变频器回复信息
ADR
0x01
ADR
0x01
CMD
0x06
CMD
0x05
数据地址High
0x00
数据地址High
0x00
数据地址Low
0x10
数据地址Low
0x10
数据内容High
0x13
数据内容High
0x13
数据内容Low
0x88
数据内容Low
0x88
CRCCHKLow
0x85
CRCCHKLow
0x85
CRCCHKHigh
0x59
CRCCHKHigh
0x59
CRCCHK(CRC校验)
RTU通讯模式采用CRC方式进行数据校验,包含一16位的二进制值。
它由传输设备根据要传输的数据计算后加入到消息中。
接收设备重新计算收到消息的CRC,并与接收到的CRC域中的值比较,如果两值不同,则有误。
CRC计算时先调入一值是全“1”的16位寄存器,然后调用一过程将消息中连续的8位字节各当前寄存器中的值进行处理。
CRC产生过程中,每个8位字符都单独和寄存器内容相或(OR),结果向最低有效位方向移动,最高有效位以0填充。
LSB被提取出来检测,如果LSB为1,寄存器单独和预置的值或一下,如果LSB为0,则不进行。
整个过程要重复8次。
在最后一位(第8位)完成后,下一个8位字节又单独和寄存器的当前值相或。
最终寄存器中的值,是消息中所有的字节都执行之后的CRC值。
仅每个字符中的8Bit数据对CRC有效,起始位和停止位以及奇偶校验位均无效。
CRC添加到消息中时,低字节先加入,然后高字节。
附1:
变频器控制指令码
控制码cc
功能
cc=00
控制变频器停止
cc=01
控制变频器复位
cc=02
控制变频器正向运转
cc=06
控制变频器逆向运转
cc=10
控制变频器寸动正转
cc=14
控制变频器寸动逆转
附2:
故障代码表:
故障讯息显示
故障代码
故障说明
--
0
正常无故障
CA
1
加速中过电流
Cd
2
减速中过电流
OC
3
运转中过电流
OH
4
过热
OP
5
电压过高
UP
6
电压过低
OL
7
过负荷
CB
8
刹车中过电流
CS
9
软件检知过电流
SE
10
系统自检故障
modbusRTU常见问题汇总
点击次数:
7359发布时间:
2013-5-14
1、ModBusRTU通讯协议与ModBus通讯协议有什么区别?
ModBus协议是应用层报文传输协议(OSI模型第7层),它定义了一个与通信层无关的协议数据单元(PDU),即PDU=功能码+数据域。
ModBus协议能够应用在不同类型的总线或网络。
对应不同的总线或网络,Modbus协议引入一些附加域映射成应用数据单元(ADU),即ADU=附加域+PDU。
目前,Modbus有下列三种通信方式:
1.以太网,对应的通信模式是MODBUSTCP。
2.异步串行传输(各种介质如有线RS-232-/422/485/;光纤、无线等),对应的通信模式是MODBUSRTU或MODBUSASCII。
3.高速令牌传递网络,对应的通信模式是ModbusPLUS。
2、关于MODBUSRTU通讯协议的提问?
modbus主要由站地址(一个字节)+功能码(一个字节)+首地址(两个字节)+访问字数(两个字节)+校验码(CRC16或LRC两个字节)总共8个字节组成。
其实VB中编程很简单从组建添加MSComm组建就行了,难的是校验,
3、modbus、rtu、modbusrtu分别是什么?
modbus协议是工控行业的标准协议,前身为莫迪康所写,现已被施奈德收购
而modbus分为两种协议:
即串口协议(modbusrtu)和网口协议(modbustcp)协议,一般的工控机只支持rs232或者RS485的串口模式,这个时候工控机的协议栈里就只有modbusRTU协议,当他从串口接收到数据时,会直接根据报文中的数据进行控制,如果需要用modbusTCP协议进行传输,则需要使用带有网口的PLC
具体的帧格式如下
modbusRTU 地址域功能码数据差错校验
modbusTCP 目的地址协议id长度单元号功能码数据
简单的说tcp是由RTU加工而来的
而RTU则是另外一种概念,不包含在modbus协议内
是工控行业对监控设备的简称。
4、关于modbus_RTU协议主机发送的命令的一些问题
•01读保持线圈状态(Readcoilstatus)
•02读输入线圈状态(Readinputstatus)
•03读保持寄存器(Readholdingregister)
•04读输入寄存器(Readinputregister)
•05写单个线圈(Forcesinglecoil)
•06写单个寄存器(Presetsingleregister)
•15写多个线圈(Forcemultiplecoils)
•16写多个寄存器(Presetmultipleregisters)
这些都是什么意思
答:
01读取逻辑线圈组状态
02读取离散量线圈组状态
03读取一个或多个保持寄存器的二进制值
04读取一个或多个输入寄存器的二进制值
05改变逻辑线圈状态
06改变单个寄存器的二进制值
15改变多个寄存器的二进制值
16指定多个操持寄存器的二进制值
5、OPC转modbusRTU方式我现在有一个OPC服务器,里面很多tag,tag是AB里出来的,怎么将tag连到modbus?
Profibus、Fielbus、Modbus、CC-link等等是各中PLC硬件支持的通讯协议,这个是各厂商的硬件属性一样.只是现在计算机组态软件都支持很多种协议的PLC.你理解反了.
Profibus、Fielbus、Modbus、CC-link这些协议,是一种通讯协议,一般不需要你去编程,就好象你使用计算机,你不需要编写IP协议一样,只是要遵循它.
遵循的意思就是,你必须按照该厂家所支持的协议在PLC或者DCS硬件组态的时候按照该通讯协议设置硬件.其实这个很简单.这里简单指的是,你学编程,重点是编写执行控制的动作的程序,硬件通讯协议不需要你自己动手写。
6、什么是modbusrtumaster?
就是选RTU模式,因为MODBUS分为ASCII模式和RTU模式,MASER就是设置为主站,一般为PLC端,变频器设为从站,还要注意主站和从站地址的设置。
7、Modbusrtu为什么没有开始和结束标记?
由于Modbusrtu帧的每个字节是16进制数,数值范围在00~FF,若像ModbusASCII那样用02、03表示开始和结束标记,则与数值2、3发生冲突,无法判断其是标记还是数值,无法数据解包。
8、modbustcp到rtu的转换?
请仔细查看帧格式,
modbusRTU 地址域功能码数据差错校验
modbusTCP 目的地址协议id长度单元号功能码数据
写一个TCP转RTU的程序放到设备里做modbus网桥即可
9、MODBUSRTU通讯线被烧?
用万用表量一下出来的通讯线,电压不超过5V应该没问题,一般不会烧东西,接的时候区分正和负。
很多产品B是正,量一下看看。
10、触摸屏modbusrtu怎么设置?
一般是通过宏指令自己编程实现,当然也有支持RTU的,在通讯类型菜单
11、MODBUSRTU协议中浮点数是如何存储,读到浮点数寄存器的数值如何转换成所需的浮点数?
浮点数保存的字节格式如下:
地址 +0 +1 +2 +3
内容 SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM
这里
S代表符号位,1是负,0是正
E偏移127的幂,二进制阶码=(EEEEEEEE)-127。
M24位的尾数保存在23位中,只存储23位,最高位固定为1。
此方法用最较少的位数实现了较高的有效位数,提高了精度。
零是一个特定值,幂是0尾数也是0。
浮点数-12.5作为一个十六进制数0xC1480000保存在存储区中,这个值如下:
地址+0 +1 +2 +3
内容0xC1 0x48 0x00 0x00
浮点数和十六进制等效保存值之间的转换相当简单。
下面的例子说明上面的值-12.5如何转换。
浮点保存值不是一个直接的格式,要转换为一个浮点数,位必须按上面的浮点数保存格式表
所列的那样分开,例如:
地址 +0 +1 +2 +3
格式 SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM
二进制 11000001 01001000 00000000 00000000
十六进制 C1 48 00 00
从这个例子可以得到下面的信息:
符号位是1表示一个负数 幂是二进制10000010或十进制130,130减去127是3,就是实际的幂。
尾数是后面的二进制数10010000000000000000000
在尾数的左边有一个省略的小数点和1,这个1在浮点数的保存中经常省略,加上一个1和小数点到尾数的开头,得到尾数值如下:
1.10010000000000000000000
接着,根据指数调整尾数.一个负的指数向左移动小数点.一个正的指数向右移动小数点.因为指数是3,尾数调整如下:
1100.10000000000000000000
结果是一个二进制浮点数,小数点左边的二进制数代表所处位置的2的幂,例如:
1100表示
(1*2^3)+(1*2^2)+(0*2^1)+(0*2^0)=12。
小数点的右边也代表所处位置的2的幂,只是幂是负的。
例如:
.100...表示(1*2^(-1))+(0*2^(-2))+(0*2^(-2))...=0.5。
这些值的和是12.5。
因为设置的符号位表示这数是负的,因此十六进制值0xC1480000表示-12.5。
12、RS-485的设备,遵守MODBUS-RTU协议。
怎样用的电脑读取信息?
用电脑的串口,接个485转换器,接到设备的485接口,再找个串口软件,根据设备资料上的寄存器地址发送modbus报文,modbus报文通过串口软件发送啊,报文格式:
010300000001840A读寄存器命令。
13、vbmodbus给modScan32rtu发送数据应该怎么写?
确定两个软件哪个是主,哪个是从。
然后再确定通讯协议是RTU、ASCII还是TCP。
如果是TCP,就用socket控件。
RTU\ASCII就用COM控件。
然后给对应的口按照协议收发数并解析就可以了。
14、ModBusRTU通讯协议与ModBus通讯协议有什么区别?
modbus协议包括了MODBUSRTU
15、modbusrtu通讯协议如何判断超时?
设置一个标志量用来表示是否超时;再用一个定时器,定时时长为发送3.5个字符的时间(当然为了保险时间可以长一些);在定时器中置超时标志;在串口中断中每收到一个字节时定时器清零;主程序中根据超时标志做相应处理。
16、如何理解MODBUS协议RTU模式中的1.5和3.5字符间隔?
发送两帧数据之间要有一定的时间间隔,以保证接收方UART能够区分。
这个时间间隔在MODBUSRTU模式中要求是1.5和3.5字符间隔,也即是传输1.5和3.5个字符的时间,它与设置的通信参数有关,计算为:
若串口通信参数设置为(注:
开始位固定为1):
数据位8,奇偶校验位1,停止位1,波特率9600bps,
则传输一个字符(即1个字节)的时间为:
(1+8+1+1)/9600=0.00114583s=1.1454583ms
1.5字符间隔=1.5x1.1454583ms=1.71818745ms
3.5字符间隔=3.5x1.1454583ms=4.00910405ms
17、MODBUSRTU测试软件?
推荐:
modscan32
18、MODBUS RTU协议,上位机与仪表通信,读写数据都正确,为