S7-1200PLC Modbus通信踩坑记录

这篇具有很好参考价值的文章主要介绍了S7-1200PLC Modbus通信踩坑记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


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

本文内容:帮读者找到通信失败的原因,不是完整的教程。
硬件设备:CPU1212C,485通信模块CM1241,Modbus从机(比如变送器,变频器)。
编程软件:TIA Portal

485接线

CM1241带一个DB9接头,接线按照 "3号管脚是485+,8号是485-"进行,不要看AB。2根线就够,不用接GND。
S7-1200PLC Modbus通信踩坑记录

TIA Portal函数块的选用

如下图,函数区里有两个MODBUS的文件夹,上面的带(RTU)的和下面的那个。在使用的时候只用一个文件夹里的函数,不要混用,而且两组函数的用法不太一样。

Modbus编程,大致步骤是先用MB_COMM_LOAD初始化,再用MB_MASTER将PLC作为主机向从机发起通信,具体做法可以网上搜到。新版函数需要设置背景数据块 “Modbus_Comm_Load_DB”.MODE=4,表示485半双工通信方式,算个小坑。
S7-1200PLC Modbus通信踩坑记录

MODBUS标准帧结构

Modbus数据帧的一般结构是:
S7-1200PLC Modbus通信踩坑记录
S7-1200PLC Modbus通信踩坑记录
根据命令码的不同,上面“数据内容”会有不同的划分。最常用的命令码是03和06。03表示主机读取从机里多个字(英文word)的数据,一个字就是2个字节。03功能码的示例:
S7-1200PLC Modbus通信踩坑记录
06表示主机向从机写入1个字的数据:
S7-1200PLC Modbus通信踩坑记录

叠加地址基数

MB_MASTER函数块:
S7-1200PLC Modbus通信踩坑记录
了解了帧结构之后,如果直接把起始地址输入到函数里,会通信失败。这时候就需要看西门子的文档了。

可以发现,函数上不能直接输入Modbus功能码,而且多了一个MODE输入。看一下函数的参数说明:
S7-1200PLC Modbus通信踩坑记录
S7-1200PLC Modbus通信踩坑记录
可见,需要通过指定MODE和数据地址,来间接的确定功能码。上表种的“Modbus地址”就是数据地址。

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

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

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

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

根据情况,给地址加一

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

最后放两个案例:

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

查看变送器说明书:
S7-1200PLC Modbus通信踩坑记录

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

案例2:变频电机控制

查阅变频器说明书:
S7-1200PLC Modbus通信踩坑记录
现想要控制电机正转运行。
确定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。文章来源地址https://www.toymoban.com/news/detail-442177.html

到了这里,关于S7-1200PLC Modbus通信踩坑记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • S7-1200PLC 作为MODBUSTCP服务器通信(多客户端访问)

    S7-1200PLC作为MODBUSTCP服务器端通信编程应用,详细内容请查看下面文章链接: ModbusTcp通信(S7-1200PLC作为服务器端)-CSDN博客 文章浏览阅读239次。S7-200Smart plc作为ModbusTcp服务器端的通信S7-200SMART PLC ModbusTCP通信(ModbusTcp服务器)_s7-200 modbustcp-CSDN博客文章浏览阅读2.3k次。 https://rxxw-con

    2024年02月01日
    浏览(50)
  • TIA博途中S7-1200进行MODBUS TCP通信(作为服务器)的具体方法演示

    如下图所示,打开TIA博途软件,添加一个1200的PLC,并设置该PLC的IP地址,这里以192.168.0.2为例进行说明, 如下图所示,打开OB1,在通信指令—其他中找到MB_SERVER,并拖拽到OB1中, MB_SERVER指令的具体使用方法可参考以下内容( 管脚的功能定义 ): 如下图所示,添加一个DB块用

    2024年02月08日
    浏览(40)
  • S7-1200PLC与ABB机器人进行PROFINET通信的具体方法和步骤详解

    1. TIA博途一侧的配置: 当我们安装好RobotStudio软件后,可以在以下的目录中C:ProgramDataABB Industrial ITRobotics ITDistributionPackagesABB.RobotWare-6.08.0134RobotPackagesRobotWare_RPK_6.08.0134utilityserviceGSDML找到对应的GSDML文件, 将该GSDML文件夹复制出来,放到自己创建的文件夹中,如下图所示

    2023年04月19日
    浏览(41)
  • C++上位软件通过LibModbus开源库和西门子S7-1200/S7-1500/S7-200 PLC进行ModbusTcp 和ModbusRTU 通信

            一直以来上位软件比如C++等和西门子等其他品牌PLC之间的数据交换都是大家比较头疼的问题,尤其是C++上位软件程序员。传统的方法一般有OPC、Socket 等,直到LibModbus 开源库出现后这种途径对程序袁来说又有了新的选择。           1 )使用简单, 利用MUDBUS库文件

    2024年02月03日
    浏览(55)
  • OPC UA 开源库编译方法及通过OPC UA连接西门S7-1200 PLC通信并进行数据交换

            在现代工业自动化领域,OPC UA(开放性生产控制和统一架构)是一种广泛应用的通信协议。本文将以通俗易懂的方式解释OPC UA的含义和作用,帮助读者更好地理解这一概念。 一、OPC UA的定义         OPC UA全称为“开放性生产控制和统一架构”。简单来说,它是

    2024年01月20日
    浏览(39)
  • OPC UA 开源库编译方法及通过OPC UA连接西门S7-1200 PLC通信并进行数据交换[一]

            在现代工业自动化领域,OPC UA(开放性生产控制和统一架构)是一种广泛应用的通信协议。本文将以通俗易懂的方式解释OPC UA的含义和作用,帮助读者更好地理解这一概念。 一、OPC UA的定义         OPC UA全称为“开放性生产控制和统一架构”。简单来说,它是

    2024年01月16日
    浏览(56)
  • S7-1200PLC的TCP/IP通讯

    图1 TSEND_C指令 如图是TSEND_C指令,它的作用是建立连接并发送数据。对于其中各个参数的作用如下表: 参数 说明 REQ 在上升沿启动发送作业 CONT 控制通信连接 CONNECT 指向连接描述结构的指针 DATA 指向发送区的指针,该发送区包含要发送数据的地址和长度 DONE 状态参数,可表示发

    2024年04月10日
    浏览(46)
  • 通过modbus tcp 和台达PLC通信测试记录

    安装台达梯形图软件 “WPLSoft” http://downloadcenter.delta-china.com.cn/DownloadCenter?v=1q=WPLsort_expr=cdatesort_dir=DESC 2.硬件连接 2.1 电脑网卡 连接PLC以太网, IP设为192.168.1.x网段,PLC默认IP为192.168.1.5. 2.2 PLC 供电24V, S/S输入公共端接GND,UP0/ZP0输出驱动电源的端口接GND / 24V 2.3 在 PLC X0输入触

    2024年02月08日
    浏览(48)
  • 西门子S7-1200与S7-300PLC的九大不同点

    S7-1200作为新推出的紧凑型控制器,其产品定位在原有的SIMATIC S7-200和S7-300之间,它与S7-300的区别主要体现在硬件、通信、工程、存储器、功能块、计数器、定时器、工艺功能等方面。 一、硬件的区别 在硬件扩展方面,S7-300的主机架多支持八个扩展模块,而S7-1200支持扩展多八

    2024年01月25日
    浏览(47)
  • 西门子PLC S7-1200如何实现远程上下载?

    西门子S7-1200是一款高性能的PLC,具有模块化、结构紧凑、功能全面、编程简单的特点,总工业自动化领域中应用广泛,如贴片系统、传送带系统、污水处理厂、配电站、能源管理系统。 在使用过程,无论是为了减少现场调试的成本时间,还是为了给客户提高更快更强的技术

    2024年02月12日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包