本文主要介绍两部分:1.简单介绍Modbus通讯相关知识;2.通讯案例详解;

一.Modbus通讯介绍

1.通讯概述

Modbus具有两种串行传输模式:分别为ASCII和RTU。Modbus是一种单主站的主从通信模式,Modbus网络上只能有一个主站存在,主站在Modbus网络上没有地址,每个从站必须有唯一的地址,从站的地址范围为0 - 247,其中0为广播地址,从站的实际地址范围为1 - 247。Modbus RTU 使用主/从站网络,其中整个通信仅由一个主站设备触发,而从站只能响应主站的请求。主站将请求发送到一个从站地址,并且只有该地址上的从站做出响应。

Modbus RTU是用于网络中通信的标准协议,使用 RS232 或 RS422/485 连接在网络中的 Modbus 设备之间进行串行数据传输。

 注:Modbus 从站地址为 0 时会向所有从站发送广播帧(从站均不响应)。

2.Modbus 通讯协议

Modbus的通讯协议可在网上查阅相关详细资料,这里简单说明:数据传送帧结构顺序是,主站和从站/从站和主站之间的数据通信从从站地址开始,接下来是功能代码。随后传输数据。数据字段的结构取决于使用的功能代码。帧的最后传送的是校验和 (CRC)。

用于读取数据的功能代码:

  • Modbus 功能代码

  • 用于读取从站(服务器)数据的功能

  • 01

  • 读取输出位

  • 02

  • 读取输入位

  • 03

  • 读取保持寄存器

  • 04

  • 读取输入字

用于写入数据的功能代码:

  • Modbus 功能代码

  • 用于向从站(服务器)写入数据的功能

  • 05

  • 写入一个输出位

  • 06

  • 写入一个保持寄存器

  • 15

  • 写入一个或多个输出位

  • 16

  • 写入一个或多个保持寄存器

二.通讯案例详解

案例背景:一套以西门子S7_1200PLC作为控制器的控制系统(带HMI面板),与一套加湿器控制系统(单片机)进行Modbus RTU通讯,读取和写入加湿器数据,并通过控制面板进行显示和设置加湿器参数,以及通过HMI面板手动控制加湿机的充水、排水、加湿和停机。(与除湿机的通讯只是该项目中的一部分,这里只介绍与加湿机的通讯部分,其他控制部分未说明)加湿器的参数如下图

 注:PLC的控制系统作为主站,加湿器控制系统为从站

1.  硬件及软件需求

硬件:CPU 1215C AC/DC/Rly(订货号:6ES7 215-1BG40-0XB0)

CM 1241 (RS422/485)(订货号:6ES7 241-1CH32-0XB0)

HMI面板KTP1200Basic PN(订货号:6AV2 123-2MB03-0AX0)

屏蔽电缆(用于通讯)

注:本项目采用RS485接线方法, 3号针脚--RS485信号 B(+) ;8号针脚--RS485信号A(-);5号针脚--接屏蔽等电位点。

软件:博途V15(或其他)

2. 硬件组态

①通讯模块组态:设置好传输率=9.6Kbps、奇偶校验、数据位和停止位,其它保持默认。

启用PLC系统时钟

②设备和网络组态:添加HMI面板,并组态网络连接。

3.数据发送和接受缓冲区设置

①根据加湿机系统的点数表找到需要的参数,加湿机的点数表需提供地址、变量名、功能码、数据类型等,本项目需用到的参数我已飘绿并进行了标注说明。下面介绍如何使用这些变量。

②创建数据发送和接收缓冲区

在软件中单独创建一个DB数据块,用来作为数据发送和接收的缓冲区。

缓冲区如何设置?举一个例子(其他按照该方法操作即可)

加湿机充水阀、排水阀状态参数如下:

名称

地址

功能码

数据类型

充水阀状态

10001

02(读取输入位)

Bool

排水阀状态

10002

02(读取输入位)

Bool

在DB块中建立数组名Read_DI_Array,数据类型为Bool型。

注:数组长度要大于读取参数数量,这里设置数组长度为6(0~5)

到这里,所有的前期工作已经完成,到了进行软件编程的环节。

4.软件编程

① 创建一个FB数据块作为Modbus通讯程序块,然后在Main[OB1]组织块中调用该程序块。

② 调用MB_COMM_LOAD指令,会自动生成背景数据块。对每个通讯端口进行组态。

程序快几个主要端口引脚组态说明:

REQ:连接系统时钟的首次循环变量地址%M1.0 (FirstScan(1))。

PORT:连接通信的通信模块的硬件标识符,在PLC变量表里的系统变量里找到。

MB_DB:连接参数在这里必须与 Modbus_Master的MB_DB参数相连。

波特率BAUD、奇偶校验PARITY和前面设置一样。

③ 调用Modbus_Master指令

MB_ADDR:加湿机从站地址为1。

DTAA_ADDR:数据起始地址

DATA_LEN:访问的数据位数或字的个数

DATA_PTR:在前面建立的数据发送接收缓冲区,在这里将用到。表示指向要进行数据写入或数据读取的标记或数据块地址。

对加湿机参数数据位、字的读取和写入,该项目中使用到了多个Modbus_Master指令,一定要采集用轮询的方式。否则读写的数据会报错。轮询方式如下:

前一个Modbus_Master的完成位DONE作为下一个Modbus_Master的数据请求位REQ

5.    HMI画面组态

① 创建一个加湿机参数画面“加湿机参数”

② 设计编辑画面:如下

③ 变量连接

举例:加湿机需求量地址为30001,在PLC中对应DB数据块Master_HR的Read_AI数组的第一个元素Master_HR_Read_AI_Array{0},在过程----变量中拖拽即可。画面中其他参数组态按照该方式依次组态完成即可。

注:PLC的变量一定与加湿机的变量地址对应好。

至此一个完整的通讯项目已经完成。

—THE END—

文章推荐 PLC常用符号汇总及系统电气设计三要素 机器视觉小案例:带你数腐烂辣椒的个数 老电工为什么能看一眼功率就知道电流?秘诀就在这! 深入认识WinCC组态九大功能 机器视觉与三菱PLC以太网通讯设置方法 这份10KV配电室精讲也太全了吧!高低压、直流设备、电缆、接地系统...都有

adprw指令通讯案例_超实用,非常典型的Modbus通讯项目案例,三分钟学会相关推荐

  1. 西门子plc与三菱变频器通讯程序 西门子plc200smart与三菱变频器modbus通讯程序,可以帮你学会modbus通讯

    西门子plc与三菱变频器通讯程序 西门子plc200smart与三菱变频器modbus通讯程序,可以帮你学会modbus通讯 ID:9816622413695547云举路攒钱的贝壳

  2. adprw指令通讯案例_实例 | 三菱FX3U485无协议通讯程序详解(含程序)

    三菱FX2N PLC串行通讯指令(FNC 80 RS) 串行通讯指令(FNC 80 RS) 1.指令格式:[RS D0 K8 D10 K8] 发送数据帧起始地址和数目 ↓ 接收数据帧起始地址和数目 2 ...

  3. 通讯实例 modbus_实例讲解PLC实现modbus通讯

    1. 硬件设置 程序中的 Modbus 通讯是在两个 S7-200 CPU 的 0 号通讯口间进行的(最好每个 CPU 都有两个通讯口).在主站侧也可以用相应库文件 "MBUS_CTRL_P ...

  4. Linux综合实训案例教程,Linux操作系统教程-实训与项目案例原稿.ppt

    Linux操作系统教程-实训与项目案例原稿分析 第11章 Bash 使用详解 本章内容 Shell概念 Linux下用户Shell的指定 Bash的使用 Bash的常见技巧与快捷键 Bash的变里使用 ...

  5. 下行法求最小割集案例_机械产品典型失效分析案例

    原标题:机械产品典型失效分析案例 长期以来,机械结构设计习惯于传统的静强度设计,然而实际工作中,多数机械产品不属于静载工作范畴.大量的产品失效案例表明,百分之70以上的产品失效属于疲劳问题,另外有百分 ...

  6. 初中数学抽象教学的案例_初中数学典型教学案例与反思.doc

    . .. 转 变 王艳华 蔡杰同学又没写作业,一早到学校便听到不想听的小报告,这孩子可真懒惰,隔三岔五地要赖作业,的确该想个办法"治理治理"他了.想想蔡杰同学也不可能因为不会做而没 ...

  7. 初中数学抽象教学的案例_初中数学优秀课教学设计的案例研究论文

    随着新课程改革的推进,优秀的课堂建设已经成为了顺利实施新课程改革和素质教育的关键所在.为了不断地增强学生学习的热情和积极性,进一步提高数学教学的效率,初中数学教师应借鉴优秀的教学设计案例,并从中总结出 ...

  8. javascript案例_如何在JavaScript中使用增强现实-一个案例研究

    javascript案例 by Apurav Chauhan 通过Apurav Chauhan 如何在JavaScript中使用增强现实-一个案例研究 (How to use Augmented Re ...

  9. 局域网通讯工具_自动称重带无线通讯WIFI传输功能设备

    自动称重带无线通讯WIFI传输功能设备详情内容/ Content details 支持: 远程数据库功能,支持OPCUA协议,能实时上传各种称重信息:通过SQLServer等实现称重数据与记录的上传到 ...

最新文章

  1. Mysql 优化器内部JOIN算法hash join Nestloopjoin及classic hash join CHJ过程详解
  2. python概率密度函数参数估计_EM算法求高斯混合模型参数估计——Python实现
  3. java 接口 print_Java-接口练习
  4. java 中生成文档_在Java中生成专业的公文文档
  5. 计算机财务管理中表格的应用,论Excel表在财务管理中的应用
  6. IT基础知识(精华版一)
  7. 摩尔庄园同一服务器怎么显示好友,摩尔庄园手游怎么搜索别人搜索好友步骤详解...
  8. 一不留神进了银行黑名单!信用有污点,真的超严重!
  9. 为何干电池是1.5v?而充电电池是1.2v?
  10. 图片像素大小怎么调整,批量调整图片像素
  11. 利用Wifidog实现微信wifi连接
  12. 【用pandas_alive几行代码绘制竞赛动图】10.新南威尔士州 COVID 可视化(测试代码+数据集+绘图参数解析)
  13. JavaScript学习笔记整理(六)
  14. 喷上它就能凭空打字!鲍哲南团队开发新型智能皮肤,可准确识别手部动作,打字手语不在话下...
  15. boxplot箱型图的离群点outlier和极端点extremes
  16. Word中单倍行间距是多少磅
  17. 美团点评2019校招笔试题——前端开发方向(附答案)
  18. 插件自动解决谷歌翻译用不了,win、mac、linux通用,附链接
  19. 集成运算放大器(以AD8552为例)的主要技术参数
  20. 电化学传感器(3)---气体采样系统

热门文章

  1. android 多媒体文件信息,Android如何获取多媒体文件信息
  2. python 依赖包管理_依赖管理
  3. 设计师们还不快着手准备圣诞海报?PSD分层模板,轻松交稿
  4. webpack转内联px为rem_Vuejs项目配置webpack将px自动转化为rem,适配移动端
  5. fastnest怎么一键排版_FastNEST数控编程组合排版与技巧探讨
  6. python安装opencv whl_Python 3.x 安装opencv+opencv_contrib的操作方法
  7. Ubuntu16.04下 shell脚本中C语言形式的for循环用法
  8. 关于FD.io VPP的最新消息
  9. sqlserver2008未将对象引用设置到对象的实例_JVM | Java对象的创建、存储和访问详解...
  10. python windows记事本_pywinauto自动化操作记事本