首页 > 其他分享 >西门子 S7-200 SMART 系列六:手把手教你配置S7-200 SMART Modbus RTU

西门子 S7-200 SMART 系列六:手把手教你配置S7-200 SMART Modbus RTU

时间:2024-03-19 18:30:23浏览次数:31  
标签:200 读写 S7 Modbus 地址 指令 MBUS RTU SMART

s7-200 smart Modbus 主站通讯

image-20240318145035727

Modbus 通讯简介

在工业领域,Modbus无处不在,无论你是否用过,大概你肯定听过,那么Modbus是什么呢?Modbus是Modicon公司于1979年为使用可编程逻辑控制器通信而发表,现在已经发展成为工业领域标准通讯协议之一,广泛应用于PLC与设备、仪表之间进行数据采集使用;

Modbus 是公开通信协议,其最简单的串行通信部分仅规定了在串行线路的基本数据传输格式。Modbus 具有两种串行传输模式,ASCII 和 RTU,它们定义了数据如何打包、解码的不同方式。支持 Modbus 协议的设备一般都支持 RTU 格式。

Modbus 是一种单主站的主/从通信模式。Modbus 网络上只能有一个主站存在,主站在 Modbus 网络上没有地址,从站的地址范围为 0 - 247,其中 0 为广播地址,从站的实际地址范围为 1 - 247(即可链接设备数247)。注:理论上可链接设备247,但由于轮询时间,信号干扰,阻抗等因素,实际应用中最多一般不超过32台设备;

需要注意的是我们通常说Modbus是RS485通讯,实际上这种说法是不准确的,Modbus是通讯协议,而RS485是通讯传输方式,同样还有RS232,光纤,以太网等传输方式,标准Modbus协议都可以通过这些传输方式传播。在 S7-200 smart CPU 通信口上实现的是 RS485 半双工通信,使用的是 S7-200 SMART 的自由口功能。

S7-200 Smart 主站指令库

西门子在 STEP 7-Micro/WIN SMART 中已经集成了 Modbus RTU 主站协议库(西门子标准库指令)。使用 Modbus RTU 主站指令库,可以读写 Modbus RTU 从站的数字量、模拟量 I/O 以及保持寄存器。

image-20240318134538515

注意:

  1. Modbus RTU 主站指令库的功能是通过在用户程序中调用预先编好的程序功能块实现的,该库对 CPU 集成的 RS 485 通讯口 和 CM 01 信号板有效。该指令库将设置通信口工作在自由口模式下。
  2. Modbus RTU 主站指令库使用了一些用户中断功能,编其他程序时不能在用户程序中禁止中断。
  3. Modbus RTU 主站指令库可以同时应用于CPU 集成的 RS 485 通讯口 和 CM01 信号板,此时集成的RS 485口使用Modbus RTU Master(v2.0)中指令,CM01信号板使用Modbus RTU Master2(v2.0)中指令,如果只有一个主站则不做区分。
S7-200 Smart 主站功能编程
  • Modbus RTU 主站初始化和控制子程序

    1. 调用 Modbus RTU 主站初始化和控制子程序,使用 SM0.0 调用 MBUS_CTRL 完成主站的初始化,并启动其功能控制:

      image-20240318140009530

      各参数意义如下:

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

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

      image-20240318141615772

      各参数意义如下:

      EN使能:同一时刻只能有一个读写功能(即 MBUS_MSG)使能 注意:建议每一个读写功能(即 MBUS_MSG)都用上一个 MBUS_MSG 指令的 Done 完成位来激活,以保证所有读写指令循环进行(见例程)。
      First读写请求位:每一个新的读写请求必须使用脉冲触发
      Slave从站地址:可选择的范围 1 - 247
      RW读写请求:0 = 读, 1 = 写 注意:1. 数字量输出和保持寄存器支持读和写功能2. 数字量输入和模拟量输入只支持读功能
      Addr读写从站的数据地址:选择读写的数据类型
      00001 至 0xxxx - 数字量输出
      10001 至 1xxxx - 数字量输入
      30001 至 3xxxx - 模拟量输入
      40001 至 4xxxx - 保持寄存器
      Count数据个数通讯的数据个数(位或字的个数)注意: Modbus主站可读/写的最大数据量为120个字(是指每一个 MBUS_MSG 指令)
      DataPtr数据指针:1. 如果是读指令,读回的数据放到这个数据区中
      2. 如果是写指令,要写出的数据放到这个数据区中
      Done完成位读写功能完成位
      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 = 从站存储器奇偶错误
  • 在 CPU 的 V 数据区中为库指令分配存储区;

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

    调用STEP 7 - Mciro/WIN SMART Instruction Library(指令库)需要分配库指令数据区(Library Memory)。库指令数据区是相应库的子程序和中断程序所要用到的变量存储空间。如果在编程时不分配库指令数据区,编译时会产生许多相同的错误。

    操作步骤:

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

      image-20240318142619164

    2. 在弹出的选项卡中设置库指令数据区,可以自己填地址,也可选择建议地址自动分配;注意:分配后的地址,不能再用在其他程序中;

      image-20240318143740235

    3. 配置结束,下载程序即可进行通讯测试;

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

Modbus 地址

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

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

标签:200,读写,S7,Modbus,地址,指令,MBUS,RTU,SMART
From: https://blog.csdn.net/John_09040211/article/details/136821753

相关文章

  • P7880 [Ynoi2006] rldcot
    题意给定一棵树,求区间\([l,r]\)中任意两点的LCA的不同的带权深度的个数。Sol很容易想到Dsuontree。因为当前点\(x\)作为LCA产生贡献当且仅当有两点\(u,v\)分别在\(x\)的不同子树中。集中注意力,不难发现对于一个\(u\)来说,只有子树中她在序列上的前驱后继会......
  • 【NodeJS】GLIBC_2.28 not found CentOS7不兼容Node高版本 npm报错
    CentOS7环境下安装Nvm,在执行nvmuse18.17.0后执行node-v爆出如下错误 bash复制代码node:/lib64/libm.so.6:version`GLIBC_2.27'notfound(requiredbynode)node:/lib64/libc.so.6:version`GLIBC_2.25'notfound(requiredbynode)node:/lib64/libc.so......
  • Phantom S710系列相机配置
    Hello-FPGAinfo@hello-fpga.comS710系列相机配置 目录S710系列相机配置41S710相机说明42配置说明52.1BANK说明52.2BANK配置62.3像素重新排列62.4配置示例BANKA4ports7图1‑1芬腾S710相机4图1‑2S710规格5S710系列相机配置S710相机说明Pha......
  • CentOS7防火墙
    提示修改防火墙配置文件之前,需要对之前防火墙规则做好备份重启防火墙后,需要确认防火墙状态和防火墙规则是否加载,若重启失败或规则加载失败,则所有请求都会被防火墙拒绝firewalld服务管理显示服务的状态systemctlstatusfirewalld.service启动服务systemctlstartfirewal......
  • 想要快速建站,这有1200+免费网站模板请查收!
    不会前端,不知道怎么写代码,想要快速建站?不用担心,松桑给大家搜集了一个宝藏网站:HTMLrev。网站地址我放在结尾阅读原文了,想要直接访问的读者可以直接跳到结尾了。网站模板包含两大类,一类是前端三件套框架相关的,懂前端代码的可以直接下载然后自己定制化修改,包括Bootstrap、Tail......
  • CSSE2002 java项目描述
    大型编程(CSSE2002)课业1-学期1,2024EEC学校昆士兰州大学必须通过做事来学习;因为你认为您知道,直到尝试之前,您都无法确定。-Sophocles不要打扰。修订1.1.0概述此任务提供了基于一个基于一个Java项目的实用经验提供的规格。该规范以Javadocs的形式提供,该规范描述了您的课......
  • Vue+OpenLayers7入门到实战:OpenLayers7创建自定义鹰眼控件,自定义鹰眼控件样式,调整鹰眼
    返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7入门到实战前言本章介绍如何使用OpenLayers7在地图上创建自定义鹰眼控件,自定义鹰眼控件样式,调整鹰眼控件位置、大小、文字和按钮等样式。二、依赖和使用"ol":"7.5.2"使用npm安装依赖npminstallol@7.5.2使用Y......
  • 洛谷题单指南-二叉树-P3884 [JLOI2009] 二叉树问题
    原题链接:https://www.luogu.com.cn/problem/P3884题意解读:要计算二叉树的深度、宽度、节点间的距离,深度、宽度的概念很好理解,节点间的距离描述是:节点u,v之间的距离表示从u到v的最短有向路径上向根节点的边数的两倍加上向叶节点的边数。说人话就是:u到v的距离=uv最近公共祖先到u......
  • C# 的SmartThreadPool线程使用
    1、为什么需要使用线程池(ThreadPool)减少线程间上下文切换。线程执行一定的时间片后,系统会自动把cpu切换给另一个线程使用,这时还需要保存当前的线程上下文状态,并加载新线程的上下文状态。当程序中有大量的线程时,每个线程分得的时间片会越来越少,可能会出现线程未处理多少操作,就需......
  • SqlServer2008(R2)(一)SqlServer2008(R2)经典宝藏操作收集整理
    一、常见操作1、TRUNCATETABLE语句删除表数据TRUNCATETABLE语句比DELET删除表中的所有行更快。从逻辑上讲,TRUNCATETABLE它类似于DELETE没有WHERE子句的语句。TRUNCATETABLE语句从表中删除所有行,但表结构及其列,约束,索引等保持不变。要删除表及其数据,可以使用该DROP......