Chinaunix首页 | 论坛 | 博客
  • 博客访问: 363722
  • 博文数量: 102
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 1116
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-29 16:21
文章分类

全部博文(102)

文章存档

2014年(10)

2011年(1)

2008年(2)

2007年(89)

我的朋友

分类: 网络与安全

2014-07-01 23:09:23

 

一、命令格式

MODBUS-ASCII:冒号开头,回车换行结束。

1、命令号:02  读取输入状态取得一组开关输入的当前状态(ON/OFF) 

计算机发送命令:

 [开始标记][设备地址] [命令号02] [起始寄存器地址] [读取的寄存器数] [CRC校验的高8

] [CRC校验的低8

例:[11][02][00][04][CRC][CRC

发送代码:3AH,31H,31H,30H,32H,30H,30H,30H,34H,37H,38H,0DH,0AH 

 

意义如下:

<1>设备地址:在一个485总线上可以挂接多个设备,此处的设备地址表示想和哪一个设备通讯。例子中为想和17(十进制的17是十六进制的11)通讯。

 <2>命令号02:读取数字量的命令号固定为02

 <3>起始地址:表示想读取的开关量的起始地址(起始地址为0)。比如例子中的起始地址为0

 <4>输入状态总共读取数:表示从起始地址开始读多少个开关量。例子中为4个开关量。该设备只有4个输出即P00,P01,P02,P03

 <5>LRC校验:蓝色部分相加后取反,再加1

  

假设P0口读入的数据为: 

设备响应:[设备地址] [命令号02] [返回的字节个数][数据1][数据2]...[数据n][CRC校验的高8] [CRC校验的低8]  

例:[11][02][01][0A][CRC][CRC]  

发送代码:3AH,31H,31H,30H,32H,30H,31H,30H,46H,36H,35H,0DH,0AH 

 

意义如下:

<1>设备地址和命令号和上面的相同。 

<2>返回的字节个数:表示数据的字节个数,也就是数据12...n中的n的值。

<3>数据1...n:由于每一个数据是一个8位的数,所以每一个数据表示8个开关量的值,每一位为0表示对应的开关断开,为1表示闭合。例子中各输入继电器分别为:P0端口的检测输入为:P07断开、P06断开、P05断开、P04断开、P03闭合、P02断开、P01闭合、P00

断开

3、写数字量(线圈状态):

 计算机发送命令:[设备地址] [命令号05] [需下置的寄存器地址] [下置的数据] [CRC校验的高8] [CRC校验的低8]  

例:[11][05][06][00][CRC][CRC]  

发送代码:3AH,31H,31H,30H,35H,30H,36H,30H,30H,37H,33H,0DH,0AH 

意义如下: 

<1>设备地址和上面的相同。

<2>命令号:写数字量的命令号固定为05

<3>需下置的寄存器地址:表明了需要下置的开关的地址。设置P06,该设备智能设置P04,P05,P06,P07 

<4>下置的数据:表明需要下置的开关量的状态。例子中为把该开关断开。注意,此处只可以是[FF]表示闭合[00]表示断开,其他数值非法。

 <5>注意此命令一条只能下置一个开关量的状态。 

 设备响应:如果成功把计算机发送的命令原样返回,否则不响应。

 

6、:写数模的输出电压(不包含偏移电压)或偏移电压

 计算机发送命令:[设备地址] [命令号06] [偏移量或直接数据] [下置的数据高16] [16] [CRC校验的高8] [CRC校验的地8]  

例:[11][06][01][01][32][CRC][CRC]  

发送代码:3AH,31H,31H,30H,36H,30H,31H,30H,31H,33H,32H,31H,31H,0DH,0AH 

意义如下:

<1>设备地址和上面的相同。

<2>命令号:写模拟量的命令号固定为06

<3>偏移或数据:表明了下置的数据是偏移量还是直接数据,00:偏移量;01:直接数据 

<4>下置的数据高16位,低16位:表明需要下置的模拟量数据。比如例子中就把地址为06H的设备的DA输出电压为0132(不含偏置)。现在这个设备用2.048V基准,输出电压范围为:0-4.095V,输出数据为:0-409512AD 

<5>注意此命令一条只能下置一个模拟量的状态。

 

设备响应:如果成功把计算机发送的命令原样返回,否则不响应。 

7、读卡号(家族ID0-255,设备ID0-65535):  

计算机发送命令:[设备地址] [命令号65] [需要读取的卡号类别] [CRC校验的高8] [CRC校验的低8

1[11][65][01][CRC][CRC,假设卡的家族ID为:245,卡的设备码为:00325 

发送代码:3AH,31H,31H,36H,35H,30H,31H,44H,32H,0DH,0AH 

回答代码:3AH,31H,31H,36H,35H,30H,31H,32H,34H,35H,33H,37H,0DH,0AH 

2[11][65][02][CRC][CRC,假设卡的家族ID为:245,卡的设备码为:00325 

发送代码:3AH,31H,31H,36H,35H,30H,31H,44H,32H,0DH,0AH 

回答代码:3AH,31H,31H,36H,35H,30H,31H,30H,30H,33H,32H,35H,44H,38H,0DH,0AH  

意义如下:

 <1>设备地址和上面的相同。

 <2>命令号:读卡号命令为65

 <3>需要读取的卡号类别:读家族ID01,读设备ID02,但家族ID回答时至回答3位,设备ID回答时要回答5位。  

设备响应:

  家族ID回答时至回答3位,设备ID回答时要回答5位。 

8、设置方波,三角波,正弦波DA输出:

两个参数:A

A是相位:范围:0-4095F是频率:范围:0-9999(实际最高12.5MHz

 计算机发送命令:[设备地址] [命令号66] [需要输出波形类别] [参数A] [参数F] [CRC校验高8] [CRC校验的低8]  

1[11][66][01][00[00][25][00][CRC][CRC,当前相位为360°× 0/4095=0,频率为2500Hz的方波 

发送代码:3AH,31H,31H,36H,36H,30H,31H,30h,30h,30h,30h,32h,35h,30h,30H,34H,41H, 0DH,0AH  //校验码:4A 

2[11][66][02] [00[00][10][00][CRC][CRC,当前相位为360°× 0/4095=0,频率为1000Hz的正弦波

发送代码:

3AH,31H,31H,36H,36H,30H,32H,30h,30h,30h,30h,31h,30h,30h,30H,34H,46H,0DH,0AH //校验码:4F 

意义如下:

<1>设备地址和上面的相同。

<2>命令号波形输出命令为66

<3>需要输出波形类别:方波为01,三角波为02,正弦波为03   

设备响应:

  设备响应:如果成功把计算机发送的命令原样返回,否则不响应。

二、错误码说明

01、非法功能

对于服务器(或从站)来说,询问中接收到的功能码是不可允许的操作。这也许是因为功能码仅仅适用于新设备而在被选单元中是不可实现的。同时,还指出服务器(或从站)在错误状态中处理这种请求,例如:因为它是未配置的,并且要求返回寄存器值。

02、非法数据地址

对于服务器(或从站)来说,询问中接收到的数据地址是不可允许的地址。特别是,参考号和传输长度的组合是无效的。对于带有100个寄存器的控制器来说,带有偏移量96和长度4的请求会成功,带有偏移量96和长度5的请求将产生异常码02

03、非法数据值

对于服务器(或从站)来说,询问中包括的值是不可允许的值。这个值指示了组合请求剩余结构中的故障,例如:隐含长度是不正确的。并不意味着,因为MODBUS协议不知道任何特殊寄存器的任何特殊值的重要意义,寄存器中被提交存储的数据项有一个应用程序期望之外的值。

04、从站设备故障

当服务器(或从站)正在设法执行请求的操作时,产生不可重新获得的差错。

 

05、确认

与编程命令一起使用。服务器(或从站)已经接受请求,并切正在处理这个请求,但是需要长的持续时间进行这些操作。返回这个响应防止在客户机(或主站)中发生超时错误。客户机(或主站)可以继续发送轮询程序完成报文来确定是否完成处理。

06、从属设备忙

与编程命令一起使用。服务器(或从站)正在处理长持续时间的程序命令。张服务器(或从站)空闲时,用户(或主站)应该稍后重新传输报文。

 

08、存储奇偶性差错

与功能码2021以及参考类型6一起使用,指示扩展文件区不能通过一致性校验。服务器(或从站)设法读取记录文件,但是在存储器中发现一个奇偶校验错误。客户机(或主方)可以重新发送请求,但可以在服务器(或从站)设备上要求服务。

0A、不可用网关路径

与网关一起使用,指示网关不能为处理请求分配输入端口至输出端口的内部通信路径。通常意味着网关是错误配置的或过载的。

0B、网关目标设备响应失败

与网关一起使用,指示没有从目标设备中获得响应。通常意味着设备未在网络中。

三、命令码说明

Modbus通讯协议是一种简单的被所有软硬件工控厂商免费支持的通讯协议。FCS900可直接连接组态王、MCGSIFIX等国内外组态软件,可以在1200范围内轻松组建具有AIAODIDO等秒级远程、分散数据采集控制系统。也可以直接连接PLCDCS等上位机,作为远程I/O使用。

    一线通模块按从机MODBUS协议设计,若波特率、齐偶校验、起始位、停止位、数据位、从机地址等通讯参数设置正确,模块可以同任何主机MODBUS设备直接通讯。

    FCS900系列模块的通讯参数为:19200bps/1位起始位/1位停止位/无校验位/MODBUS-RTU协议。

    模块支持下述MODBUS功能,所有功能按标准MODBUS协议设计。

1,功能码02H:成组读取一线通模块的数字量输入信号状态(DI)。

2,功能码03H:成组读取一线通模块的模拟量输入信号(AI)。

3,功能码04H:成组读取一线通模块的模拟量输入信号(AI)。

4,功能码05H:设置一线通模块的单一输出线圈的状态(DO)。

5,功能码06H:设置一线通模块的单一模拟量存储器内容(AO)。

6,功能码0FH:成组设置一线通模块的数字量输入信号状态(DO)。

7,功能码10H:成组设置一线通模块的模拟量输出信号状态(AO)。

    

功能码02H是读取各通道数字量采集结果命令。通讯首先由MODBUS主机设备发送“主机发信数据帧”,指明通讯对象的从机地址(一线通模块地址)、数据的起始寄存器地址、数据数量和本次数据帧的CRC校验。一线通模块接收到“主机发信数据帧”后,判断从机地址是否与本机地址相同以及CRC校验是否出错,若地址不同或CRC出错,一线通模块不作响应;若地址相同且CRC校验结果正确,一线通模块发送“从机回信数据帧”,向主机发送对应的数字量数据。

主机发信数据帧:

地址 02 起始地址高字节  起始地址低字节 数据量高字节数 据量低字节

从机回信数据帧:

地址02数据字节数 数据1数据2。。。。。。数据n CRC高字节CRC低字节

——地址:网络中的从机地址,即FCS900模块的地址编号,参见“一线通模块设置”章节。

——起始地址:双字节,要读取寄存器的起始地址,此数据要求比实际的数据地址小1

——数据量:双字节,116

——数据字节量:12

——数据:一线通模块发送给主机的数据,低位低寄存器地址。

——CRC:双字节CRC校验码。

支持MODBUS功能码02HFCS900模块有FCS931FCS941FCS942FCS951FCS952FCS953FCS954

16之间,超过该范围一线通模块可能拒绝响应;

8之间,超过该范围一线通模块可能拒绝响应。

输出通道状态,可以使用02功能码读出。

  

FCS900一线通模块对功能码34没有区别,两组命令都是读取各通道模拟量采集结果,下述仅以功能码4为例,详述MODBUS通讯的通讯过程。通讯首先由MODBUS主机设备发送“主机发信数据帧”,指明通讯对象的从机地址(一线通模块地址)、数据的起始寄存器地址、数据数量和本次数据帧的CRC校验。FCS900一线通模块接收到“主机发信数据帧”后,判断从机地址是否与本机地址相同以及CRC校验是否出错,若地址不同或CRC出错,FCS900一线通模块不作响应;若地址相同且CRC校验结果正确,FCS900一线通模块发送“从机回信数据帧”,向主机发送对应的模拟量数据。

主机发信数据帧:

地址 04 起始地址高字节 起始地址低字节 数据量高字节 数据量低字节

从机回信数据帧:

地址04数据字节数 数据1高字节 数据1低字节。。。数据n高字节 数据n低字节CRC高字节 CRC低字节

——地址:网络中的从机地址,即FCS900模块的地址编号,参见“一线通模块设置”章节。

——起始地址:双字节,要读取寄存器的起始地址,此数据要求比实际的数据地址小1

——数据量:双字节,1128

——数据字节量:2256间的偶数;

——数据:FCS900发送给主机的数据,双字节无符号整数,高位在前,低位在后;

——CRC:双字节CRC校验码。

        支持MODBUS功能码03H04HFCS900模块有FCS911FCS912FCS913FCS914FCS915FCS921FCS922FCS952FCS953FCS954

16之间,超过该范围一线通模块可能拒绝响应。

8之间,超过该范围一线通模块可能拒绝响应。

14之间,超过该范围一线通模块可能拒绝响应。

8之间,超过该范围一线通模块可能拒绝响应。

功能码5是单一通道数字量输出命令,通讯首先由MODBUS主机设备发送“主机发信数据帧”,指明通讯对象的从机地址(一线通模块地址)、数据的寄存器地址、数据和本次数据帧的CRC校验。FCS900一线通模块接收到“主机发信数据帧”后,判断从机地址是否与本机地址相同以及CRC校验是否出错,若地址不同或CRC出错,FCS900一线通模块不作响应;若地址相同且CRC校验结果正确,FCS900一线通模块发送“从机回信数据帧”。

主机发信数据帧:

地址05数据地址高字节 数据地址低字节 数据高字节 数据低字节

从机回信数据帧(FCS941回信数据帧):

地址05数据地址高字节 数据地址低字节 数据高字节 数据低字节

——地址:网络中的从机地址,即FCS900模块的地址编号,参见“一线通模块设置”章节。

——数据地址:双字节,输出寄存器地址,此数据要求比实际的数据地址小1

——数据:双字节,数据为零时,使出输出接点断开;数据非零时,输出接点闭合。

——CRC:双字节CRC校验码。

支持MODBUS功能码05HFCS900模块有FCS941FCS942FCS951FCS953FCS954

16之间,超过该范围一线通模块可能拒绝响应。

8之间,超过该范围一线通模块可能拒绝响应。

之间,超过该范围一线通模块可能拒绝响应。

16之间,超过该范围一线通模块可能拒绝响应。

功能码6是单一通道模拟量输出命令,通讯首先由MODBUS主机设备发送“主机发信数据帧”,指明通讯对象的从机地址(FCS900一线通模块地址)、数据的寄存器地址、数据数值和本次数据帧的CRC校验。FCS900一线通模块接收到“主机发信数据帧”后,判断从机地址是否与本机地址相同以及CRC校验是否出错,若地址不同或CRC出错,FCS900一线通模块不作响应;若地址相同且CRC校验结果正确,FCS900一线通模块发送“从机回信数据帧”,向主机发送应答帧。

主机发信数据帧:

地址06数据地址高字节 数据地址低字节 数据高字节 数据低字节CRC高字节CRC低字节

从机回信数据帧:

地址06数据地址高字节 数据地址低字节 数据高字节 数据低字节CRC高字节CRC低字节

——地址:网络中的从机地址,即FCS900模块的地址编号,参见“一线通模块设置”章节。

——数据地址:双字节,输出寄存器地址,此数据要求比实际的数据地址小1

——数据:双字节,即模拟量输出值。

——CRC:双字节CRC校验码。

支持MODBUS功能码06HFCS900模块有FCS921FCS922

超过该范围一线通模块可能拒绝响应。

超过该范围一线通模块可能拒绝响应。

功能码0FH是成组数字量输出命令,通讯首先由MODBUS主机设备发送“主机发信数据帧”,指明通讯对象的从机地址(FCS900一线通模块地址)、数据的寄存器地址、数据数值和本次数据帧的CRC校验。FCS900一线通模块接收到“主机发信数据帧”后,判断从机地址是否与本机地址相同以及CRC校验是否出错,若地址不同或CRC出错,FCS900一线通模块不作响应;若地址相同且CRC校验结果正确,FCS900一线通模块发送“从机回信数据帧”,向主机发送应答帧。

主机发信数据帧:

地址0F数据地址双字节 数据量双字节数据 字节量数据1数据2数据N CRC双字节

从机回信数据帧:

地址0F数据地址双字节 数据量双字节CRC双字节

——地址:网络中的从机地址,即FCS900模块的地址编号,参见“一线通模块设置”章节。

—— 数据地址:双字节,输出寄存器地址,此数据要求比实际的数据地址小1

——字节量:单字节,后面数据的字节数量。

——数据:低位低寄存器地址。。

——CRC:双字节CRC校验码。

支持MODBUS功能码05HFCS900模块有FCS941FCS942FCS951FCS953FCS954

16之间,超过该范围一线通模块可能拒绝响应。

8之间,超过该范围一线通模块可能拒绝响应。

之间,超过该范围一线通模块可能拒绝响应。

16之间,超过该范围一线通模块可能拒绝响应。

功能码10H是成组模拟量输出命令(AO)。通讯首先由MODBUS主机设备发送“主机发信数据帧”,指明通讯对象的从机地址(FCS900一线通模块地址)、数据的寄存器地址、数据数值和本次数据帧的CRC校验。FCS900一线通模块接收到“主机发信数据帧”后,判断从机地址是否与本机地址相同以及CRC校验是否出错,若地址不同或CRC出错,FCS900一线通模块不作响应;若地址相同且CRC校验结果正确,FCS900一线通模块发送“从机回信数据帧”,向主机发送应答帧。

主机发信数据帧:

地址10数据地址双字节 数据量双字节 字节量 数据1双字节 数据2双字节 数据N双字节CRC双字节

从机回信数据帧:

地址10数据地址双字节 数据量双字节CRC双字节

——地址:网络中的从机地址,即FCS900模块的地址编号,参见“一线通模块设置”章节。

—— 数据地址:双字节,输出寄存器地址,此数据要求比实际的数据地址小1

——字节量:单字节,后面数据的字节数量。

——数据:双字节,即模拟量输出值。

——CRC:双字节CRC校验码。

支持MODBUS功能码10HFCS900模块有FCS921FCS922

超过该范围一线通模块可能拒绝响应。

超过该范围一线通模块可能拒绝响应。

自由口通讯

MODBUS数据格式完全相同,FCS900自动识别MODBUS协议和自由口通讯协议,不需设置。

MODBUS协议采用双字节CRC错误校验,在自由通讯口编程时错误校验采用双字节累加和校验,即将校验字节之前的所有单字节数据相加,所得双字节结果即是累加和校验。注意:累加时保留进位位。

MODBUS通讯协议命令与自由口通讯命令对照:

MODBUS命令码自由口命令码功能描述

02H--------C2H

03H--------C3H

04H--------C4H

05H--------C5H

06H--------C6H

0FH--------CFH

10H--------D0H

主机发信数据帧:

地址C2起始地址高字节 起始地址低字节 数据量高字节 数据量低字节

从机回信数据帧:

地址C2数据字节数 数据1数据2。。。。。。数据n

    通过自由口编程,上位机读取#2地址FCS911模块的1~3通道的模拟量采集数据,采用C4H功能码,上位机按照下述组织数据:

地址=02H

命令吗=C4H

数据地址H=00H

数据地址L=00H;(比实际地址小1)。

数据量H=00H

数据量L=03H

累加和H=00H

累加和L=C9H;(累加和:02H+C4H+00H+00H+00H+03H=00C9H)。

  按上述数据,上位机发送数据帧02HC4H00H00H00H03H00HC9H#2模块FCS911接收到命令并验证无误后,发送下面的回信数据帧。(假设1~3通道的采集数据分别为139240360。)

回信数据帧:02HC4H06H00H8BH00HF0H01H68H02HB0H

地址=02H

命令吗=C4H

数据字节=06H

数据1H=00H

数据1L=8BH;(139

数据2H=00H

数据2L=F0H;(240

数据3H=01H

数据3L=68H;(360

累加和H=02H

累加和L=B0H;(累加和:02H+84H+06H+00H+8BH+00H+F0H+01H+68H=02B0H)。

其他命令格式类似。

阅读(1483) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~