详细介绍: 西门子0.75KW变频器6SL3211-0AB17-5UA1,西门子0.75KW变频器6SL3211-0AB17-5UA1 {心中有空间,梦想就有可能} 德国制造: 现货 联 系 人: 黄勇《黄工》 24小时联系手机: 13701633515 全新原装: 参数 质量保证: 保修 价格优势: 特价 我公司大量现货供应,价格优势,品质保证,德国原装进口  西门子0.75KW变频器6SL3211-0AB17-5UA1 PLC程序家族的故事 1.程序家族有哪些成员? PLC的控制程序一般由主程序、子程序和中断程序组成。西门子的S7-300/400将子程序分为功能(Function,或称为函数)和功能块(Function Block)。 在每一个扫描循环周期,CPU都要调用一次主程序,用户程序必须有一个并且只能有一个主程序。小型控制系统可以只有主程序。 中断程序用于快速响应中断事件。在中断事件发生时,CPU将停止执行当时正在处理的程序或任务,去执行用户编写的中断程序。执行完中断程序后,继续执行被暂停执行的程序或任务。 2.哪些情况需要使用子程序? 当系统规模很大、控制要求复杂时,如果将全部控制任务放在主程序中,主程序将会非常复杂,既难以调试,也难以阅读。使用子程序可以将程序分成容易管理的小块,使程序结构简单清晰,易于调试、查错和维护。 子程序也可以用于需要多次反复执行相同任务的地方,只需要编写一次子程序,别的程序在需要的时候多次调用它,而无需重写该程序。 3.怎样调用子程序? 主程序可以调用子程序,子程序也可以嵌套调用别的子程序。嵌套调用的层数是有限制的,例如S7-200的最大嵌套深度为8级。 执行完子程序后,返回调用它的程序中的调用指令的下一条指令。 4.每个扫描周期都会执行子程序吗? 子程序的调用可以是有条件的,在被调用期间,每个扫描周期都要执行一次被调用的子程序。调用条件不满足时不会执行子程序中的指令,因此使用子程序可以减少扫描循环时间。 5.停止调用子程序后,子程序中的线圈处于什么状态? 停止调用子程序后,不再执行子程序中的指令。子程序中线圈对应的编程元件如果没有受到别的程序的控制,将保持子程序最后一次执行后的状态不变。即使控制这些线圈的触点的状态变化,该线圈对应的元件的状态也不会变化,因为这时根本就没有执行子程序中的指令。 6.怎样实现子程序的无条件调用? 有的PLC的子程序调用指令不能直接接到左侧的垂直“电源”线上,需要通过触点电路来控制是否调用子程序,即子程序的调用是有条件的。可以用一直为ON的特殊位元件(例如S7-200的SM0.0或FX系列的M8000)的常开触点来实现子程序的无条件调用。 不同品牌的PLC的子程序大致可以分为两种,一种子程序没有输入、输出参数和局部变量,另一种则有。 1.什么是全局变量和局部变量? 以西门子的S7-200为例,输入I、输出Q、变量存储器V、内部存储器位M、定时器T、计数器C等属于全局变量,可以在符号表中为全局变量定义符号名。 程序组织单元(Program Organizational Unit)简称为POU,包括主程序、子程序和中断程序。每个POU均有自己的64字节局部变量,局部变量用L(Local)来表示,局部变量只能在它所在的POU中使用。与此相反,全局变量可以在各POU中使用。 2.局部变量有哪些类型? 子程序可以使用下列局部变量: 1) TEMP (临时变量)是暂时保存在局部数据区中的变量。只有在执行该POU时,定义的临时变量才被使用,POU执行完后,不再保存临时变量的数值。主程序和中断程序的局部变量表中只有TEMP变量。 2) IN(输入参数)由调用它的POU提供的传入子程序的输入参数。 3) OUT(输出参数)是子程序的执行结果,它被返回给调用它的POU。 4) IN_OUT(输入_输出参数)的初始值由调用它的POU传送给子程序,并用同一变量将子程序的执行结果返回给调用它的POU。 主程序和中断程序的局部变量表中只有临时变量TEMP。 3.子程序的输入、输出参数有什么作用? 具有输入、输出参数和局部变量的子程序易于实现结构化编程,对于长期生产同类设备或生产线的厂家尤为有用。编程人员为设备的各部件或工艺功能编写了大量的通用的子程序。即使不知道子程序的内部代码,只要知道子程序的功能和输入、输出参数的意义,就可以用它们快速“组装”出满足不同的用户要求的控制程序。就好像可以用数字集成电路芯片组成复杂的数字电路一样。 如果子程序没有输入、输出参数,这种子程序没有明确的软件接口,使用起来很不方便。 4.局部变量有什么优点? 1) 子程序如果没有局部变量,它和调用它的程序之间只能通过全局变量来交换数据,子程序内部也只能使用全局变量。将它移植到别的项目时,需要对各POU使用的全局变量作统一安排,以保证不会出现地址冲突。当程序很复杂,子程序很多时,这种地址分配是很花时间的。 如果子程序有局部变量,并且在子程序中只使用局部变量,不使用全局变量,因为与其他POU没有地址冲突,不作任何改动,就可以将子程序移植到别的项目中去。 为了减少移植子程序的工作量,在子程序中应尽量避免使用全局变量和全局符号。 2) 如果使用局部变量表中的临时变量(TEMP),同一片物理存储器可以在不同的程序中重复使用。 下面以S7-200为例,介绍子程序的编程和调用的过程。 1.创建子程序 生成项目时,自动生成一个子程序。打开程序编辑器,执行“编辑”菜单中的命令“插入”→“子程序”,将自动生成和打开新的子程序。 2.生成局部变量 名为“模拟量计算”的子程序如下图所示,在该子程序的局部变量表中,定义了3个输入(IN)参数,一个输出(OUT)参数,和名为“暂存1”的临时(TEMP)变量。局部变量表最左边的一列是自动分配的每个变量在局部存储器(L)中的地址。 3.编写子程序的梯形图 局部变量表的下面是程序区(见上图),输入参数“转换值”是来自模拟量输入模块的与模拟量成正比的转换值,输出参数“模拟值”是计算出的对应的模拟量(例如压力、温度等)的工程值。子程序中变量名称前的“#”表示该变量是局部变量,它是编程软件自动添加的,输入局部变量时不用输入“#”号。特殊存储器位SM0.0的常开触点总是闭合。 4.子程序的调用 可以在主程序、其他子程序或中断程序中调用子程序,调用子程序时将执行子程序中的指令,直至子程序结束,然后返回调用它的程序中该子程序调用指令的下一条指令之处。 创建子程序后,在上图左边指令树最下面的“调用子程序”文件夹中自动生成刚创建的子程序“模拟量计算”对应的图标。 在梯形图程序中插入子程序调用指令时,首先打开主程序,显示出需要调用子程序的网络。打开指令树最下面的“调用子程序”文件夹,用鼠标左键按住需要调用的子程序图标,将它“拖”到程序编辑器中需要的位置。放开左键,子程序块便被放置在该位置。 子程序方框中左边的“转换值”等是在子程序“模拟量计算”的变量声明表中定义的输入参数,右边的“模拟值”是输出参数。它们被称为子程序的形式参数,简称为形参,形参在子程序内部的程序中使用。调用子程序时,需要为每个形参指定实际的参数(简称为实参),例如为形参“转换值”指定的实参为模拟量输入字AIW2(见上图)。 子程序调用指令中的实参的有效操作数为存储器地址、常量、全局符号和调用指令所在的POU中的局部变量,不能指定被调用子程序中的局部变量。 CPU调用子程序时,输入参数被复制到子程序的局部存储器,子程序执行完后,从局部存储器复制输出参数到指定的输出参数地址。 WinCC中定时器使用方法介绍 1、定时器功能介绍 2、脚本中定时器介绍 3、使用脚本实现更多定时器功能 3.1 整点归档 3.2 WinCC 项目激活时避免脚本初次执行及延迟执行脚本1 定时器功能介绍 WinCC 中定时器的使用可以使 WinCC按照指定的周期或者时间点去执行任务,比如周期执行变量归档、在指定的时间点执行全局脚本或条件满足时打印报表。WinCC 已经提供了一些简单的定时器,可以满足大部分定时功能。但是在有些情况下,WinCC 提供的定时器不能满足我们需求,这时我们就可以通过 WinCC 提供的脚本接口通过编程的方式实现定时的功能,因为脚本本身既可以直接 调用 WinCC其他功能,比如报表打印,也可以通过中间变量来控制其他功能的执行,比如通过置位/复位归档控制变量来触发变量记录的执行。WinCC 提供了 C 脚本和 VBS 脚 本,本文主要以全局 C 脚本编程为例介绍定时功能的实现。 2 脚本中定时器介绍 既然在全局脚本中可以编程控制其他功能的执行,那么首先看看全局脚本的触发:
图1 脚本触发器分类 如图1所示: 脚本触发器分为使用定时器和使用变量, 定时器又分为周期执行和非周期执行一次,比如每分钟执行一次脚本属于周期执行,指定2012年10月1日执行一次属于非周期执行。 使用变量触发脚本,即在变量发生变化时,脚本就执行一次, 而变量的采集可以根据指定周期循环采集,或者根据变化采集,根据变化实际是1秒 钟采集变量一次。 3使用脚本实现更多定时器功能 利用脚本自身的定时器, 可以通过在脚本中编程的方式实现更多其它定时功能。 3.1整 点归档 WinCC提供了变量归档,变量归档分为周期归档和非周期归档,不管是周期归档或非周期的归档,都又可以通过一些 变量或脚本返回值来控制归档, 比如:整点归档。下面的设置结合WinCC脚本,实现了在 整点开始归档,归档五分种后停止归档,即每个小时仅归档前五分钟的数据。 软件环境:Windows 7 Professional Service Pack1 , WinCC V7.0 SP3 归档名称:ProcessvalueArchive 归档变量:NewTag 归档周期:1 分钟 归档控制变量 startarchive C脚本触发周期:10秒 脚本代码: #include "apdefap.h" intgscAction( void ) { #pragma option(mbcs) #pragma code ("kernel32.dll"); void GetLocalTime (SYSTEMTIME* lpst); #pragma code(); SYSTEMTIME time; int t1; GetLocalTime(&time); t1=time.wMinute; if(t1==00) { SetTagBit("startarchive",1); } if(t1==05) { SetTagBit("startarchive",0); } return0; } 归档设置如图2:
 图2 归档设置 同理,在以上脚本的基础上做修改,可以实现在某个指定的时间点打印报表,只要在满足触发条件时调用下列函数: RPTJobPrint(" Myprintjob"); Myprintjob为 事先创建好的打印作业。 脚 本主要部分在于获取系统当前时间,下 面的脚本实现了获取当前时间并分别获取年、月、日、时、分、秒、毫秒,星期几的功能。 Varname1 到 Varname8 为 WinCC 内部变量。若在 WinCC画面上显示时,由于默认 I/O 域的 格式为999.99, 要把 Varname1 的显示格式改为9999。 #include "apdefap.h" intgscAction( void ) { #pragma option(mbcs) #pragma code ("kernel32.dll"); void GetLocalTime (SYSTEMTIME* lpst); #pragma code(); SYSTEMTIME time; GetLocalTime(&time); SetTagWord("Varname1",time.wYear); SetTagWord("Varname2",time.wMonth); SetTagWord("Varname3",time.wDayOfWeek); SetTagWord("Varname4",time.wDay); SetTagWord("Varname5",time.wHour); SetTagWord("Varname6",time.wMinute); SetTagWord("Varname7",time.wSecond); SetTagWord("Varname8",time.wMilliseconds); return 0; } 设置或读取系统时间的函数如下: SetSystemTime SetLocalTime GetSystemTime GetLocalTime 系统中本地计算机时间和格林威治时间是有区别的。函数“SetSystemTime / GetSystemTime”用于设置或读取格林威治时间。 函数“SetLocalTime / GetLocalTime”用于设置或读取本地计算机时间。 两种时间会因地理的时区不同而改变。两个函数使用方法相 同。 3.2 WinCC 项目激活时避免脚本初次执行及延迟执行脚本 全局脚本在项目激活时,是要执行一次的,在有些情况下,需要避免脚本执行,就采用在脚本中去判断。比如 可以创建 WinCC 内部布尔型变量 flag,脚本如下: #include "apdefap.h" intgscAction( void ) { #pragma option(mbcs) if ( GetTagBit("flag")==1) SetTagWord("NewTag",1);//根据自己的需求编写对应代码. else SetTagBit("flag",1); //Return-Type: BOOL return0; } 除了避免项目运行激活时触发脚本执行,我们 还可以通过 Sleep() 延迟脚步功能执行,比如开机后五分钟开始执行脚本具体功能,代码如下: #include "apdefap.h" intgscAction( void ) { #pragma option(mbcs) 比较简单的实现PID闭环控制的方法 PID控制的难点在于整定控制器的参数。为了学习整定PID控制器参数的方法,必须做闭环实验,开环运行PID程序没有任何意义。用硬件组成一个闭环需要PLC的CPU模块、模拟量输入模块和模拟量输出模块,此外还需要被控对象、检测元件、变送器和执行机构。例如可以用电热水壶作为被控对象,用热电阻检测温度,用温度变送器将温度转换为标准电压,用移相控制的交流固态调压器作执行机构。 有没有比较简单的实现PID闭环控制的方法呢? 在控制理论中,用传递函数来描述被控对象、检测元件、执行机构和PID控制器。 被控对象一般是串联的惯性环节和积分环节的组合。在实验室可以用以运算放大器为核心的模拟电路来模拟广义的被控对象(包括检测元件和执行机构)的传递函数。我曾将这种运放电路用于S7-200和S7-1200的PID参数自动调节实验。 用运算放大器模拟被控对象一般需要做印刷电路板,还是比较麻烦。有没有更简单的方法呢? 除了用运算放大器来模拟被控对象的传递函数,也可以用PLC的程序来模拟。为此我编写了用来模拟被控对象的S7-200的子程序,它也可以用于S7-200 SMART。使用模拟的被控对象的PID闭环示意图如下图所示,虚线右边是被控对象,DISV是系统的扰动输入值。虚线左边是PLC的PID控制程序。

被控对象的数学模型为3个串联的惯性环节,其增益为GAIN,3个惯性环节的时间常数分别为TIM1~TIM3。其传递函数为

分母中的“s”为自动控制理论中拉普拉斯变换的拉普拉斯算子。将某一时间常数设为0,可以减少惯性环节的个数。图中被控对象的输入值INV是PID控制器的输出值。被控对象的输出值OUTV作为PID控制器的过程变量(反馈值)PV。 下图是模拟被控对象的子程序,实际上只用了两个惯性环节,其时间常数分别为5000ms和2000ms。用与PID的采样周期相同的定时中断时间间隔来调用这个子程序。

下图是用来监视PID回路运行情况的STEP 7-Micro/WIN的PID调节控制面板,可以用它进行PID参数自整定或手动调节PID参数的实验。标有PV(即被控量)的是过程变量的阶跃响应曲线。

将上图中的积分时间由0.03min(分钟)增大到0.12min,下图的超调量有明显的减小。通过修改PID的参数,观察被控量阶跃响应曲线给出的超调量和调节时间等特征量的变化情况,可以形象直观、快速地学习和掌握PID参数的整定方法。 
HMI | | 6AV6 640-0BA11-0AX0 | OP 73 micro s7-200系列用 | 6AV6 640-0CA11-0AX0 | TP177 micro 触摸式 s7-200系列用 | 6AV6 640-0DA11-0AX0 | K-TP 178 micro s7-200系列用 | 6AV6 641-0AA11-0AX0 | OP 73 单色 3英寸 | 6AV6 641-0BA11-0AX0 | OP 77A 单色 4.5英寸 | 6AV6 641-0CA01-0AX0 | OP 77B 单色 4.5英寸 | 6AV6 642-0AA11-0AX0 | TP 177A 单色 5.7英寸 | 6AV6 642-0BC01-1AX1 | TP 177B DP 单色 5.7英寸 | 6AV6 642-0BA01-1AX0 | TP 177B PN/DP 彩色 5.7英寸 | 6AV6 642-0DC01-1AX0 | OP 177B DP 单色 5.7英寸 | 6AV6 642-0DA01-1AX0 | OP 177B PN/DP 彩色 5.7英寸 | 6AV6 643-0BA01-1AX0 | OP 277-6操作员面板,5.7寸彩色中文显示 | 6AV6 643-0AA01-1AX0 | TP277-6 触摸式面板,5.7寸彩色中文显示 | 6AV6 643-0CB01-1AX1 | MP277-8 触摸式面板,8寸64K色中文 | 6AV6 643-0DB01-1AX1 | MP277-8 按键式面板,8寸64K色中文显示 | 6AV6 643-0CD01-1AX1 | MP277-10 触摸式面板,10寸64K色中文 | 6AV6 643-0DD01-1AX1 | MP277-10 按键式面板,10寸64K色中文显示 | 6AV6671-1CB00-0AX0 | MMC 存储卡 128 MB 用于 OP77B, OP/TP 177B, MOBILE PANEL 177 | 6AV6671-1CB00-0AX1 | MMC 存储卡 64 MB 用于 OP77B, OP/TP 177B, MOBILE PANEL 177 | 6AV6644-0AA01-2AX0 | SIMATIC MP 377 12" TOUCH | 6AV6644-0AB01-2AX0 | SIMATIC MP 377 15" TOUCH | 6AV6644-0AC01-2AX0 | SIMATIC MP 377 19" TOUCH | 6AV6644-0BA01-2AX0 | SIMATIC MP 377 12" KEY | 6AV6647-0AA11-3AX0 | SIMATIC KTP400 Basic mono PN 3.8" mono STN 显示屏,以太网接口 | 6AV6647-0AB11-3AX0 | SIMATIC KTP600 Basic mono PN 5.7" mono STN 显示屏,以太网接口, | 6AV6647-0AC11-3AX0 | SIMATIC KTP600 Basic color DP 5,7" TFT 显示屏,256 色 MPI/PROFIBUS DP 接口 | 6AV6647-0AD11-3AX0 | SIMATIC KTP600 Basic color PN 5,7" TFT 显示屏,256 色以太网接口 | 6AV6647-0AE11-3AX0 | SIMATIC KTP1000 基本色 DP 10.4" TFT 显示器,256 色 MPI/PROFIBUS DP 接口 | 6AV6647-0AF11-3AX0 | SIMATIC KTP1000 基本色 PN 10,4" TFT 显示器,256 色,以太网接口, | 6AV6647-0AG11-3AX0 | SIMATIC TP1500 基本色 PN 15.0" TFT 显示器,256 色,以太网接口, | 6AV6647-0AH11-3AX0 | SIMATIC HMI kp300基本单PN,基本面板,按键操作,3寸” | 6AV2124-0GC01-0AX0 | SIMATIC HMI TP700 7.0 英寸宽屏 TFT 显示屏,分辨率 800 x 480,1600 万色 | 6AV2124-0JC01-0AX0 | SIMATIC HMI TP900,?9.0 英寸宽屏 TFT 显示屏,分辨率 800 x 480,1599 万色 | 6AV2124-0MC01-0AX0 | SIMATIC HMI TP1200 ?12.1 英寸宽屏 TFT 显示屏,分辨率 1280 x 800,1600 万色 | 6AV2124-0QC02-0AX0 | SIMATIC HMI TP1500 ?15.4 英寸宽屏 TFT 显示屏,分辨率 1280 x 800,1600 万色 ?2 个PROFINET 接口(2 个端口带有集成开关 + 支持千兆位的附加接口)和 1 个 PROFIBUS 接口 | 6AV2124-0UC02-0AX0 | SIMATIC HMI TP1900 ?18.5 英寸宽屏 TFT 显示屏,分辨率 1366 x 768,1600 万色 | 6AV2124-0XC02-0AX0 | SIMATIC HMI TP2200,?21.5 英寸宽屏 TFT 显示屏,分辨率 1920 x 1080,1600 万色 | 6AV2124-1DC01-0AX0 | SIMATIC HMI KP400 ?4.3 英寸宽屏 TFT 显示屏,分辨率 480 x 272,1600 万色 | 6AV2124-1GC01-0AX0 | SIMATIC HMI KP700 ?7.0 英寸宽屏 TFT 显示屏,分辨率 800 x 480,1600 万色 | 6AV2124-1JC01-0AX0 | SIMATIC HMI KP900 ?9.0 英寸宽屏 TFT 显示屏,分辨率 800 x 480,1600 万色 | 6AV2124-1MC01-0AX0 | SIMATIC HMI KP1200 ,?12.1 英寸宽屏 TFT 显示屏,分辨率 1280 x 800,1600 万色 | 6AV2124-1QC02-0AX0 | SIMATIC HMI KP1500 ?15.4 英寸宽屏 TFT 显示屏,分辨率 1280 x 800,1600 万色 | 6AV2124-2DC01-0AX0 | SIMATIC HMI KTP400 ?4.3 英寸宽屏 TFT 显示屏,分辨率 480 x 272,1600 万色 | 6AV6645-0AA01-0AX0 | SIMATIC 移动式面板177 DP,带集成启动按钮,使用WINCC FLEXIBLE紧凑型2005或以上进行组态 | 6AV6645-0AB01-0AX0 | SIMATIC 移动式面板177 DP,带集成启动按钮和急停按钮,使用WINCC FLEXIBLE紧凑型2005或以上进行组态 | 6AV6645-0AC01-0AX0 | SIMATIC 移动式面板177 DP,带集成启动按钮和急停按钮、手轮、钥匙开关和亮光按钮, | 6AV6645-0BA01-0AX0 | SIMATIC 移动式面板177 PN,带集成启动按钮,使用WINCC FLEXIBLE紧凑型2005或以上进行组态 | 6AV6645-0BB01-0AX0 | SIMATIC 移动式面板177 PN,带集成启动按钮和急停按钮,使用WINCC FLEXIBLE紧凑型2005或以上进行组态 | 6AV6645-0BC01-0AX0 | SIMATIC 移动式面板177 PN,带集成启动按钮和急停按钮、手轮、钥匙开关和亮光按钮, | 6AV6645-0BE02-0AX0 | SIMATIC 移动式面板 277 10" W,集成使能按钮、停止按钮和触控按钮, | 6AV6645-0CA01-0AX0 | SIMATIC 移动式面板277,带集成启动按钮, | 6AV6645-0CB01-0AX0 | SIMATIC 移动式面板277,带集成启动按钮和急停按钮, | 6AV6645-0CC01-0AX0 | SIMATIC 移动式面板277,带集成启动按钮和急停按钮、手轮、钥匙开关和两个亮光按钮 | 内存卡 | | 6ES7 955-2AL00-0AA0 | 2 X 2M字节 RAM | 6ES7 955-2AM00-0AA0 | 2 X 4M字节 RAM | 6ES7 952-0AF00-0AA0 | 64K字节 RAM | 6ES7 952-1AH00-0AA0 | 256K字节 RAM | 6ES7 952-1AK00-0AA0 | 1M字节 RAM | 6ES7 952-1AL00-0AA0 | 2M字节 RAM | 6ES7 952-1AM00-0AA0 | 4M字节 RAM | 6ES7 952-1AP00-0AA0 | 8M字节 RAM | 6ES7 952-1AS00-0AA0 | 16M字节 RAM | 6ES7 952-1AY00-0AA0 | 64M字节 RAM | 6ES7 952-0KF00-0AA0 | 64K字节 FLASH EPROM | 6ES7 952-0KH00-0AA0 | 256K字节 FLASH EPROM | 6ES7 952-1KK00-0AA0 | 1M字节 FLASH EPROM | 6ES7 952-1KL00-0AA0 | 2M字节 FLASH EPROM | 6ES7 952-1KM00-0AA0 | 4M字节 FLASH EPROM | 6ES7 952-1KP00-0AA0 | 8M字节 FLASH EPROM | 6ES7 952-1KS00-0AA0 | 16M字节 FLASH EPROM | 6ES7 952-1KT00-0AA0 | 32M字节 FLASH EPROM | 6ES7 952-1KY00-0AA0 | 64M字节 FLASH EPROM | 开关量输入模板 | | 6ES7 421-7BH01-0AB0 | 开关量输入模块(16点,24VDC)中断 | 6ES7 421-1BL01-0AA0 | 开关量输入模块(32点,24VDC) | 6ES7 421-1EL00-0AA0 | 开关量输入模块(32点,120VUC) | 6ES7 421-1FH20-0AA0 | 开关量输入模块(16点,120/230VUC) | 6ES7 421-7DH00-0AB0 | 开关量输入模块(16点,24V到60VUC) | 开关量输出模板 | | 6ES7 422-1BH11-0AA0 | 开关量输出模块(16点,24VDC,2A) | 6ES7 422-1BL00-0AA0 | 32点输出,24VDC,0.5A | 6ES7 422-7BL00-0AB0 | 32点输出,24VDC,0.5A,中断 | 6ES7 422-1FH00-0AA0 | 16点输出,120/230VAC,2A | 6ES7 422-1HH00-0AA0 | 16点输出,继电器,5A | 模拟量模块 | | 6ES7 431-0HH00-0AB0 | 16路模拟输入,13位 | 6ES7 431-1KF00-0AB0 | 8路模拟输入,13位,隔离 | 6ES7 431-1KF10-0AB0 | 8路模拟输入,14位,隔离,线性化 | 6ES7 431-1KF20-0AB0 | 8路模拟输入,14位,隔离 | 6ES7 431-7QH00-0AB0 | 16路模拟输入,16位,隔离 | 6ES7 431-7KF00-0AB0 | 8路模拟输入,16位,隔离,热电偶 | 6ES7 431-7KF10-0AB0 | 8路模拟输入,16位,隔离,热电阻 | 6ES7 432-1HF00-0AB0 | 8路模拟输出,13位,隔离 | 功能模板 | | 6ES7 450-1AP00-0AE0 | FM450-1计数器模板 | 6ES7 451-3AL00-0AE0 | FM451定位模板 | 6ES7 452-1AH00-0AE0 | FM452电子凸轮控制器 | 6ES7 453-3AH00-0AE0 | FM453定位模板 | 6ES7 455-0VS00-0AE0 | FM455C闭环控制模块 | 6ES7 455-1VS00-0AE0 | FM455S闭环控制模块 | 6DD1 607-0AA2 | FM 458-1DP快速处理系统 | 6ES7 953-8LJ20-0AA0 | 用于FM458-1DP 基本模板 512KByte(MMC) | 6ES7 953-8LL20-0AA0 | 用于FM458-1DP 基本模板 2MByte(MMC) | 6ES7 953-8LM20-0AA0 | 用于FM458-1DP 基本模板 4MByte(MMC) | 6DD1 607-0CA1 | EXM 438-1 I/O扩展模板 | 6DD1 607-0EA0 | EXM 448 通讯扩展模板 | 6DD1 607-0EA2 | EXM 448-2 通讯扩展模板 | 6DD1 684-0GE0 | SC64连接电缆 | 6DD1 684-0GD0 | SC63连接电缆 | 6DD1 684-0GC0 | SC62连接电缆 | 6DD1 681-0AE2 | SB10端子模块 | 6DD1 681-0AF4 | SB60端子模块 | 6DD1 681-0EB3 | SB61端子模块 | 6DD1 681-0AG2 | SB70端子模块 | 6DD1 681-0DH1 | SB71端子模块 | 6DD1 681-0AJ1 | SU12端子模块 | 6DD1 681-0GK0 | SU13端子模块 | 通讯模板 | | 6ES7 440-1CS00-0YE0 | CP440通讯处理器 | 6ES7 441-1AA04-0AE0 | CP441-1通讯处理器 | 6ES7 441-2AA04-0AE0 | CP441-2通讯处理器 | 6ES7 963-1AA00-0AA0 | RS232C接口模板 | 6ES7 963-2AA00-0AA0 | 20mA接口模板 | 6ES7 963-3AA00-0AA0 | RS422/485接口模板 | 6ES7 870-1AA01-0YA0 | 可装载驱动 MODBUS RTU 主站 | 6ES7 870-1AB01-0YA0 | 可装载驱动 MODBUS RTU 从站 | 6GK7 443-5FX02-0XE0 | CP443-5基本型通讯处理器,支持Profibus-Fms协议 | 6GK7 443-5DX04-0XE0 | CP443-5扩展型通讯处理器,支持Profibus-DP协议 | 6GK7 443-1EX11-0XE0 | CP443-1 以太网通讯处理器 | 6GK7 443-1EX41-0XE0 | CP443-1 高级以太网通讯处理器 | 附件 | | 6ES7 960-1AA04-0XA0 | 冗余系统同步模板(新)近距离同步(10米以内) | 6ES7 960-1AB04-0XA0 | 冗余系统同步模板(新)远程同步模板(10米到10公里,用同长度的光缆) | 6ES7 960-1AA04-5AA0 | 冗余系统光纤连接电缆(1米)(新) | 6ES7 960-1AA04-5BA0 | 冗余系统光纤连接电缆(2米)(新) | 6ES7 960-1AA04-5KA0 | 冗余系统光纤连接电缆(10米)(新) | 6ES7 833-1CC01-0YA5 | S7F系统可选软件包 | 6ES7 833-1CC00-6YX0 | F运行授权 | 6ES7 197-1LA03-0XA0 | Y-LINK | 6ES7 492-1AL00-0AA0 | 前连接器 | 6ES7 400-1TA01-0AA0 | 主板(18槽) | 6ES7 400-1JA01-0AA0 | 主板(9槽) | 6ES7 400-1TA11-0AA0 | 主板(18槽)铝板 | 6ES7 400-1JA11-0AA0 | 主板(9槽)铝板 | 6ES7 401-2TA01-0AA0 | CR2主板(18槽) | 6ES7 400-2JA00-0AA0 | UR2-H主板(18槽) | 6ES7 400-2JA10-0AA0 | UR2-H主板(18槽)铝板 | 6ES7 403-1TA01-0AA0 | ER1机架(18槽) | 6ES7 403-1JA01-0AA0 | ER2机架(9槽) | 6ES7 403-1TA11-0AA0 | ER1机架(18槽)铝板 | 6ES7 403-1JA11-0AA0 | ER2机架(9槽)铝板 | 6ES7 460-0AA01-0AB0 | IM460-0 | 6ES7 461-0AA01-0AA0 | IM461-0 | 6ES7 468-1AH50-0AA0 | 连接电缆 (0.75米) | 6ES7 468-1BB50-0AA0 | 连接电缆 (1.5米) | 6ES7 461-0AA00-7AA0 | 终端器 | 6ES7 460-1BA01-0AB0 | IM460-1 | 6ES7 461-1BA01-0AA0 | IM461-1 | 6ES7 468-3AH50-0AA0 | 468-3连接电缆 (0.75米) | 6ES7 468-3BB50-0AA0 | 468-3连接电缆 (1.5米) | 6ES7 460-3AA01-0AB0 | IM460-3 | 6ES7 461-3AA01-0AA0 | IM461-3 | 6ES7 468-1BF00-0AA0 | 468-1连接电缆(5米) | 6ES7 468-1CB00-0AA0 | 468-1连接电缆(10米) | 6ES7 468-1CC50-0AA0 | 468-1连接电缆(25米) | 6ES7 468-1CF00-0AA0 | 468-1连接电缆(50米) | 6ES7 468-1DB00-0AA0 | 468-1连接电缆(100米) | 6ES7 461-3AA00-7AA0 | 终端器 | 6ES7 463-2AA00-0AA0 | IM463-2接口模块 | 6ES7 964-2AA04-0AB0 | IF-964 DP接口模块 |  西门子STL间接寻址常问问题集 1.1如何获得指针或者间接寻址有关的信息? 指针的类型包括16位指针、32位指针、Pointer(6Byte)和Any(10Byte)。16位指针用于定时器、计数器、程序块的寻址;32位指针用于I/Q/M/L/数据块等存储器中位、字节、字以及双字的寻址,其中第0~2位表示位地址(0~7)、第3~18位为字节地址,其余位未定义;Pointer和Any一般应用在复杂数据类型(比如Date_and_Time /Array/String等)在FB、FC之间的传递。而Any可以看做是对Pointer的延伸,因为由10Byte组成的Any中Byte4~Byte9就是一个Pointer。 了解指针的格式十分重要,为正确使用指针,应阅读如下内容: 1、 "SIMATIC Programming with STEP 7 V5.5" 05/2010 第27.3.4章 参数类型 2、文档:1008用于S7-300 和S7-400 的语句表(STL)编程 3、文档:F0215,S7-300和S7-400寻址 1.2为什么语句 LAR1 P##PointerInput 在一个函数(FC)中是无效的,然而,同样的语句在一个功能块(FB)中是有效的? 在FC被调用时,复杂数据类型例如指针是被复制到调用者的临时变量区中,在FC内部对此V区地址直接取址放入到地址寄存器AR1或AR2是不被编译器规则接受的(导致MC7寄存器信息过长),也就是说在FC内部通过P#进行地址寄存器取址仅能支持Temp临时变量。因此如果需要在FC中操作指针等复杂输入输出变量地址需要使用累加器进行中转。 考虑到程序的一致性、遵守编译器规则和STL手册中LAR1指令说明,建议用户使用如下指令操作: L P##PointerInput LAR1 1.3 STEP 7 中哪些操作会覆盖DB/DI寄存器或者地址寄存器AR1/AR2的内容? 下面说明了可能引起DB/DI寄存器或者地址寄存器AR1/AR2内容改变的一些操作: - DB寄存器和AR1受到影响的操作
1. 使用完整的DB路径(如L DB20.Val)或者调用FC/FB时使用DB块完整地址作为其参数,则DB寄存器内容被覆盖。 例如在OB1中调用FC1后,DB寄存器变成20。 OPN DB1 Call FC1 Input(bit):DB20.DBX0.2 因此在编程的时候,OPN 指令打开数据块,通过DBX x.y的方式访问其中内容, 但是如果在打开数据块后DB寄存器的内容被修改了,则DBX x.y的方式访问变量则 会访问到错误的地址。可以通过使用符号寻址的方式或者使用完整路径编程避免,当 然重新使用 OPN指令也是可以的。 2. 调用FC时使用string, array, structure ,UDT作为其形参或者调用FB时使用string, array, structure 或者UDT作为其in out形参,在FC/FB程序中访问这些地址则AR1寄存器内容被覆盖,因此当使用AR1进行间接寻址时需要注意AR1内容的正确性。 - AR2地址寄存器和DI寄存器在FB中作为参数和静态变量的基址寻址使用。AR2和DI如果被修改,会影响FB的参数访问,如果希望在FB中使用DI寄存器或者地址寄存器AR2,必须预先保存它们中的内容,并在使用后恢复它们,例如:
TAR2 #AR2_SAVE; //AR2寄存器状态保存到#AR2_SAVE L DINO; T #DB2_SAVE; //DI寄存器状态保存到#DB2_SAVE User Program LAR2 #AR2_SAVE; //AR2寄存器恢复到使用前状态 OPN DI [#DB2_SAVE]; //DI寄存器恢复到使用前状态 1.4 如何得到多重背景FB中的变量在背景DB里的绝对偏移量呢? 可以用下面的方法处理: TAR2 (得到多重背景FB在背景DB里的偏移地址) AD DW#16#00FFFFFF (屏蔽掉存储区ID,可参考32位指针格式) L P##Variable (得到变量在多重背景FB里的地址) +D (多重背景FB的偏移地址与变量在多重背景FB里地址相加,即得到实际绝对偏移量) LAR1 上述语句就是就得到了变量在背景DB中的绝对偏移量,从而供后续程序处理。 1.5如何在程序中使用ANY 型指针? 简要说明如下: L P##Input //指向存储地址指针Input首地址 //这个参数是一个Any类型,P##Input指向参数Input的值所在地址,这就是指针的指针 LAR1 //装载到地址寄存器AR1中。 L W [AR1,P#4.0] //打开DB块 // 由Any类型结构知道Any类型的Byte4、Byte5存放的数据块号 T #BLOCK_NO OPN DB [#BLOCK_NO] //如果是DB块,打开指定的DB块。 L W [AR1,P#2.0] //判断ANY指针中数据长度 // Any类型的Byte2、Byte3是重复系数,如P#DB1.DBX0.0 Byte 8后面的Byte 8 _001:T #DATA_LEN //通常此处做loop循环!! L D [AR1,P#6.0] //找出需要计算数据区的开始地址 // Any类型Byte6~Byte9是32位区域地址 理解Pointer、Any的类型的数据结构,对于正确使用指针有很大帮助。 为正确使用指针,应仔细阅读如下内容: "SIMATIC Programming with STEP 7 V5.5" 05/2010 第27.3.4章 参数类型 如下的程序实现了SFC20的部分功能,可以作为Any使用的参考。 FUNCTION FC 1 : VOID TITLE = VERSION : 0.1 VAR_INPUT SRCBLK : ANY ; END_VAR VAR_OUTPUT RETVAL : INT ; DSTBLK : ANY ; END_VAR VAR_TEMP LOOP : INT ; BLOCK_NO_DB : WORD ; BLOCK_NO_DI : WORD ; SRC_ADD : DWORD ; DST_ADD : DWORD ; END_VAR BEGIN NETWORK TITLE = L P##SRCBLK; //读取输入any的首地址 LAR1 ; //装载到ar1 L P##DSTBLK; //读取输出any的首地址 LAR2 ; //装载到ar2 L W [AR1,P#4.0]; //打开DB块 T #BLOCK_NO_DB; L W [AR2,P#4.0]; //打开DI块 T #BLOCK_NO_DI; OPN DB [#BLOCK_NO_DB]; //打开DB块 OPN DI [#BLOCK_NO_DI]; //打开DI块 L D [AR1,P#6.0]; T #SRC_ADD; //读取地址 L D [AR2,P#6.0]; T #DST_ADD; //读取地址 L W [AR1,P#2.0]; //读取循环次数 _001: T #LOOP; L DBB [#SRC_ADD]; T DIB [#DST_ADD]; //赋值 //地址偏移1个字节 L P#1.0; L #SRC_ADD; +D ; T #SRC_ADD; L P#1.0; L #DST_ADD; +D ; T #DST_ADD; L #LOOP; //循环 LOOP _001; END_FUNCTION 1.6 当FC 或FB的输入参数类型为:BLOCK_DB, TIMER或者 COUNTER,如何确定其编号? 例1 :FB 块 FB1 变量声明中定义了“ Timer” 类型的变量“ Time_1” ,在 FB2 中调用 FB1,将定时器“T5”传递给变量“ Time_1”。如图 01 所示程序代码中数值 5 表示“T5”。
图 01 FB中确定定时器编号 在使用多重实例时,需要在图 01 所示程序中增加以下代码: TAR2 //多重实例偏移地址 LAR1 P##Time_1 +AR1 //多重实例偏移地址与当前地址相加 L W[AR1,P#0.0] T MW0 例 2 FC FC1 变量声明中定义了“ Timer” 类型的变量“ Time_1” ,在 FC2 中调用 FC1,将定时器“T8”传递给变量“ Time_1”。如图 02 所示程序代码中数值 8 表示“T8”。
|