zoukankan      html  css  js  c++  java
  • 什么是Modbus

    什么是Modbus

    1. Modbus如何工作

    Modbus是通过设备之间的几根连线来传递数据,最简单的设置就是主站和从站之间用一跟串口线相连。数据通过一串0或者1来传递,也就是位。0为正电压,1为负电压。位数据传递速度非常快,常见的传输速度为9600波特(即9600bits/s).

    2. 标准Modbus怎么存储数据

    信息存储在从站的四个不同的表中。两个表存储数字量,称为线圈;两个表存储模拟量,称为寄存器。线圈和寄存器分别有一个只读,另一个可读写。每个表可存储9999个值。线圈是一位的,地址从0000到270E;寄存器是一个字的(16位,2字节)地址也是从0000到270E.

    Coil/Register Numbers Data Addresses Type Table Name
    1-9999 0000 to 270E Read-Write Discrete Output Coils
    10001-19999 0000 to 270E Read-Only Discrete Input Contacts
    30001-39999 0000 to 270E Read-Only Analog Input Registers
    40001-49999 0000 to 270E Read-Write Analog Output Holding Registers

    线圈/寄存器编号可以看做是位置的名字,它们不出现在实际发送的信息当中,数据地址(Data Address)出现在实际发送的信息中。

    举个例子,第一个Holding Register的编号为40001,数据地址为0000.这两个数字的区别在于偏移量。

    3. 什么是从站ID

    在网络中,每一个从机分配一个唯一的设备地址,从1到247.当主机请求数据时,发送的信息的第一个字节就是从机地址,这样,从机接收到第一个字节后就知道是否忽略信息。

    4. 什么是功能码

    主机发送的第二个字节就是功能码。这个功能码告诉从机需要访问哪个表,是向这个表中写数据还是读数据。

    Fun Code Action Table Name
    01(01 hex) Read Discrete Output Coils
    05(05 hex) Write single Discrete Output Coil
    15(0F hex) Write multiple Discrete Output Coils
    02(02 hex) Read Discrete Input Contacts
    04(04 hex) Read Analog Input Registers
    03(03 hex) Read Analog Output Holding Registers
    06(06 hex) Write single Analog Output Holding Register
    16(10 hex) Write multiple Analog Output Holding Registers

    5. 什么是CRC

    CRC即循环冗余校验码(Cyclic Redundancy check),是在每一个发送的信息后面加上的两字节,用于检验发送和接受是否出错。信息中的每一个字节都用于计算CRC。接受设备同时计算CRC,然后与发送方计算的CRC进行比较,如果两者不同,则产生错误。

    6. Modbus发送指令和回应的格式

    Modbus发送指令和回应的格式

    Data Addresses Read Write Single Write Multiple
    Discrete Output Coils 0xxxx FC01 FC05 FC15
    Discrete Input Contacts 1xxxx FC02 NA NA
    Analog Input Registers 3xxxx FC04 NA NA
    Analog Output Holding Registers 4xxxx FC03 FC06 FC16

    注:FC表示Function Code

    eg1.

    数据请求:
    11 01 0013 0025 0E84
    11: 从机地址 (0x11 = 17 )
    01: 功能码01(读线圈状态)
    0013: 线圈首地址(0x0013=19,+1偏移量=#20线圈)
    0025: 要读的线圈数 (0x25 = 37, 20~56 )
    0E84: CRC校验和

    回应
    11 01 05 CD6BB20E1B 45E6
    11: 从机地址 (0x11 = 17 )
    01: 功能码01(读线圈状态)
    05:后面的字节数(37/8=5字节)
    CD:线圈27 - 20 (1100 1101)
    6B: 线圈35 - 28 (0110 1011)
    B2: 线圈43 - 36 (1011 0010)
    0E: 线圈51 - 44 (0000 1110)
    1B: 3空格和线圈56 - 52 (0001 1011)
    45E6: CRC校验和

    其他例子与此类似,不再赘述。

    来源:simplyModbus

  • 相关阅读:
    C#经典书籍推荐 [转]
    ubuntu的ADSL拨号上网(主要是无线网情况下) [转]
    2007元旦粤北山区:我的“多背1公斤”
    Javascript中给动态生成的表格添加样式,JavaScript里setAttribute的问题
    Asp.net2.0的AjaxPro中不能使用Server.HtmlEncode()函数?
    去了深圳出差,到了珠海泡温泉
    2007元旦粤北山区:翻山越岭到乳源,半途而废云门寺,风雨兼程向瑶山
    很好很强大的FLEX控件
    PHP生成PDF文档的FPDF类
    Flex,事件,绑定,机制
  • 原文地址:https://www.cnblogs.com/zhengkang/p/5712441.html
Copyright © 2011-2022 走看看