目录

  • 485接线
  • TIA Portal函数块的选用
  • MODBUS标准帧结构
  • 叠加地址基数
  • 根据情况,给地址加一
  • 案例1:从力传感器读取重量值
  • 案例2:变频电机控制

先放结论,两个大坑:
1.数据地址加4万或40万,来帮助PLC确定Modbus功能代码;
2.和某些设备通信时,需要给数据地址+1。

本文内容:介绍其他文章没有的重要知识点,帮读者找到通信失败的原因,不是完整的教程。
硬件设备:CPU1212C(或其他S7-1200系列PLC),485通信模块CM1241,Modbus从机(比如变送器,变频器)。
编程软件:博途,TIA Portal

485接线

CM1241带一个DB9接头,接线按照 "3号管脚是485+,8号是485-"进行,不要看AB。2根线就够,不需要接GND。

TIA Portal函数块的选用

如下图,函数区里有两个MODBUS的文件夹,上面那个版本比较新。用的时候要统一用其中一个文件夹里的函数,不能混用。大致步骤是先用MB_COMM_LOAD初始化,再用MB_MASTER将PLC作为主机向从机发起通信,具体做法可以网上搜到。新版函数需要设置背景数据块 “Modbus_Comm_Load_DB”.MODE=4,表示485半双工通信方式,算个小坑。我用的老版函数。

MODBUS标准帧结构

Modbus数据帧的一般结构是:


根据命令码的不同,上面“数据内容”会有不同的划分。最常用的命令码是03和06。03表示主机读取从机里多个“字”的数据。“字”的英文是Word,一个字就是2个字节。03功能码的示例:

06表示主机向从机写入1个字的数据:

叠加地址基数

MB_MASTER函数块:

了解了帧结构之后,如果直接把起始地址输入到函数里,会通信失败。这时候就需要看西门子的文档了。

可以发现,函数上不能直接输入Modbus功能码,而且多了一个MODE输入。看一下函数的参数说明:


原来,西门子PLC是通过MODE和数据地址来确定功能码的。上表种的“Modbus地址”就是数据地址。

在Modbus帧结构里,数据地址一般是占用1个字,所以理论上地址可以是0~0xFFFF种的任意一个数,最大值0xFFFF对应十进制的65535。

这时候直接输入原始的数据地址就会出错。比如在MODE=0的情况下,数据地址是2000,PLC就以为要读取一个位;地址是50,000,PLC以为要读取一个字,完全混乱了。

为了避免混乱,正确做法是给数据地址加上一个“基数”,再输入到函数。 具体加什么基数要看上面的表格。比如原地址是2000,想要把功能码设为03,就要把MODE设为0,数据地址加4万或40万,变成42000或402000,让PLC能根据MODE和地址,定位到功能码03。PLC在实际发送的时候会自动减掉基数,来保证正常通信。

为什么有4万和40万两个基数?根据前面的分析,原数据地址最大能到65535,这时候如果加4万,变成105535,就超出表格里49999的范围了。如果加40万,变成465535,正好在表格里40万地址区间之内。所以基数40万适用于所有的Modbus从机,4万可以用于地址范围比较小的设备。

上面就是第一个坑,这个重点居然在各种教程里都没有明确说明,完全得靠自己参悟。

根据情况,给地址加一

解决基数问题之后,还是一直报错,直到看到一篇教程上说:
DATA_ADDR–从站的起始地址(需将从站的地址由16进制转换为10进制,转换成10进制后,数据加1(因为从站地址是从0开始的,而PLC的地址是从1开始的,所以要加1)) ;
于是破案了。至于数据地址要不要加一,需要看具体设备的说明书。一般地址从个位数1开始的,就是已经加过1了,可以直接用;从整数开始的就要自己加1。不确定就做个实验。

放两个案例,把上面的知识融汇贯通一下。

案例1:从力传感器读取重量值

查看变送器说明书:

现在想要读取重量。
确定MODE: 是读取操作,所以MODE设为0.
确定DATA_ADDR:
根据变送器说明书,数据的原地址是1.
根据变送器说明书,数据地址都在一万以内,所以基数采用4万或40万都行。这里采用4万,叠加后地址变为40001.
同时发现,说明书上的地址是从1开始的,所以不用再额外加一了。
确定DATA_LEN: 重量数据占用4个字节,所以DATA_LEN=2(单位是字)。
通信成功后,数据会被放到DATA_PTR指向的PLC存储空间。

案例2:变频电机控制

查阅变频器说明书:

现想要控制电机正转运行。
确定MODE: 是写入操作,MODE=1。
确定DATA_ADDR: 数据原地址是2000H(16进制),转换为10进制是8192。
观察发现,说明书上地址是从个位为0的整数开始的,所以地址要加1.
观察发现,变频器上的数据地址范围比较大,超过了1万,所以统一加基数40万。
综上,输入到PLC函数的数据地址是:400,000+8192+1=408,193.
确定DATA_LEN:命令信息占用1个字,所以DATA_LEN=1.
数据值 :在DATA_PTR指向的变量里,设置命令值0001。

西门子S7-1200系列PLC Modbus通信的踩坑记录相关推荐

  1. 西门子1200系列PLC的CANopen通信解决方案

    背景 智能制造成为趋势,其基础常常是连接各种设备.CANopen协议因其中立和推出时间较长,在变频.伺服驱动.风力发电中有较广泛的应用.西门子的1200系列PLC性价比高,也得到越来越多用户的欢迎,该 ...

  2. PLC实验—西门子S7 1200读取旋转编码器数据并计算电机转速

    PLC实验-西门子S7 1200读取旋转编码器数据并计算电机转速 注意PTO控制步进电机实验博途软件需要V14版本,不然没有PTO功能块 软件的下载请点击下方百度网盘的链接 链接:https://pa ...

  3. 台达变频器modbus通讯控制程序 西门子s7—200型PLC和昆仑通泰触摸屏程序

    台达变频器modbus通讯控制程序 西门子s7-200型PLC和昆仑通泰触摸屏程序,带变频器使用手册,参数设置和接线说明. 可以实现频率设定,频率,电压,电流显示:正转启动,反转启动和停止控制. ID ...

  4. 西门子TP900精智系列触摸屏和三菱Q系列PLC以太网通信的组态步骤

    西门子TP900精智系列触摸屏和三菱Q系列PLC以太网通信的组态步骤 说明: 西门子精智系列触摸屏支持和三菱Q PLC进行以太网通讯. 但要注意精智系列触摸屏只支持通过TCP协议和三菱Q PLC通讯( ...

  5. PLC实验—西门子S7 1200 PID控制步进电机转速

    PLC实验-西门子S7 1200 PID控制步进电机转速 严格讲并不是PID控制,因为并不是并不研究这个方向,研二又比较忙,时间限制只加了比例系数 这里只是抛砖引玉,希望大家可以进一步完善补充 思路 ...

  6. 西门子S7-200 SMART系列PLC接线大全

    西门子S7-200 SMART系列PLC接线大全 西门子S7-200 SMART系列PLC接线大全,电器人必须收藏!!!_输出_模块_负载

  7. 【SpringBoot DB系列】Jooq批量写入采坑记录

    [SpringBoot DB系列]Jooq批量写入采坑记录 前面介绍了jooq的三种批量插入方式,结果最近发现这里面居然还有一个深坑,我以为的批量插入居然不是一次插入多条数据,而是一条一条的插入-,这 ...

  8. C#使用西门子S7 协议读写PLC DB块

    教大家使用C#如何方便快速的读写西门子DB块的值,实现上位机跟plc进行通讯的流程 使用的西门子PLC型号,S7 1200 1.Nuget 安装s7 驱动包 2.西门子plc定义一个db块,这个是我们 ...

  9. 信捷plc modbus通信

    信捷plcmodbus通信协议的自我见解 通信指令一览表 MODBUS通信的理解:MODBUS通信分为  ASCLL 和RTU两种,在以前ASCLL通信用的较多现在一般常用RTU模式通信.RTU模式通 ...

  10. 三菱q系列plc 和电脑socket_三菱Q系列PLC 以太网通信设置方法

    当使用三菱Q13UDEH PLC 和组态王6.55 进行通信,使用Melsec_Ethernet.dll(60.3.14.30)驱动.使用该驱动时应注意,勾选"允许RUN中写入(FTP与MC ...

最新文章

  1. 贝叶斯定理——数学之美
  2. SAP MM 采购发票上的价格与采购订单上价格的差异
  3. 用 IDEA 看源码的正确姿势!你掌握了吗?
  4. 绝了!“修仙模式”学编程是什么体验?
  5. 计算机组成原理——概述3
  6. 关于props的注意事项!
  7. CSS学习笔记 display属性
  8. java swt 不显示图片_Java SWT按钮图像未刷新
  9. linux中的man文档结构
  10. js reduce数组循环相加x+y
  11. 获取access_token
  12. linux mint下安装vnc,VNC远程连接Linux mint桌面
  13. 总结《An Introduction to Ray Tracing》
  14. SQL标准语句——思维导图
  15. Android.light.apk,Android_Lightblue.apk
  16. 最全计算机基础知识竞赛试题,计算机基础知识竞赛试题.doc
  17. linux安装/卸载microsoft edge
  18. CF1427E Xum
  19. ps 图片提取线稿方法2种 转
  20. echarts饼图label文字颜色

热门文章

  1. java 本地文件上传到服务器,java本地文件上传到远程服务器
  2. 操作系统多道程序设计和分时---笔记02
  3. html复制粘贴后乱码,从Word复制的内容粘贴出来都是两个乱码
  4. 二元线性回归最小二乘法公式推导
  5. HTML5开启浏览器桌面通知 Web Notification
  6. Linux工具篇 | Ubuntu安装balenaEtcher镜像刻录工具
  7. java面试题--java基础--迈达斯篇
  8. Midas GTS NX To 3DEC网格转换程序
  9. 算法工程师书籍推荐——典藏版
  10. 贴片电阻、贴片电容规格、封装、尺寸