联系我们

联系人:彭先生(先生)

联系手机:13141012009

固定电话:69098100

企业邮箱:abbvvvf@163.com

联系我时,请说是在瑞启化工网上看到的,谢谢!

今日最新资讯
热门资讯
瑞启化工网资讯
    西门子s7-200 smart中的modbus rtu通讯
    发布者:bjigbt  发布时间:2022-06-08 11:22:49  访问次数:262

    西门子s7-200 smart中的modbus rtu通讯

    s7 200 smart做为主站,从站为一个环保数采仪,从站地址为1:9600:8:无:1

    1、主站读取从站的三个模拟量:400001(float),400083(int),400085(int)
    请问主站如何设置指针地址以及寄存器地址,需要做轮询吗,如何做。(多从站需要轮询,这种单从站的如何读跨度较大地址的数值)

    1、400001-400085 这一片连续区域读,仪表允不允许读,这个要看说明书;

         即使允许读,数据量大,有效数占比很少,无用数多,会增加通讯负载;
         所以建议分次读,用多条指令,轮循的方法。
         如 400083-400085 都允许读,则用二条主站读指令
    2、同一个从站,从站地址为1,基于上面
    第一条 MBUS_MSG 主要管脚
    Slave    1   从站地址
    RW       0   读写请求:0 = 读, 1 = 写
    Addr     400001   读写从站的保持寄存器起始地址
    Coun t  2   数据个数,这个数据类型是浮点数,点2 个字
    DataPtr  &VB0, 则VD0为读来的从站 400001 保持寄存器数据
    第二条 MBUS_MSG 主要管脚    
    Slave    1   从站地址
    RW       0   读写请求:0 = 读, 1 = 写
    Addr     400083   读写从站的保持寄存器起始地址
    Coun t  3   数据个数,400083-40085 是3个字
    DataPtr  &VB4, 则VW4为读来的从站 400083  保持寄存器数据
                                   VW6为读来的从站 400084  保持寄存器数据
                                   VW8为读来的从站 400085  保持寄存器数据
    3、如果要改成三条,参考上面给出的方法,也是可以的。
    4、参考资料

     

    Modbus RTU 主站指令库

    西门子在 STEP 7-Micro/WIN SMART 中正式推出 Modbus RTU 主站协议库(西门子标准库指令)。


    图 1. 西门子标准指令库(STEP 7-Micro/WIN SMART)

     注意:

    1. Modbus RTU 主站指令库的功能是通过在用户程序中调用预先编好的程序功能块实现的,该库对 CPU 集成的 RS 485 通讯口 和 CM 01 信号板有效。该指令库将设置通信口工作在自由口模式下。
    2. Modbus RTU 主站指令库使用了一些用户中断功能,编其他程序时不能在用户程序中禁止中断。
    3. Modbus RTU 主站指令库不能同时应用于CPU 集成的 RS 485 通讯口 和 CM 01 信号板。

    使用 Modbus RTU 主站指令库,可以读写 Modbus RTU 从站的数字量、模拟量 I/O 以及保持寄存器。

    Modbus RTU 主站功能编程

    1. 调用 Modbus RTU 主站初始化和控制子程序

    使用 SM0.0 调用 MBUS_CTRL 完成主站的初始化,并启动其功能控制:


    图 2. 用 SM0.0 调用 Modbus RTU 主站初始化与控制子程序

    各参数意义如下:

    a.
    EN
    使能:
    必须保证每一扫描周期都被使能(使用 SM0.0)
    b.
    Mode
    模式:
    为 1 时,使能 Modbus 协议功能;为 0 时恢复为系统 PPI 协议
    c.
    Baud
    波特率:
    支持的通讯波特率为1200,2400,4800,9600,19200,38400,57600,115200。
    d.
    Parity
    校验:
    校验方式选择
     
    0=无校验
    1=奇较验
    2=偶较验   
    e.
    Port
    端口号:
    0 = CPU 集成的 RS 485 通讯口 ; 1 = 可选 CM 01 信号板 。
    f.
    Timeout
    超时:
    主站等待从站响应的时间,以毫秒为单位,典型的设置值为 1000 毫秒(1 秒),允许设置的范围为 1 - 32767。
     
     注意: 这个值必须设置足够大以保证从站有时间响应。
    g.
    Done
    完成位:
    初始化完成,此位会自动置1。可以用该位启动 MBUS_MSG 读写操作(见例程)
    h.
    Error
     
    初始化错误代码(只有在 Done 位为1时有效):
     
    0= 无错误
    1= 校验选择非法
    2= 波特率选择非法
    3= 超时无效
    4= 模式选择非法
    9= 端口无效
    10= 信号板端口 1 缺失或未组态

     

    2. 调用 Modbus RTU 主站读写子程序MBUS_MSG,发送一个Modbus 请求;


    图 3. 调用Modbus RTU 主站读写子程序

    各参数意义如下:

    a.
    EN
    使能:
    同一时刻只能有一个读写功能(即 MBUS_MSG)使能
     
     注意:建议每一个读写功能(即 MBUS_MSG)都用上一个 MBUS_MSG 指令的 Done 完成位来激活,以保证所有读写指令循环进行(见例程)。
    b.
    First
    读写请求位:
    每一个新的读写请求必须使用脉冲触发
    c.
    Slave
    从站地址:
    可选择的范围   1 - 247
    d.
    RW
    读写请求:
    0 = 读, 1 = 写
     
     注意:
    1. 开关量输出和保持寄存器支持读和写功能
    2. 开关量输入和模拟量输入只支持读功能
    e.
    Addr
    读写从站的
    选择读写的数据类型
     
     
    数据地址:
    00001 至 0xxxx - 开关量输出
     
    10001 至 1xxxx - 开关量输入
     
    30001 至 3xxxx - 模拟量输入
    40001 至 4xxxx - 保持寄存器
    f.
    Count
    数据个数
    通讯的数据个数(位或字的个数)
     
     注意: Modbus主站可读/写的最大数据量为120个字(是指每一个 MBUS_MSG 指令)
    g.
    DataPtr
    数据指针:
    1. 如果是读指令,读回的数据放到这个数据区中
     
    2. 如果是写指令,要写出的数据放到这个数据区中
    h.
    Done
    完成位
    读写功能完成位
    i.
    Error
    错误代码:
    只有在 Done 位为1时,错误代码才有效
     
    0 = 无错误
    1 = 响应校验错误
    2 = 未用
    3 = 接收超时(从站无响应)
    4 = 请求参数错误(slave address, Modbus address, count, RW)
    5 = Modbus/自由口未使能
    6 = Modbus正在忙于其它请求
    7 = 响应错误(响应不是请求的操作)
    8 = 响应CRC校验和错误
    -
    101 = 从站不支持请求的功能
    102 = 从站不支持数据地址
    103 = 从站不支持此种数据类型
    104 = 从站设备故障
    105 = 从站接受了信息,但是响应被延迟
    106 = 从站忙,拒绝了该信息
    107 = 从站拒绝了信息
    108 = 从站存储器奇偶错误

    常见的错误:

    • 如果多个 MBUS_MSG 指令同时使能会造成 6 号错误
    • 从站 delay 参数设的时间过长会造成主站 3 号错误
    • 从站掉电或不运行,网络故障都会造成主站 3 号错误

    3. 在 CPU 的 V 数据区中为库指令分配存储区(Library Memory)

    Modbus Master 指令库需要一个286个字节的全局 V 存储区。

    调用STEP 7 - Mciro/WIN SMART Instruction Library(指令库)需要分配库指令数据区(Library Memory)。库指令数据区是相应库的子程序和中断程序所要用到的变量存储空间。

    如果在编程时不分配库指令数据区,编译时会产生许多相同的错误。

    操作步骤:

    1)在指令树的Project(项目)中,以鼠标右键单击Program Block(程序块),在弹出的快捷菜单中选择Library Memory。如图4所示:


    图4. “库存储器”按钮

    2)在弹出的选项卡中设置库指令数据区,如图5所示:


    图5. 缺省情况下是从VB0开始,但要保证该存储器使用地址范围与其他程序使用的地址不能有重叠。按“建议地址”按钮也可以自动分配。

     可以使用 “建议地址” 设置数据区,但要注意编程软件设置的数据区地址,只考虑到了其他一般寻址,而未考虑到诸如Modbus数据保持寄存器区等的设置。应当确保不与其他任何已使用的数据区重叠、冲突。不应重复按 “建议地址” 按钮,否则也会造成混乱。

    关于 Modbus RTU 主站协议库的补充说明

    Modbus 地址

    通常 Modbus 地址由 5 位数字组成,包括起始的数据类型代号,以及后面的偏移地址。Modbus Master 协议库把标准的 Modbus 地址映射为所谓 Modbus 功能号,读写从站的数据。Modbus Master 协议库支持如下地址:

    • 00001 - 09999:数字量输出( 线圈)
    • 10001 - 19999:数字量输入(触点)
    • 30001 - 39999:输入数据寄存器(通常为模拟量输入)
    • 40001 - 49999:数据保持寄存器

    Modbus Master 协议库支持的功能

    为了支持上述 Modbus 地址的读写,Modbus Master 协议库需要从站支持下列功能:

    表 1. 需要从站支持的功能

    Modbus 地址 读/写 Modbus 从站须支持的功能
    00001 - 09999
    数字量输出
    功能 1
    功能 5:写单输出点
    功能 15:写多输出点
    10001 - 19999
    数字量输入
    功能 2

    30001 - 39999
    输入寄存器

    功能 4
    40001 - 49999
    保持寄存器
    功能 3
    功能 6:写单寄存器单元
    功能 16:写多寄存器单元

    Modbus 地址和 S7-200 SMART 存储区地址的映射

    S7-200 SMART 通过 Modbus Master 和 Slave 协议库通信时,Modbus 地址和 S7-200 SMART CPU内存储区地址的 映射关系都类似。

    Modbus 保持寄存器地址映射举例:

    Modbus 保持寄存器地址

    40001

    12 34
    40002 56 78
    40003 9A BC

    S7-200 SMART 存储区字寻址

    VW200

    12 34
    VW202 56 78
    VW204 9A BC

    S7-200 SMART 存储区字节寻址

    VB200 12
    VB201 34
    VB202 56
    VB203 78
    VB204 9A
    VB205 BC

    Modbus 数字量地址映射举例:

    位地址(0xxxx 和 1xxxx)数据总是以字节为单位打包读写。第一个字节中的最低有效位对应 Modbus 地址的起始地址。如下图所示:


    图6 . 数字量地址映射举例

    Modbus RTU 主站例程

    为了更好地理解 Modbus 主站的编程,可参考下面的轮询例程。

     注意:

    1. 该例程使用 STEP 7-Micro/WIN SMART 编写,针对端口0。
    2. 该例程仅访问一个从站,多个MBUS_MSG指令轮询执行,若访问不同的从站,可通过改变从站地址来实现。

     Modbus RTU 主站指令库应用例程

     

免责声明:瑞启化工网转载作品均注明出处,本网未注明出处和转载的,是出于传递更多信息之目的,并不意味 着赞同其观点或证实其内容的真实性。如转载作品侵犯作者署名权,或有其他诸如版权、肖像权、知识产权等方面的伤害,并非本网故意为之,在接到相关权利人通知后将立即加以更正。联系电话:0571-87774297。
0571-87774297