西门子S7-300编程组态

2018年8月9日22:27:28 发表评论 663 阅读

SCL简介

S7-SCL简介

相对于西门子 PLC 的其它类型编程语言,S7-SCL 与计算机高级编程语言有着非常相近的特性,只要使用者接触过 PASCAL 或者 VB 编程语言,实现 S7-SCL 的快速入门是非常容易的。

S7-SCL(Structured Control Language 结构化控制语言) 具有以下特点:

  • 是一种类似于PASCAL的高级编程语言
  • 符合国际标准IEC 61131-3
  • PLCopen基础级认证
  • 适用于 S7-300 (推荐CPU314以上), S7-400,S7-1200,S7-1500, C7 and WinAC

S7-SCL 为 PLC 做了优化处理,它不仅仅具有 PLC 典型的元素(例如 输入/输出,定时器,计数器,符号表),而且具有高级语言的特性, 例如:循环, 选择,分支,数组 ,高级函数。

S7-SCL 其非常适合于如下任务:

  • 复杂运算功能
  • 复杂数学函数
  • 数据管理
  • 过程优化

S7-SCL入门文档

S7-SCL 的安装与使用

STEP7 标准版并不包括 S7-SCL 软件包及授权,需单独购买,STEP7 Professional 版包括了S7-SCL 的软件包及授权,安装即可。在 S7 程序中,S7-SCL 块可以与其它STEP7 编程语言生成的块互相调用。S7-SCL 生成的块也可以作为库文件被其它语言引用。由于 S7-SCL 程序由 ASCII 文本构成,所以它非常容易被导入或导出。

S7-SCL 软件兼容性

X表示兼容 - 表示不兼容

SCL在博途软件中的适用性

TIA portal中不同型号PLC使用SCL的可行性:

博途软件本身已经集成SCL语言包。因为V11以上才支持S7-300/400,V12以上支持S7-1500,根据软件的产品发布通知总结如下:

  • S7-300/400从STEP 7 Professional V11开始支持使用SCL语言
  • S7-1200从STEP 7 V11 SP2开始支持使用SCL
  • S7-1500从STEP 7 Professional V12开始支持使用SCL

在STEP7 V5.5以下编程软件中,更多内容请参考S7-SCL 编程语言的详尽手册

在安装 S7-SCL 软件包后,通过点击 Windows 菜单 开始->Simatic->Documentation->English 可以阅读到名为"S7-SCL for S7-300 and S7-400 "的 PDF 手册。此手册共分为 16 个章节,其详细地讲解了 S7-SCL 编程语言。一切关于 S7-SCL 使用的问题请以此手册为准。

博途软件请参考软件的帮助信息

Graph简介

S7-GRAPH简介

相对于西门子 PLC 的其它类型编程语言,S7-GRAPH 与计算机高级编程语言有着非常相近的特性,只要使用者接触过 PASCAL 或者 VB 编

程语言,实现 S7-GRAPH 的快速入门是非常容易的。

S7-GRAPH具有以下特点:

  • 适用于顺序控制程序
  • 符合国际标准IEC 61131-3
  • PLCopen基础级认证
  • 适用于 SIMATIC S7-300 (推荐CPU314以上), S7-400, S7-1500, C7 and WinAC

S7-GRAPH针对顺序控制程序做了优化处理,它不仅仅具有 PLC 典型的元素(例如 输入/输出,定时器,计数器),而且增加了如下概念:

  • 多个顺控器(最多8个)
  • 步骤(每个顺控器最多250个)
  • 每个步骤地动作(每步最多100个)
  • 转换条件(每个顺控器最多250个)
  • 分支条件(每个顺控器最多250个)
  • 逻辑互锁(最多32个条件)
  • 监控条件(最多32个条件)
  • 事件触发功能
  • 切换运行模式:手动、自动及点动模式

S7-GRAPH入门文档

S7-GRAPH 的安装与使用

STEP7 标准版并不包括 S7-GRAPH 软件包及授权,需单独购买,STEP7 Professional 版包括了S7-GRAPH 的软件包及授权,安装即可。在 S7 程序中,S7-GRAPH 块可以与其它 STEP7 编程语言生成的块互相调用。S7-GRAPH 生成的块也可以作为库文件被其它语言引用。

S7-GRAPH 软件兼容性

X表示兼容 - 表示不兼容


图1

S7-GRAPH在博途软件中的适用性

TIA portal中不同型号PLC使用GRAPH的可行性:

博途软件本身已经集成GRAPH语言包。因为V11以上才支持S7-300/400,V12以上支持S7-1500,根据软件的产品发布通知总结如下:

  • S7-300/400从STEP 7 Professional V11开始支持使用GRAPH语言
  • S7-1200不支持使用GRAPH
  • S7-1500从STEP 7 Professional V12 SP1开始支持使用GRAPH

在STEP7 V5.5以下编程软件中,更多内容请参考S7-GRAPH 编程语言的详尽手册

在安装 S7-GRAPH 软件包后,通过点击 Windows 菜单 开始->Simatic->Documentation->English 可以阅读到名为"S7-GRAPH - Programming Sequential Control Systems"的 PDF 手册。

此手册共分为 15个章节,其详细地讲解了 S7-GRAPH 编程语言。一切关于 S7-GRAPH 使用的问题请以此手册为准。

博途软件请参考软件的帮助信息

FB/FC

FB和FC区别

FB--功能块,带背景数据块  FC--功能,相当于函数
FB,FC块均相当于子程序,既可以调用其它FB,FC块,也可以被OB,FB,FC块调用。

他们之间的主要区别是:

1. FB使用背景数据块作为存储区,FC没有独立的存储区,使用全局DB或M区
2. FB局部变量有STAT和TEMP,FC由于没有自己的存储区因此不具有STAT,TEMP本身不能设置初始值。
本质上,FB,FC的实现目的是相同的;无论何种逻辑要求,FB,FC均可实现。只是实现方式效率不同,这也和工程师个人编程习惯有关。

FB块优点:

1. 易于移植性,对于相同控制逻辑不同参数的被控对象,只要使用不同的背景DB,同一个FB块就可以方便
2. 多重背景,减少重复工作,提高效率
3. 多次调用时,参数修改方便
4. 有独立的存储区

FC块优点:

1. 小巧灵活,对于非多次调用的程序更易理解
2. 不占用额外的存储资源

FB,FC块管脚定义

IN---------变量是外部输入的,只能被本程序块读,不能被本程序块写;

OUT-------是本程序块输出的,他可以被本程序块读写,其他程序通过引脚只能读值不能写;

IN_OUT--- 输入输出变量 本程序块和其他程序都可以读写这个引脚的值。

TEMP -----临时变量,顾名思义是暂时存储数据的变量。这些临时的数据存储在CPU工作存储区的局部数据堆栈(L堆栈)中。

STAT-------在PLC运行期间始终被存储。S7 将静态变量定义在背景数据块(仅对FB而言,FC和OB无静态变量),当被调用块运行时,能读出或修改静态变量;被调用块结束后,静态变量保留在数据块中。

为何定义的FB,FC块,多次调用后程序混乱?

对于,多次调用的程序块,FB块建议更换调用不同的背景DB;FC则需要确保使用的存储地址不重复,即每次调用,块中调用的地址不重复。

为何含有定时器或计数器的FB或FC单次调用ok,多次调用时定时器或计数器混乱?

对于多次调用的FB,FC,如为S7定时器,计数器,则需要在IN接口中定义TIMER或Counter,每调用一次FB或FC,均赋不同的定时器或计数器号。
如为IEC定时器,计数器,则需要在IN接口定义Block_DB,每调用一次FB或FC,均赋不同的DB块给其中的IEC定时器或计数器。

临时变量引起的麻烦

临时变量可以在组织快OB、功能FC和功能块FB中使用,当块执行时它们被用来临时存储数据,一旦块执行结束,堆栈的地址将被重新分配用于其它程序块使用,此地址上的数据不会被清零,直到被其他程序块赋予新值。
需要遵循“先赋值,再使用”的原则。

因此,有常见的几种情况导致程序运行不正常:

1. 某个块程序运行时好时坏,其中某个数值或多个数值偶尔不正常
此问题在于,一定遵循“先赋值,再使用”。否则,TEMP的数值在每个扫描周期开始未有明确的赋值,此地址的数值将是随机的。

2. 多个块使用TEMP,单独使用任意一个都正常,无法一起正常使用
此问题在于,TEMP未能先赋值,再使用;程序块1的TEMP中的数值并没有清零,而是CPU运行机制调用此地址使用或直接分配给程序块2使用,导致这个TEMP地址并不为0,因此程序混乱。
由于内存运行机制并不公开,因此,这一分配过程看起来是随机的。这可能导致,程序多次运行情况下正常,运行一段时间后出现问题。
只要遵循“先赋值,再使用”的原则,就可避免。

3. TEMP无法实现自锁
此问题在于,TEMP数值无法像M点或Q点一样保持上一个周期的数值;TEMP需要在每个扫描周期有一个明确的赋值,即先赋值(写),再使用(读写)
解决方式,FB可使用STAT静态变量;FC可使用M区或全局DB地址。

总结,在使用临时变量TEMP时:

1.不能先使用,再赋值

2.不适用于自锁线圈

3.不适用于上升,下降沿

遇到如上情况,FC块可采用M区或全局DB地址;FB块也可采用自身背景DB的STAT静态变量
在FB,FC中使用第一次调用的某个临时变量,必须先对其赋值即写指令,而不能是读指令。

间接寻址

间接寻址与直接寻址

直接寻址---直接的指出指令的确切操作地址。例如A Q10.0,对于指令A来说,Q10.0就是其直接操作的地址。
因此,相对的,间接寻址即间接的指出指令的确切操作地址。例如A Q[MD10],这里的地址不是直接给出的,而是通过MD10这个存储地址间接给出的。

间接寻址的类型

间接寻址可分为两大类型:存储器间接寻址和寄存器间接寻址。如图1所示。

图1 寻址方式

存储器间接寻址
存储器间接寻址的地址给定格式是:地址标识符+指针。指针所指示存储单元中所包含的数值,就是地址的确切数值单元。

存储器间接寻址分为两种指针格式:

16 位指针:
16 位地址指针用于定时器、计数器、程序块(DB、FC、FB)的寻址,16 位指针被看作 一个无符号整数(0-65535),它表示定时器(T)、计数器(C)、数据块(DB、DI)或程序块 (FB、FC)的号,16 位指针的格式如下:

图2 16位指针格式
32 位指针:
32 位地址指针用于 I、Q、M、L、数据块等存储器中位、字节、字及双字的寻址,32 位 的地址指针可以使用一个双字表示,第 0 位~ 第 2 位作为寻址操作的位地址,第 3 位~第18 位作为 寻址操作的字节地址,第 19 位~第 31 位没有定义,32 位指针的格式如下:

图3 32位指针格式

寄存器间接寻址
寄存器间接寻址为通过 CPU的地址寄存器AR1,AR2进行寻址。AR1,AR2 均为 32 位寄存器,寄存器间接寻址只使用 32 位指针。
分为内部区域间接寻址和交叉区域寻址。

内部区域寄存器间接寻址
指针格式与存储器间接寻址的 32 位指针相同,第 0 位~ 第 2 位作为寻址操作的位地址,第 3 位~第 18 位作为寻址操作的字节地址,第 19 位 ~第 31 位没有定义,32 位指针的格式如下:

  • 图4 内部区域32位指针
    交叉区域寄存器间接寻址
    包含有存储器区域信息的指针,称为交叉区域指针。
    同样,交叉区域指针为 32 位,寄存器间接寻址要使用地址寄存器 AR1 或 AR2。
    32 位交叉区域指针,左起 0~18 位格式与 32 位内部区域指针相同,19~23 位,27~20 位未定义,
    31 位为交叉区域指针标识位。
    24~26 位是存储区域地址标识,8 中组合表示 8 种存储器区域:
    000 表示没有地址区,例如 P#12.0;
    001 表示输入地址区 I,例如 P#I12.0;
    010 表示输出地址区 Q,例如 P#Q12.0;
    011 表示标志位地址区 M,例如 P#M12.0;
    100 表示数据块(DB)中的数据,例如 P#DB1.DBX12.0
    101 表示数据块(DI)中的数据,例如 P#DI1.DIX12.0
    110 表示区域地址区 L,例如 P#L12.0;
    111 表示调用程序块的区域地址区 V,例如 P#V12.0;
    交叉区域指针格式如下:

图5 交叉区域32位指针

具体信息请参看文档:
S7-300和S7-400寻址
西门子STL间接寻址常问问题集

P#指针与ANY指针
P#指针
POINTER 是一种用于传递指针的形参数据类型,长度为 6 个字节。用于向被调用的函数 FC 及函数块 FB 传递复合数据类型(如 ARRAY、STRUCT 及 DT 等)的实参。在被调用的函数 FC 及函数块 FB 内部可以间接访问实参的存储器。

图6 P#指针
ANY指针
POINTER 是一种用于传递指针的形参数据类型,可视为 POINTER 类型的扩展,较 POINTER 类型为 复杂,长度为 10 个字节,增加的 2 字节,最高字节 (Byte 0) 固定为 B#16#10,第二字节 (Byte 1) 为 ANY 指针所指向区域的数据类型,而接下来的 2 字节 (BYTE 3, 4) 组合为一个 INT,为 ANY 指针所指 定区域的长度,称为重复系数 Repetition factor) 。其余 6 字节作用与 POINTER 类型相同。 格式如下:

图7 ANY指针

符号/符号表使用

符号/符号表使用

在STEP7程序中,使用地址如 I/O 信号、位内存、计数器、定时器、数据块和功能块。完全可以在程序中访问这些地址,但是如果使用地址符号,程序将更容易阅读(例如,Motor_A_On 或其它符合公司或行业内代码系统的符号)。然后,可以通过此符号访问用户程序中的地址。

享符号与本地符

符号可以分为共享符号与本地符号。
程序代码段中的共享符号与局部符号之间的差别可区分如下:

  • 来自符号表中的符号(共享符号)将显示在引号".."内。
  • 来自块的变量声明表中的符号(局部符号)将在前面冠以字符"#"。

下表详细描述共享符号与本地符号的区别:

注意:符号名(变量 ID)中不允许出现两个连续的下划线字符(例如,MOTOR__ON)。

在程序段中视图菜单命令的操作

  1. 使用菜单命令视图  >  显示  >  符号表示法,可以在地址的绝对表示法和符号表示法之间切换。
  2. 使用菜单命令视图  >  显示  >  符号信息,显示绝对地址和属于符号的符号注释。

设置地址优先权(符号地址/绝对地址)

转到 SIMATIC 管理器,并选择块文件夹,然后选择菜单命令编辑  >  对象 属性。在"地址优先级"标签中,可以进行与自己要求相适合的设置。

输入共享符号

在编程过程中,有以下三种方式可以输入符号:

   1.通过对话框
      使用菜单命令视图  >  显示  >  符号表达式在打开块的块窗口中激活符号显示。菜单命令前将出现一个复选标记,表示符号表达式已激活。

  • 确保块窗口中的符号表达式已打开(菜单命令视图  >  显示  >  符号表达式。)
  • 在想要为其分配符号的程序代码段中,选择绝对地址。
  • 选择菜单命令编辑  >  符号。
  • 填写对开框然后将其关闭,单过"确定"确认您的输入并确保输入了一个符号。

     所定义的符号将输入到符号表中。如果所作的输入会导致出现非唯一性符号,则会出现出错消息并将其拒绝。

   2.通过符号表
     1) 可使用多种方法打开符号表:

  • 双击项目窗口中的符号表
  • 选择项目窗口中的符号表,并选择菜单命令编辑  >  打开对象。

     2) 要为符号表输入新的符号,可将光标放置在表中的第一个空白行,并对单元进行填充。可使用菜单命令插入  >  符号,将新的空白行插入到符号表当前行的前面。使用编辑菜单中的命令可复制和修改现有的条目。进行保存,然后关闭符号表。也可保存尚未完全定义的符号。

 状态列含义如下:

3) 从其它表格编辑器中导入。例如从Microsoft Excel中导入,参考下面的小节。 在输入符号时,应注意以下几点:

符号表的导入导出

下列文件格式均可导入到符号表或从符号表中导出:

  • ASCII 文件格式(ASC)
  • 数据交换格式(DIF)
    可在Microsoft Excel 中打开、编辑和保存 DIF 文件。
  • 系统数据格式(SDF)
    可在Microsoft Access 中打开、编辑和保存 SDF 文件。
  • 设置列表(SEQ)
    以DIF格式导出,使用Excel编辑较为常见。

PID

  1. FB41基本使用
  2. FB41高级功能
  3. FB43基本使用
  4. FB43高级功能
  5. FB58基本使用
  6. FB58脉冲功能
  7. FB58高级功能
  8. TIA V13 SP1与 STEP 7 V5.5控制面板对比
  9. FB42与FB59基本功能

编程指令

  1. PID
  • FB41基本使用
  • FB41高级功能
  • FB43基本使用
  • FB43高级功能
  • FB58基本使用
  • FB58脉冲功能
  • FB58高级功能
  • TIA V13 SP1与 STEP 7 V5.5控制面板对比
  • FB42与FB59基本功能
  1. 定时器
  2. 计数器
  3. 字符串
  4. 读写时钟和时钟同步
  5. 流量累计
  6. PCS7 时钟同步

冗余系统

  1. 软冗余
  2. 400H冗余系统
  3. 400H组态

S7-400H可以在经典STEP7或者PCS7中组态, 不支持在博途TIA中组态。

详细步骤见:

如何在Step 7中组态S7-400H站

如果用户使用PCS 7软件,除了按照以上文档手册插入S7-400H站外,还可以使用PCS 7向导自动创建AS站。

在PCS 7向导中,可以选择实际订购的AS套件订货号完成组态。由向导生成站点后,可以手动调整组态信息,增添模块。

weinxin
plc入门知识问答
所有PLC工程师都会关注的微信公众账号,只需输入您的问题,就会有答案

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: