6ES7223-3BD30-0XB0漳州西门子一级代理商6ES7223-3BD30-0XB0漳州西门子一级代理商
SIMATIC S7-1200 系列 CPU 使用配方数据功能,需要注意以下几两点:
程序中创建一个配方数据块,此 DB 块必须存储在 CPU 装载存储器中,可以使用 CPU 内部装载存储器或程序卡
程序中创建一个活动配方数据块,此 DB 块必须在 CPU 工作存储器中,使用程序逻辑读取或写入一个活动配方记录
下面,举例说明用 S7-1200 实现配方的写入和读取功能。为方便配方数据操作,按照下图思路进行项目编程:
图1 配方项目框图
测试环境:
操作系统:Win 10 64bit Pro 1703
软件:TIA PORTAL V15 Update 4
测试软件:Notepad++ V7.5.8
硬件:S7-1215C DC/DC/DC V4.2.3
订货号:6ES7215-1AG40-0XB0
1.定义一个 PLC 数据类型(UDT)
配方数据块必须包含数组,可以是一维的也可以是多维的,数组元素是 PLC 数据类型或结构。在这个配方实例中使用 PLC 数据类型创建配方数据块。
在此,创建一个 PLC 数据类型,以定义一个配方记录中的所有组成,以制造蛋糕为例,建立UDT过程参见链接,建好后如图2所示。
图2.定义 PLC 数据类型
数据类型是一个数据模板,它在每个配方数据块以及活动配方数据块中重复使用。输入所有实例配方共用的成分名称和数据类型,根据分配给配方成分的数值不同而产生不同的产品配方。
2.使用 PLC 数据类型创建配方数据块
创建一个配方数据块,为全局数据块,并启用数据块属性'仅存储在装载内存中',如图3红圈所示。本例中,配方数据 DB 块名称为 'DB1_蛋糕配方",如图4所示,插入一个数组类型变量,数组元素的数据类型为'蛋糕配方',本例中设置数组限值0..7,即可创建8个配方,可根据实际情况调整。
注意,如果需要使用RecipeExport和RecipeImport导入导出,配方DB块的名称中尽量不出现中文字符,否则在WEB页面操作会略微麻烦一些,具体详见配方数据的管理。本例为显示直观,所以使用了“DB1_蛋糕配方"的名字。
对于图3的优化的块访问选项,一般默认激活,因为从S7-1200 V4.2起,对于仅存储于装载存储器的优化块的大小限制为256kB,而仅存储于装载存储器的非优化块仅有64kB,显然优化块可以存储更多的配方记录,如果单个配方数据太多,需要放在多个DB中,也可以减少DB块个数。
3.在工作存储器中创建活动配方 DB,并通过“READ_DBL"和“WRIT_DBL"指令实现对装载存储区配方数据块的读写操作
在工作存储器中准备一个活动配方数据块,用于配方数据的写入和读取。在本例中,在工作存储器中创建了一个全局数据块,名称为 'DB2_活动配方",类型为“蛋糕配方",如图5所示。
图5.添加活动配方块
确定后,就可以得到活动配方数据块,该块只由一组配方组成,如图6所示。
图6.活动配方数据块
注意,因为指令“READ_DBL"和“WRIT_DBL"的缘故,要求活动配方数据块与配方数据块的优化属性必须相同,即都同时是优化数据块,或者同时是非优化数据块。
将这个 DB 块作为与装载存储器中配方数据块的接口,分别通过指令“WRIT_DBL"能实时将存于工作存储器的活动配方数据写入至装载存储器的配方数据块,或者通过指令“READ_DBL"实时读取装载存储器的配方数据块到工作存储区中活动配方数据。
4.导出配方数据块
对于S7-1200 V4.0及其以后版本的CPU,可以使用指令RecipeExport和RecipeImport对配方数据块进行导入和导出,在电脑上使用EXCEL、ASCII编辑器等工具编辑。
对于S7-1200 V4.0以前的版本,一般建议直接在配方数据块的起始值输入配方,这一部分用户可以直接跳过下面4-6步,直接看第7步。
在本例中,直接在OB1使用LAD语言调用RecipeExport和后面的RecipeImport块,实际使用时可以在FC/FB,或者FB的多重背景中使用,语言也可以使用FBD、SCL。
首先新建DB块,用于调用块的请求与状态位等,名称为'DB3_操作',建立结构体'Export',以及相关变量,如图7所示。
图7. 建立结构体
在 OB1 调用RecipeExport,以及捕捉是否完成及错误代码等程序,如图8所示。
图8.调用RecipeExport指令
5.配方csv文件的导入和导出
可以使用Web服务器或者存储卡的方式对csv文件进行导入和导出,在电脑上的Excel等软件上进行配方数据的编辑,具体操作详见配方数据的管理。
6.导入配方数据块
当配方文件通过WEB上载完成,或通过存储卡重新导入文件后,就可以导入配方数据块。和第4步类似,在DB块'DB3操作',中建立结构体'Import',以及相关变量,结构同'Export',如图9所示,用于RecipeImport的请求与状态位。
在 OB1 调用RecipeImport,以及捕捉是否完成及错误代码等程序,如图10所示。思路同第4步。
图10.调用RecipeImport指令
7.读取配方数据
经过使用配方指令或者直接在配方数据块的编辑,此时配方数据已经保存在PLC的装载存储器中,需要使用READ_DBL指令读取出来。可以在DB块'DB3操作',建立一个Int类型变量Index用作配方编号。对于本例,配方数组限值为0-7,所以该配方编号变量取值范围也是0-7,可以在HMI画面上设置该值,也可以在程序中设置该值。此外同样在DB块'DB3_操作',建立结构体'Read',以及相关变量,用于READ_DBL的请求与状态位,如图11所示。
然后利用数组的索引寻址功能,将配方数组索引的变量读取到活动配方,即如果需要配方0送到活动配方数据块,则Index赋值为0,需要配方1送到活动配方数据块,则Index赋值为1,......,具体程序如图12所示。
然后就可以直接使用活动配方了,不论是程序中,还是HMI画面中。例如本例中,当Index=0时,读出的活动配方DB,如图13所示。
8.在线修改配方
通常配方功能使用到第7步就可以结束了,如果需要偶尔小范围修改配方数据,不想大规模导入导出,或者不想打开程序修改配方数据起始值,可以使用WRIT_DBL指令实现该功能。
对于本例依然利用DB块'DB3_操作'的变量Index,确定需要修改的配方编号,实际编程可以根据需要使用和读配方不一样的配方编号变量。
通常在HMI画面上需要修改的配方编号,并且将活动配方的变量与HMI的IO域关联,使用一个按钮触发READ_DBL的REQ将该配方编号对应的参数都读取到活动配方,即映射到了IO域,然后再修改其中需要修改的变量,后再使用另外一个按钮触发WRIT_DBL的REQ实现将改后的活动配方写入该配方编号对应的配方,参考画面如图14。
同样在DB块'DB3_操作',建立结构体'Write',以及相关变量,结构同'Read',用于WRIT_DBL的请求与状态位,如图15所示。
后同样,利用数组的索引寻址功能,将活动配方写入到配方数组索引的变量,即如果需要修改配方0,则将Index赋值为0,修改活动配方数据块后写入,需要修改配方1,则将Index赋值为1,修改活动配方数据块后写入,......,具体程序如图16所示。
本例如图17所示,读出Index为0的配方,然后修改黄油数据为2.0,“写入配方"按钮即可修改配方DB的值。
PROFINET IO 主要用于模块化、分布式的控制,通过以太网直接连接现场设备,通信为全双工点到点方式,按设定的更新时间双方对等发送数据。
PROFINET IO按通信时效性来分,有三种通信水平:
种,非实时数据传输,英文简称NRT,典型通信时间为100ms。
种,实时通信,英文简称RT,典型通信时间为0.5~10ms。
种,等时实时通信,英文简称IRT,需要特殊设备支持,典型通信时间为0.25~1ms。
在同一个项目中的PROFINET IO通信
1、打开博途软件,创建一个项目。
2、“设备与网络"→“添加新设备"→选择“控制器"→选择PLC的CPU类型,如“非的CPU 1500"→选择“6ES7……"双击。
3、如软件已经连接到PLC,。
4、如检测到PLC,选择CPU型号,连接,把空程序下载到PLC,给PLC一个清空动作。
也可以右键选择“更改设备",选择实际PLC的CPU类型。
5、打开网络视图,再添加一个PLC,连接它们的网口。
6、作为IO设备的PLC2的网口,进入属性设置,在“操作模式"的“智能设备通信"中,选择已分配的IO控制器(PLC1),如不在本项目,则选择未分配。
在“传输区域"中设置所要传输的数据,如这里设置的“传输区1"和“传输区2"。
箭头切换传输方向。
7、编译后,把程序分别下载到PLC1与PLC2,设备即可试机。
不在同一个项目中的PROFINET IO通信
1、新建一个项目,添加一个设备,在“网络视图"中,设置网口属性中的设备名称。
2、设置“操作模式"中的传输区。
3、导出常规站描述文件(GSD),导出前需要编译正确。
4、在主站(IO控制站)中,安装刚才保存的GSD文件。
5、在网络视图中,添加GSD device,这里选择刚才保存的“IO123"。
6、两个设备的网口,把它们连接起来,IO123设备,进入设备视图,可修改传输区的首地址。
编译后,**到PLC试机。
西门子S7-1200 PLC 水箱水位控制程序案例
先说明一下案例的控制要求:
1、该控制项目为水箱水位控制系统,系统中一共有3隔水箱,每隔水箱抖音一个液位传感器、输出的信号为0~10V电压信号,检测液位的高度为0~3m,液位为0.2m时为低液位,液位为2.5时为高液位。
2、每个水箱有三个进水阀和三个出水阀,进水阀分别是Y1、Y3、Y5,出水阀分别是Y2、Y4、Y6,每个水箱都有出水阀开和出水阀关两个按钮,出水阀开按钮分别是SB1、SB3、SB5,出水阀关按钮分别是SB2、SB4、SB6。
3、我们通过按SB1SB3SB5可以分别对各个水箱进行防水操作,顺序是随机的,当系统检测到水箱的“空"信号时,系统会自动打开水箱进水阀进行注水,当检测到水箱“满"信号时停止进水。水箱注水和水箱放空的顺序是相同的,而且每次只能对一个水箱进行注水的操作。
首行IO分配:IO分配好之后根据IO分配的点进行接线即可,还需注意液位传感器需要接到模拟量输入模块,一共有三个液位传感器,那么可以选择SM1231 AI04的模块,分别接到通道1、通道2、通道3即可。
PLC控制程序设计:(案例源程序获取,请看文末)
1、首行硬件组态、配置模拟量模块的参数(案例源程序获取,请看文末)
我们选用CPU1214C DC/DC/DC型号的PLC,此外因为需要对三个水箱的水位进行采集,要使用到模拟量输入模块,我们选用的是SM1231 AI04模块,设备组态配置图如下图。因为使用到了模拟量模块,还需要设置相应的模拟量输入信号的参数。根据液位继电器的输出信号类型进行配置,我们配置测量类型为电压,电压范围是正负10V,滤波为4个周期,启用溢出诊断和下溢诊断。通道0对应的地址是IW96,通道1对应的地址是IW98,通道2对应的地址是IW100。2、编写模拟量处理程序
模拟量转换程序,是用来把采集到的模拟量信号转换成实际的液位,并将它与低液位和高液位做比较,从而输出是否达到低液位信号和高液位信号。因为三个水箱 计算过程是相同的,所以我们可以编写一个带形式参数的FC块,方便重复调用。具体操作是添加一个FC块,并且命名为“模拟量处理",设置好变量并编写FC程序。
3、建立一个PLC数据类型、添加一个全局DB块
在PLC数据类型页面中添加一个PLC的数据类型,并把它命名为“Analog",在里面建立之后需要用到的变量,包括当前水位、低水位和高水位,并且设置好这三个变量的数据类型。
此外,再新建一个全局DB块,把它命名为“水箱控制数据",我们可以在里面建立一个名称为“模拟量"的变量名称,数据类型设置成数组Array[0..2]of “Analog",然后把每个元素的数据类型选择成建立的PLC的数据类型。
4、编写水箱放水和进水控制程序(案例源程序获取,请看文末)
因为有三个水箱,它们的注水和放水的过程是一样的,我们就可以把水箱的注水和放水过程的程序编写成一个带形式参数的FB块,方便重复调用。具体操作是添加一个FB块,并命名为“水箱控制",在FB的接口区建立相应的形式参数变量,然后再编写FB中的控制程序。
以上是打开放水阀程序,当按下放水阀开按钮时,放水电磁阀打开,按下放水阀关按钮或者水位达到低水位时,关闭放水阀。
以上标记水箱空标志程序,因为水箱出现空信号后可以进行注水操作,但是一次只能对一个水箱进行注水,所以当标记水箱为空标志信号为1时,才可以进行注水操作。
当水箱水位到达低水位,则说明水箱是空的,这时如果另外两个水箱的空标记信号没有,那么这个水箱的空标记信号输出为1,如果另外两个水箱已经有水箱出现空标记信号的话,那么这个水箱的空标记信号不能输出为1。
而且当这个水箱开始注水时,水箱的空标记信号需要复位。
以上是开进水阀程序,当水箱空标记为1时,就可以打开进水电磁阀,同理因为一次只能对一个水箱进行注水操作,所以如果检测到另外两个水箱有注水操作时,那么这个水箱也不能进行注水操作。当达到高水位时停止关闭进水电磁阀,停止注水操作。
5、调用模拟量处理FC块和水箱控制FB块程序(案例源程序获取,请看文末)
添加一个FB块,并命名为“水箱水位控制程序",我们在这个FB块中调用模拟量处理FC块,模拟量处理FC块的作用是对每隔水箱的液位传感器的数据进行处理。
此外还要调用水箱控制FB块程序,需要注意调用FB块在分配背景数据块时,要选择多重实例背景,调用之后编写每隔水箱的放水和进水的程序。
6、主程序OB1中调用水箱水位控制程序的FB块
这样,我们就完成了整个控制案例的程序设计,当然这并不是一个完整的项目,如果是应用到实际项目中,可能还会有其他需要考虑的问题哦,这个就等待大家家去思考啦~
- 上一篇: 6ES7223-3AD30-0XB0
- 下一篇: 6ES7232-4HA30-0XB0