研选课堂
HOME
研选课堂
正文内容
mb系列plc编程 自动化工程师:结合不同的西门子PLC编程语言,程序编写无压力
发布时间 : 2024-11-26
作者 : 小编
访问数量 : 23
扫码分享至微信

自动化工程师:结合不同的西门子PLC编程语言,程序编写无压力

随着现代工控技术的不断发展,可能很多使用过PLC的技术人员都有这么一个感受传统的‘梯形图’是较为简单,容易上手,但是编程方式在面对越来越复杂的控制要求时,已显得有所不足。现在很多大品牌的中高级PLC都支持五种编程语言的混合编程,即梯形图(LD)、指令表(IL)、功能模块e(FBD)、顺序功能流程图(SFC)及结构化文本(ST)。

在这五种编程语言中,搭配过这么一个不错的组合就是梯形图+结构化文本,用梯形图写逻辑控制,用结构化文本写计算,这样可以加快编程效率并且使程序的可读性大大提高。而流程图编程则非常适用于一些“顺序控制”场合。至于指令表和功能块,我个人认为实用性并不太大。

西门子S7系列PLC在国内工控领域中使用很广,它的编程软件Step7默认情况下只支持梯形图和指令表编程,但通过安装“S7SCL”软件包和“S7Ggph”软件包可实现结构化文本和流程图编程。下面,笔者就结合自己的一些使用经验介绍一下如何在Step7中用结构化文本编程。

什么是结构化文本编程

结构化文本语言是用结构化的描述文本来描述程序的一种编程语言,它是类似于高级语言的一种编程语言。在大中型PLC系统中,常采用结构化文本来描述控制系统中各个变量的关系,完成所需的功能或操作。

具体的语法规则大家可参考西门子的相关手册,在此就不做详细介绍。下图为Step7中的SCL编程界面:

在Step7 中,结构化文本编程被称为结构化控制语言,缩写为SCL. Step7 V5.3的软件包中已包含了S7-SCL软件包,在安装Step7 V5.3时,系统会提示是否要安装S7-SCL,把复选框打钩即可,见下图:

SCL软件包用于以“源文件”的方式编写功能块、函数块。步骤如下:

第一步:当Step7中已正确安装SCL软件包后,会有如下界面

第二步:进入SCL编程界面,并选择准备编写的程序块的类别

第三步:编写程序并编译

经过以上四步,就完成了一个用SCL编写功能块的全过程, FC1的源程序,保存在“Sources”文件夹中,可随时打开进行修改。

用编程实现“间接寻址”

Step7中,梯形图编程不支持对PLC的间接寻址,用指令表的方式虽可实现,但步骤

烦琐且程序可读性差,相比之下,用SCL的方式来做就简便的多,具体方法如下:

1、位寻址

MX[i,j,i为字节地址,j表示该字节中的哪个位,当i=5;j=0时,表示M50

2、字节、字、双字寻址

MB[i] IW[i]、QB[i]、MD[i]

这次的分享就到这里,对于个人在学PLC或者在实际应用中,看习惯是用的哪一种编程语言更是有效,就首当其选那种编程语言!

以上,欢迎动动手分享及收藏!以上,欢迎动动手分享及收藏!

S7-1200plc作为从站的编程详解

S7-1200 作为Modbus RTU 从站

S7-1200 支持Modbus RTU通信模式的模块可作为Modbus RTU从站。以下以 CPU1215C DC/DC/DC和CM1241 RS485为例,介绍S7-1200 Modbus RTU 从站通信组态及编程步骤。

硬件和软件需求及所完成的通信任务:

硬件: ① CPU1215C DC/DC/DC (订货号:6ES7 215-1AG31-0XB0)② CM1241 RS485 (订货号:6ES7 241-1CH30-0XB0)③ PS 307电源(订货号:6ES7307-1KA02-0AA0) ④ PC(带以太网卡) ⑤ TP以太网电缆软件: ① STEP 7 V11 Professional SP2 UPD4 +HSP② ModScan(该软件是第三方软件,可以从 Internet 网络下载)所完成的通信任务: 将Modbus RTU从站CPU1215C中地址从DB1.DBW0开始的5 个字中的数据,分别读取到Modbus RTU主站ModScan中Modbus地址从40001开始的5个字中。

1 组态Modbus RTU通信模块

在硬件目录里找到“通信模块”→“点到点” “CM1241(RS485)”,双击或拖拽此模块至CPU左侧即可,如下图1所示:

图1 组态通信模块

接下来,在“设备视图”中用鼠标选中CM1241(RS485)模块,在“属性”→“端口组态”中配置此模块硬件接口参数。如下图2所示:

以下以传输率=9.6Kbps,奇偶校验=无奇偶校验,数据位=8位字符,停止位=1,其它保持默认设置为例。

图2 RS485 端口设置

最后在“硬件标识符”里确认一下硬件标识符为271,如下图3所示:

图3 硬件标识符

2 添加启动OB

在项目树下选择“CPU1215C DC/DC/DC”→“程序块”→“添加新块”,在弹出的窗口中选择“OB 组织块”→ “Startup”,添加启动OB 100,如下图4所示:

图4 添加启动OB

3 调用MB_COMM_LOAD指令

为使端口一启动就被设置为Modbus RTU通信模式,可在OB 100中调用“MB_COMM_LOAD”指令。调用“MB_COMM_LOAD”指令时会自动弹出创建相应背景数据块的界面,如下图5所示:

图5 调用MB_COMM_LOAD指令

点击“确认”为该指令创建背景数据块后,为各输入/输出引脚分配地址。尤其需注意MB_DB输入引脚需指向“MB_SLAVE”指令的背景数据块,如下图6所示:

注意: “MB_COMM_LOAD”指令输入位“REQ”需使用上升沿触发。由于OB 100只在S7-1200启动时执行一次,因此,此例中将“REQ”设为“TRUE”。

图6 MB_COMM_LOAD指令

MB_COMM_LOAD指令参数意义如下表1所示:

引脚

说明

EN

使能端

REQ

在上升沿执行该指令

PORT

通信端口的硬件标识符

BAUD

波特率选择:3600,6000,12000,2400,4800,9600,19200,38400,57600,76800,115200 (注意:所有其它值均无效)

PARITY

奇偶检验选择:0-无;1-奇校验;2-偶校验

FLOW_CTRL

流控制选择:0-(默认值)无流控制

RTS_ON_DLY

RTS延时选择:0-(默认值)

RTS_OFF_DLY

RTS关断延时选择:0-(默认值)

RESP_TO

响应超时:默认值 = 1000 ms。MB_MASTER 允许用于从站响应的时间(以毫秒为单位)。

MB_DB

对 MB_MASTER 或 MB_SLAVE 指令所使用的背景数据块。

DONE

完成位:指令执行完成且未出错置1

ERROR

错误位:0-未检测到错误;1-检测到错误。在参数STATUS中输出错误代码。

STATUS

表1 MB_COMM_LOAD指令参数意义

4 创建MB_HOLD_REG数据块

通过“程序块”→ “添加新块”,选择“数据块(DB)”创建 DB 块,选择“标准与S7- 300/400兼容” ,点击“确认”键,定义数据区为5个字的数组,如下图7所示:

注意:MB_HOLD_REG使用的DB访问类型必须是标准与S7- 300/400兼容。

图7 创建MB_HOLD_REG数据块

5 调用MB_SLAVE指令

在OB1中调用MB_SLAVE指令, 调用该指令时会自动弹出创建相应背景数据块的界面,如下图8所示:

图8 调用MB_SLAVE指令

点击“确认”为该指令创建背景数据块后,并为各输入/输出引脚分配地址,如下图9所示:

S7-1200作为Modbus RTU从站,MB_HOLD_REG指向Modbus保持寄存器数据块的指针。设置如下所示:MB_HOLD_REG=P#DB3.DBX0.0 WORD 5。

对应关系如下表2所示:

Modbus RTU主站Modbus地址

Modbus RTU从站CPU1215C 数据缓冲区地址

40001

DB3.DBW0

40002

DB3.DBW2

40003

DB3.DBW4

40004

DB3.DBW6

40005

DB3.DBW8

表2 Modbus地址对应关系

图9 MB_SLAVE指令

引脚

说明

EN

使能端

MB_ADDR

Modbus 从站的站地址 。默认地址范围:0 至 247;扩展地址范围:0 至 65535

MB_HOLD_REG

指向 Modbus 保持寄存器数据块的指针。必须使用“标准 - 与 S7-300/400 兼容”访问类型创建该数据块。

NDR

新数据就绪:0-无新数据;1-表示Modbus主站已写入新的数据

DR

数据读取:0-无数据读取;1-表示Modbus主站已读取新的数据

ERROR

错误位

STATUS

表3 MB_SLAVE指令参数意义

MB_SLAVE Modbus功能

S7-1200

代码

功能

数据区

地址范围

数据区

CPU地址

01

读位

输出

1到8192

输出过程映像区

Q0.0到Q1023.7

02

读位

输入

10001到18192

输入映像区

I0.0到I1023.7

04

读字

输入

30001到30512

输入映像区

IW0到IW1022

05

写位

输出

1到8192

输出过程映像区

Q0.0到Q1023.7

15

写位

输出

1到8192

输出过程映像区

Q0.0到Q1023.7

表4 Modbus地址到过程映象区的映射

MB_SLAVE Modbus功能

S7-1200

代码

功能

数据区

地址范围

CPU DB数据区

CPU地址

03

读字

保持寄存器

40001到49999

MB_HOLD_REG

字1到字9999

400001到465535

字1到字65535

06

写字

保持寄存器

40001到49999

MB_HOLD_REG

字1到字9999

400001到465535

字1到字65535

16

写字

保持寄存器

40001到49999

MB_HOLD_REG

字1到字9999

400001到465535

字1到字65535

表5 Modbus地址到CPU存储区的映射

6 Modbus 主站软件设置

注意: 客户机采用ModScan软件测试,该软件是第三方软件,可以从 Internet 网络上下载。

首先在打开的ModScan软件中建立连接,并设置RTU模式的参数:波特率Baud=9600,数据位Data=8,停止位Stop=1,校验Parity=NONE,如下图10所示:

图10 建立ModScan连接

选择“File” “New” 打开ModScan通信界面,设置Modbus RTU从站的地址Device Id=1,数据开始地址Address=0001,数据长度Length=5,Modbus数据类型功能码03,如下图11所示:

注意: Device Id设置必须与“MB_SLAVE”指令中输入引脚“MB_ADDR”设置的地址一致。

图11 设置ModScan

7 Modbus RTU测试结果

在STEP 7 V11 Professional SP2 UPD4软件中打开该项目CPU1215 DC/DC/DC的“监控表”,对DB3.DBW0写入数值21,DB3.DBW2写入数值22,DB3.DBW4写入数值23,DB3.DBW6写入数值24,DB3.DBW8写入数值25。ModScan主站将S7-1200 Modbus RTU从站地址DB3.DBW0的数值21,DB3.DBW2的数值22,DB3.DBW4的数值23,DB3.DBW6的数值24,DB3.DBW8的数值25,分别读取到了地址40001,40002,40003,40004,40005中。如下图12所示:

图12 Modbus RTU测试结果

MB_COMM_LOAD和MB_SLAVE指令STATUS错误代码

STATUS(W#16#)

说明

0000

端口无错误

8180

端口ID值无效

8181

波特率值无效

8182

奇偶校验值无效

8183

流控制值无效

8184

响应超时值无效

8185

MB_DB参数不是MB_MASTER或MB_SLAVE的背景数据块

表6 MB_COMM_LOAD指令STATUS错误代码

STATUS(W#16#)

说明

0000

无错误

80D1

接收方发出了暂停主动传输的流控制请求并且在指定的等待时间内未重新激活该传输

80D2

传送请求终止

80E0

因接收缓冲区满,消息被终止

80E1

因出现奇偶校验错误,消息被终止

80E2

因组帧错误,消息被终止

80E3

因出现超限错误,消息被终止

80E4

因指定长度超出总缓冲区大小,消息被终止

8180

无效端口ID值或MB_COMM_LOAD指令出错

8186

Modbus站地址无效

8187

指向MB_HOLD_REG指针无效

818C

指向M存储器或DB(DB区域允许符号地址和直接地址)的MB_HOLD_REG指针无效

表7 MB_SLAVE指令STATUS参数意义(通信和组态错误)

STATUS(W#16#)

从站的响应代码

说明

8380

无响应

CRC错误

8381

01

不支持功能代码或者在广播中不支持功能代码

8382

03

数据长度错误

8383

02

数据地址错误或地址超出DATA_PTR取的有效范围

8384

03

数据值错误

8385

03

不支持此数据诊断代码值

表8 MB_SLAVE指令STATUS参数意义(Modbus协议错误)

常见问题

为什么触发“MB_SLAVE”指令出错,输出位“ERROR”=1,输出状态字“STATUS”=16#8187?

输出状态字”STATUS“=16#8187表示指向MB_HOLD_REG指针无效。以下两种情况会造成如上错误:

程序中不存在“MB_SLAVE”指令的输入引脚“MB_HOLD_REG”对应的DB块。在创建“MB_SLAVE”指令的输入引脚“MB_HOLD_REG”对应的DB块时选择了“仅符号寻址”。

解决方法分别如下:

新建“MB_SLAVE”指令的输入引脚“MB_HOLD_REG”对应的DB块。创建“MB_SLAVE”指令的输入引脚“MB_HOLD_REG”对应的DB块时只能选择了“标准与S7-300/400兼容”。      

爱上电气 我是电气工程师,分享电气知识;【重要提示】请点击关注,然后进入

公众号

相关问答

plcmb和m区别?

在PLC(可编程逻辑控制器)中,MB和M都是代表内部存储区的标识符,但它们在使用上有所不同。MB,全称为MemoryByte,用于表示长度为字节(Byte)的操作数在内部...M...

PLC中的操作数VBIBQBMBSMBSBLBAC*VD*AC*LD西门子PLC中的操作...

[最佳回答]字节读的一个字节8各位既1BYTE=8BITVB100就是V第100的字节的意思IB是输入字节例如IB0就是I0.0、I0.1、I0.2...I0.7这7个位组成的字QB是输...

一般的plc程序多长?

一般的plc程序1M。PLC的程序容量一般是用kB为单位…1M(兆)=1024kB,1kB=1024字节,…一般就几到十几kB的容量…比如三菱FX2N的PLC8kB的容量可存8000步程序…容...

PLC中的MB0MB1MB2的数值是多少这是什么意思?

MB是指M寄存器的一个Byte的数值是多少,例如M0.0到M0.7的二进制高位到低位是00100100那MB0的十进制数值就是68。MB是指M寄存器的一个Byte的数值是多少,例如M0...

plc中mw和mb的关系?

M是位地址。比如M0.0,M0.1等。MB0是字节地址,包括8个位地址,从M0.0~M0.7。MB1的8个位地址,从M1.0~M1.7。MW0是字地址,包括MB0和MB1,即从M0.0~M1.7...

plc原理及应用中mb10是什么含义?

PLC是采用“顺序扫描,不断循环”的方式进行工作的。在PLC运行时,CPU根据用户按控制要求编制好并存于用户存储器中的程序,按指令步序号(或地址号)作周期性循...

PLC怎么连接电脑?怎么把在电脑编程好的程序放入PLC运行?

三菱FX系列PLC如何接线及如何通过RS232进行下载程序今天简单给大家介绍下三菱FX系列PLC如何接线和如何通过RS232进行下载程序,简单的说明帮助大家能快速与PLC通...

PLC中M100.1、MB100、MW100、MD100的含义?–960化工网问答

MB100是字节类型地址,为M区域(辅助继电器)的第100个字节,一个字节8个位,所以MB100就包含了M100.0~M100.7。MW100是字类型地址,为M区域(辅助继电器)的第100个字...

三菱plc如何建立modbus通信?需要什么硬件?

三菱plc如何建立modbus通信,就拿fx系列的plc来说,首先通信设备有两种,一种是后缀为bd的板子(通信板),一种是后缀为adp的板子(通信适配器),两者区别后者价格...三...

童鞋们!请解答一下求兼容西门子S7-200的国产PLC?国产plc品...

[回答]58MBPLC国产JIACHENG编程电缆驱动(黑色一代、黄色代)2018-03-05《黑色一代电缆驱动》、《黄色代电缆驱动》适用于:所有黄色代非隔离型电缆驱动、《...

 张凯峰  先锋m1 
王经理: 180-0000-0000(微信同号)
10086@qq.com
北京海淀区西三旗街道国际大厦08A座
©2024  上海羊羽卓进出口贸易有限公司  版权所有.All Rights Reserved.  |  程序由Z-BlogPHP强力驱动
网站首页
电话咨询
微信号

QQ

在线咨询真诚为您提供专业解答服务

热线

188-0000-0000
专属服务热线

微信

二维码扫一扫微信交流
顶部