产品描述
西门子6ES7352-1AH02-0AE0产品齐全
1BCD码数据外部输入应用设计举例
1.1设计思路
介绍SIEMENS(西门子)公司PLCS7—200的物理存储区结构,一般情况下,物理存储区是以字节为单位的,所以存储单元为字节单元,操作数长度是字或双字时,标识符后给出的存储单元参数是字或双字内的字节单元号。图1(a)给出了字节、字、双字的相互关系及表示方法。当使用数据宽度为字或双字时,应保证没有生成任何重叠的存储器字节分配,例如,字地址编码应采用MW10、MW12、MW14······等偶数字地址或MW11、MW13、MW15·······等奇数字地址,由于存储器字MW10占用MB10、MB11两个字节,而MW11则要占用MB11、MB12两字节,存在字节地址重叠单元MB11,所以字地址编码时奇偶不能兼用,以免造成数据读写错误。图1(b)给出数据存储结构,数据的高位用MSB表示,低位用LSB表示。
其次,以德国SIEMENS(西门子)公司的S7—200PLC为例。构成加热控制系统,加热时间采用三位十进制数的BCD码拨盘从PLC外部输入。PLC输入/输出接点分配如下表所示:
加热系统的加热元件用PLC输出点Q0.0控制,系统起动按钮由I1.4输入,复位按钮由I1.5输入。
这里选择两个字节的PLC输入映象寄存器IB0和IB1作为外部数据输入端,利用三个BCD码拨盘将外部数据分别置入IB0、IB1两个字节中。每个BCD码拨盘需用四位PLC输入点,如个位BCD码8421端分别接至PLC的I0.3、I0.2、I0.1、I0.0输入接点,分配PLC的输入接点IB0的低4位为BCD码的个位数、高4位为BCD码的十位数、IB1的低4位为BCD码的百位数、高4位为无效位。利用传送指令分别将个、十、百位数送入三个内部标志寄存器(或内部变量寄存器)保存,并将送入的十位、百位数分别乘以权10和权100,后将处理好的个位、十位、百位数相加,运算结果作为加热器的加热时间常数,PLC在用户程序初始化时,将其送入加热时间定时器中,对加热器加热时间进行实时控制,PLC在每次运行开始初始化程序中读取BCD码拨盘数据。这样采用改变外部拨盘的数据。即可以灵活地改变加热时间。
后,在图2程序流程中,介绍了外部数据输入处理过程的基本思路。
1.2用户处理程序
用户程序由主程序和初始化子程序组成,根据特殊标志位SMO.1在程序扫描时给出的脉冲信号,调用初始化子程序,实现BCD码的数据输入。这样,在其后的扫描周期中不再会调用该程序,这减少了扫描时间且程序结构化。用户程序说明:(1)程序段一实现子程序调用功能;(2)段二和段三实现加热器加热控制功能,输出继电器Q0.0由I1.4置位、定时器T37或I1.5复位,定时器T37的计时常数由内部标志寄存器MW8置入;(3)段5—段9为BCD码数据输入、处理子程序。段六、七分别将个位、十位、百位送MW2、6和VW2保存。段八实现十位乘10,百位乘100,运算结果分别送入VD4和VD8功能,并且将个位、十位、百位数求和运算结果送入MW8作为加热器加热时间。(4)段九为子程序返回。PLCS7-200梯形图程序如图3所示。
2设计关键技巧和注意事项
设计技巧:是用BCD码拨盘,把加热器的加热时间值置成BCD码数,并用PLC的数据传送指令读入输入映象寄存器,进行运算后,作为控制加热定时器的预置值,从而达到实时控制。
注意事项:是应特别熟悉PLC物理寄存器内部结构,以便正确地确定BCD码数据输入位与PLC输入接点的关系,使之与定时器的时间常数相对应。其次,本参考程序在PLC由STOP状态进入RUN状态时读入外部数据,故只能在STOP状态修改BCD拨盘数据。若需在程序运行其间改数据时,只要将子程序调用条件稍加改动即可。
3结束语
随着PLC技术在现代工业中的广泛应用,利用外部装置输入、修改控制数据的应用场合越来越多,PLC应用技术和技巧应普及,以不断提高工业控制技术水平,提高劳动生产率,提高国民的生活水平和综合国力。以上,我们探讨的是一种简单而的外部数据输入方法,可供专门从事PLC应用技术研究的工程技术人员参考
1.整数、双整数、浮点数的四则运算
西门子S7-200/300/400PLC的四则运算指令基本相同,主要是对两个操作数的加、减、乘、除运算,操作数可以是整数、双整数、浮点数等。S7-200与S7-300/400的指令格式相似,梯形图程序格式如图10-7.1所示。
图中的IN1为四则运算中的被加数、被减数、被乘数、被除数;IN2为加数、减数、乘数、除数:OUT为运算结果存储器地址。
从图10-7.1可见,尽管S7-200与S7-300/400的梯形图指令相同,但从转换后的指令表可以看出两者在执行过程中存在差异。
S7-200的执行过程如下:
①将操作数l(被加数、被减数、被乘数、被除数)移动到结果存储器;
②将结果存储器(操作数1)与操作数2(加数、减数、乘数、除数)进行运算,并将运算结果存储到结果存储器中。
S7-300/400的执行过程如下:
①将操作数l(被加数、被减数、被乘数、被除数)读入到累加器l中:
②将操作数2(加数、减数、乘数、除数)读入到累加器1中,原累加器1中的操作数l移动到累加器2中:
③累加器2中的内容与累加器l运算,运算结果存储在累加器l中;
④累加器1的运算结果传送到结果存储器中。
四则运算编程时应注意以下几点:
①在S7-200中,整数、双整数的运算结果仍然为整数与双整数,因此,在程序中应注意防止因运算溢出而导致的执行错误。
②在S7-200中整数、双整数的除法运算DIV—I、DIV- DI指令,以及S7-300/400的DIV_ DI指令,除法运算的结果不保留余数。
③对于S7-200的整数除法,如果需要余数,可以使用DIV指令。DIV指令要求的输出存储器OUT为32位,执行DIV指令后,两个整数的除法运算可以得到32位运算,输出存储器OUT的高16位用于存储余数,低16位用于存储商。
④S7-200的双整数除法无法保留余数。
⑤对于S7-300/400的整数除法,可以自动生成余数,执行DIV I指令后,累加器l的高16位存储余数,低16位存储商。
⑥对于S7-300/400的双整数除法,如果需要余数,可以在利用DIV DI指令求出商后,再使用MOD指令求余数。执行MOD指令后,商被舍去,累加器l存储余数。
⑦除法运算的除数不能为“O”。
2.浮点数的函数运算
在S7-200/300/400中,浮点数可以进行函数运算。函数运算包括正弦、余弦、正切、平方根、自然对数、指数等运算,在S7-300/400中还可以进行平方、反正弦、反余弦、反正切、求等运算。
对于浮点数的函数运算,为了得到正确的运算结果,同样应遵守函数运算的基本规定与要求,保证程序中操作数取值范围的正确性。
3.增量指令
在S7-200中,除可以使用以上数据运算指令外,还可以通过专门的指令对字节、字、双字进行增“1”( Increment)与减“1”(Decrement)运算。这些指令的使用十分简单,可以按照表10-7.1的格式直接编程。
除以上常用的功能指令外,S7还有其他部分功能指令,如程序控制指令,S7-200中的表指令、字符串指令、特殊计数指令等。这些指令有的使用较少。
寻址和符号寻址
在STEP 7程序中,使用地址如I/O信号、位内存、计数器、定时器、数据块和功能块。可以在程序中访问这些地址,但是如果使用地址符号,程序将阅读(例如,Motor_A_On或其它符合公司或行业内代码系统的符号)。然后,可以通过此符号访问用户程序中的地址。
地址
地址包含地址标识符和内存位置(例如,Q 4.0, I 1.1, M 2.0, FB21)。
符号地址
如果将符号名分配给地址,可以使程序易读,并能简化故障排除。
STEP 7可以自动地将符号名称翻译成所需要的地址。如果愿意使用符号名称访问ARRAY、STRUCT、数据块、本地数据、逻辑块和用户自定义数据类型,在使用符号寻址数据前,将符号名称分配给地址。
例如,可以将符号名称MOTOR_ON分配给地址Q 4.0,然后在程序语句中将MOTOR_ON作为地址使用。使用符号地址,识别程序中的元素与过程控制项目的组件的匹配程度。
支持编程
在编程语言梯形图、功能块图和语句表中,可以输入地址、参数和块名称,作为地址或符号。
使用菜单命令视图 > 显示 > 符号表示法,可以在地址的表示法和符号表示法之间切换。
为了使用符号地址编程,可以显示地址和属于符号的符号注释。可以使用菜单命令视图 > 显示 > 符号信息此信息。这意味着每个STL语句后的行注释中包含多的信息。不能编辑该显示;任何改变都在符号表或变量声明表中进行。
下图显示在STL中的符号信息。
当打印输出一个块时,具有语句注释或符号注释的当前画面表示也被打印。
共享符号与局部符号
符号使您能够采用具有某种意义的符号名来代替地址进行工作。短符号和长注释的有效结合,可使编程、程序文档的质量好。
应注意区分局部(块)符号和共享符号之间的不同。
显示共享符号或局部符号
程序代码段中的共享符号与局部符号之间的差别可区分如下:
来自符号表中的符号(共享符号)将显示在引号".."内。
来自块的变量声明表中的符号(局部符号)将在冠以字符"#"。
引号或"#"无须输入。在梯形图、FBD或STL中输入程序时,语法检查将自动添加这些字符。
如果担心在某些情况下出现混淆,例如在符号表和变量声明中都使用同一个符号,那么当您要使用该共享符号时,直接对其进行编码(输入地址或者包括引号的符号)。此时,没有进行分别编码的任何符号都将解释为块 (局部)的变量。
如果符号包含有空格,也对共享符号进行编码(输入地址或者包括引号的符号)。
当在STL源文件中进行编程时,将采用同样的特殊字符及准则。在自由编辑模式下,将不会自动添加代码字符,但如果您希望避免混淆,这些代码字符将仍然需要。
设置地址权(符号地址/地址)
在改变符号表中的符号、改变数据块或功能块的参数名称、改变引用组件名称的UDT或修改多重背景时,地址级有助于按照您的意愿调整程序代码。
当在下列情况下进行改动时,仔细设置地址级,并要有明确的目的。为了能从地址级中获益,在开始另一类型的改动之前,每个改动过程都完成。
为了设置地址级,请转到SIMATIC管理器,并选择块文件夹,然后选择菜单命令编辑 > 对象属性。在"地址级"选项卡中,可以进行与自己要求相适合的设置。
在地址级中进行优化设置要求区分下列改动情况:
纠正单个名称
实例:
在符号表或程序编辑器/块编辑器中,纠正名称的拼写错误。这适用于符号表中的所称,以及可以使用程序编辑器/块编辑器进行修改的所有参数、变量或组件的名称。
设置地址级:
跟踪改动:
在SIMATIC管理器中,选择块文件夹,然后选择菜单命令编辑 > 检查块一致性。"检查块一致性"功能在单个块中进行必要的改动。
转换名称或分配
实例:
符号表中现有分配的名称已转换。
符号表中现有的分配被分配了新地址。
变量名称、参数名称或组件名称在程序编辑器/块编辑器中被转换。
设置地址级:
跟踪改动:
在SIMATIC管理器中,选择块文件夹,然后选择菜单命令编辑 > 检查块一致性。"检查块一致性"功能在单个块中进行必要的改动。
新的符号、变量、参数或组件
实例:
正在为程序中使用的地址创建新符号。
正在向数据块、UDT或功能块中添加新的变量或参数。
设置地址级:
在符号表中的改动。
在程序/块编辑器中的改动。
跟踪改动:
在SIMATIC管理器中,选择块文件夹,然后选择菜单命令编辑 > 检查块一致性。"检查块一致性"功能在单个块中进行必要的改动。
选择编辑方法
根据创建程序时所使用的编程语言,在增量输入模式和/或自由编辑(文本)模式下都可输入程序。
用于梯形图(LAD)、功能块图(FBD)、语句表(STL)、或S7-GRAPH编程语言的增量编辑器
将在用于LAD、FBD、STL和S7-GRAPH的增量输入模式编辑器中,创建存储在用户程序中的块。如果希望立即检查刚才已输入的内容,应选择使用增量输入模式。该编辑模式尤其适用于初学者。在增量输入模式中,当每行或每个元素均输入完毕之后,将立即对其进行语法检查。在完成输入之前,将指出所有错误,且对其进行纠正。语法正确的输入项将自动进行编译,并存储在用户程序中。
在编辑语句之前,对所使用的符号进行定义。如果某些符号不可用,则不能编译块;但是可以保存该不一致的中间版本。
用于STL、S7 SCL、或S7 HiGraph等编程语言的源代码(文本)编辑器
在源代码编辑器中,将创建用于后续编译的源代码文件,以生成块。
建议使用源代码编辑器,因为这是一个非常有效的对程序进行编辑和监视的方法。
将在文本文件中编辑程序或块的源代码,然后进行编译。
文本文件(源文件)将存储在S7程序的源文件夹中,例如,存为STL 源文件或SCL 源文件。源文件可包含一个或多个块的代码。STL和SCL文本编辑器可以生成OB、FB、FC、DB、以及UDT(用户自定义数据类型)的源代码,这样,可使用它们来创建完整的用户程序。一个这样的文本文件可能包含完整的CPU程序(即所有的块)。
编译源文件时将生成相应的块,并写入用户程序中。在对其进行编译之前,定义所有使用的符号。且不报告数据错误,直到相应的编译器编译完源文件为止。
编译符合编程语言的规定语法。只有根据用户指令或在源文件被编译成块时,才执行语法检查。
使用SIMATIC管理器创建块
打开您希望在其中插入S7块的项目的"Blocks"文件夹。
选择菜单命令:
插入 > S7块 > 功能块(FB),如果您希望编写功能块
插入 > S7 块 > 功能(FC),如果您希望编写功能
插入 > S7 块 > 组织块(OB),如果您希望编写组织块
插入 > S7块 > 数据块(DB),如果您希望创建数据块
插入 > S7块 > 用户自定义数据类型(UDT),如果您希望创建用户自定义的数据类型
插入 > S7 块 > 变量表,如果您希望创建变量表(VAT),为了进行测试,而对用户程序中的变量进行监视和修改。
使用程序编辑器创建块
通过双击一个现有的块即可启动相应的编辑器。也可使用该编辑器创建多的块。
在编辑器窗口中,选择菜单命令文件 > 新建。
在接下来出现的对话框中,选择块将要链接的S7用户程序。
输入希望创建的逻辑块的名称。
单击"确定",进行确认。
于是创建了块,并打开一个窗口用于编辑。窗口上半部分用于对变量声明表进行编辑,下半部分则包含您在其中编写新块的代码段。
注意
在创建功能块(FB)时,将对是否可以声明功能块中的多重背景进行设置。可根据"用户自定义"对话框内"编辑器"选项卡页中的设置,为每个新的功能块设置该属性(使用菜单命令选项 > 用户自定义)。
通过编译STL源文件也可创建逻辑块。
还可在SIMATIC管理器中,通过将逻辑块插入到相应的S7用户程序中来创建逻辑块。
创建数据块(DB)
正如其它块一样,在SIMATIC管理器或增量编辑器中都可以创建数据块。
在增量编辑器中,选择菜单命令文件 > 新建或单击工具栏上的相应按钮。#p#分页标题#e#
在对话框中,选择您希望将正在创建的块链接到其上的S7用户程序。
在对话框中您希望创建的数据块。由于DB0已为系统保留,所以您不能使用该编号。
在"新建数据块"对话框中,选择您希望创建哪一种类型的数据块:
- 数据块(共享数据块)
- 引用了用户自定义数据类型的数据块(共享数据块)
- 指向功能块的数据块(背景数据块)
对于三个选项,您还选择背景数据块所属于的功能块。
当您在SIMATIC管理器中打开现有的块时,还将显示"新建数据块"对话框。
注意
STEP 7将使您能够随时都可以把用于各种不同功能块的数据存储在一个单的数据块中(多重背景数据块,参见在变量声明表中输入多重背景。)
块文件夹
可按下面的形式创建S7 CPU的程序:
块
源文件
可使用S7程序下的文件夹"Blocks"来存储块。
该块文件夹包含有完成自动化任务而需要下载给S7 CPU的块。这些可装载的块包括逻辑块(OB、FB、FC)和数据块(DB)。在块文件夹中将自动创建一个空的组织块OB1,因为在执行S7 CPU中的程序时将始终需要这个块。
块文件夹还包含有下列对象:
创建的用户自定义数据类型(UDT)。这些类型将使编程,且不需要将其下载给CPU。
为在调试程序时对变量进行监视和修改而创建的变量表(VAT)。不需要将变量表下载给CPU。
包含有系统信息(系统组态、系统参数等)的对象"系统数据"(系统数据块)。在组态硬件时将创建并提供这些系统数据块。
在用户程序中需要调用的系统功能(SFC)与系统功能块(SFB)。您自己不能编辑SFC与SFB。
除了系统数据块(只能通过可编程控制器的组态对其进行创建和编辑),用户程序中的块都要使用各自的编辑器进行编辑。通过双击相应块即可启动对应的编辑器。
块属性
如果使用块属性,可以地识别您创建的块,还可以保护这些块免受未授权的改。
当块打开时,可以编辑块属性。除可以编辑的属性外,属性对话框还显示仅供察看的数据:不能编辑该信息。
块属性和系统属性也将显示在SIMATIC管理器中块的对象属性中。此处,只能编辑属性NAME、FAMILY、AUTHOR和VERSION。
当通过SIMATIC管理器插入块之后,可以编辑对象属性。如果使用某一不在SIMATIC管理器中的编辑器来创建块,则这些条目(程序语言)均将自动保存在对象属性中。
注意
在SIMATIC管理器中使用菜单命令选项 > 用户自定义和"语言"选项卡来设置用于S7块编程的那些助记符。
块属性表
在输入块属性时,应遵循下表中说明的输入顺序:
关键字/属性 含义 实例
[KNOW_HOW_PROTECT] 块保护;使用此选项编译的块将不能视图其代码段。可以视图块的接口,但不能改。 KNOW_HOW_PROTECT
[AUTHOR:] 作者名:公司名、部门名或其它名称
(多8个不含空格的字符) AUTHOR:Siemens,但无关键字
[FAMILY:] 块系列的名称:例如,控制器
(多8个不含空格的字符) FAMILY:控制器,但无关键字
[NAME:] 块名称(多8个字符) NAME:PID,但无关键字
[VERSION:int1 . int2] 块的版本号
(两个数都介于0和15之间,即0.0至15.15) VERSION :3.10
[CODE_VERSION1] 指示功能块是否可以声明多重背景的ID。如果想声明多重背景,则功能块不应该具有此属性 CODE_VERSION1
[UNbbbbED],仅适用于DB! 具有UNbbbbED属性的数据块只存储在装载存储器中。它们不占用任何工作存储器空间,并且不与程序链接。不能使用MC7命令访问它们。对于一些特定的CPU,此类DB的内容可以使用SFC 20B LKMOV或SFC 83 READ_DBL传送给工作存储器。
[Non-Retain] 具有该属性的数据块在每次掉电和上电之后以及CPU的每次STOP-RUN转换之后均将复位成装载值。
[READ_ONLY],仅适用于DB 数据块的写保护;其数据只能读取,不能修改 READ_ONLY
Read-only block 存储为只读状态,供引用的块副本。此属性只能在程序编辑器中通过选择文件 > 存储只读菜单命令设置。
块保护KNOW_HOW_PROTECT具有下列作用:
如果想在稍后阶段在STL、FBD或梯形图增量编辑器中视图已编译的块,将无法显示块的代码段。
块的变量声明表将只显示声明类型为var_in、var_out和var_in_out的变量。声明类型为var_stat和var_temp的变量保持隐藏。
分配:块属性给块类型
下表说明了哪种块类型可以声明哪种块属性:
属性 OB FB FC DB UDT
KNOW_HOW_PROTECT ● ● ● ● -
AUTHOR ● ● ● ● -
FAMILY ● ● ● ● -
NAME ● ● ● ● -
VERSION ● ● ● ● -
UNbbbbED - - - ● -
READ_ONLY - - - ● -
Non-Retain - - - ● -
Read-only block ● ● ● ● ●
KNOW_HOW_PROTECT属性可以在对块进行编程时,在源文件中进行设置。它将显示在"块属性"对话框中,但不能进行修改。
用户自定义数据类型(UDT)
用户自定义数据类型是您自己创建的特定数据结构,一旦对其进行了定义,即可在整个S7程序中使用。
用户自定义数据类型既可像基本数据类型或复杂数据类型一样用于逻辑块(FC、FB、OB)的变量声明中,也可以用作数据块(DB)中的变量数据类型。其优点就是,您只需对特定数据结构定义一次,就能可以按照您的希望任意多次使用,并给它分配任意数目的变量。
用户自定义数据类型可当作一个模板,用于创建具有同一数据结构的数据块,这意味着您创建结构一次,以后就只需通过分配用户自定义数据类型来创建所需要的数据块(实例:配方:数据块的结构始终是相同的,仅使用的数量不同。)
正如其它块一样,在SIMATIC管理器或增量编辑器中都可以创建用户自定义数据类型。
注意
如果在程序编辑器中调用以S7-SCL编程语言创建的、包含UDT参数的块,会导致类型冲突。因此,如果使用UDT,应避免使用以SCL创建的块。
用户自定义数据类型的结构
在打开一个用户自定义数据类型时,将显示一个新的工作窗口,该窗口将以表格的形式显示该用户自定义数据类型的声明视图。
行和后一行已经包含有用于用户自定义数据类型起始和结束的声明STRUCT和END_STRUCT。您不能编辑这两行。
从声明表的二行开始,您即可通过在各列中输入您的条目来编辑用户自定义数据类型。
对用户自定义数据类型进行结构化,可根据:
基本数据类型
复杂数据类型
已存在的用户自定义数据类型
S7用户程序中的用户自定义数据类型将不下载给S7 CPU。即可直接使用增量输入编辑器先创建它们,然后进行编辑,也可在编译源文件时创建它们。
产品推荐