在S7300400型PLC中使用高级语言编程
在S7300400型PLC中使用高级语言编程
在S7300/400型PLC中使用高级语言编程S7-SCL是一种类似于Pasical、Deliphi的高级编程语言,其符合国际标准IEC 61131-3,也就是说支持该标准的任意厂家的PLC均可以使用与之相似的语言编程。
这种语言适合于处理复杂的逻辑和大量的数学运算,由于其具有高级语言的编程结构,因此和S7的STL语句表编程方式比较起来有着更加方便的控制方式,可以这样说,只要是必须使用语句表的地方,我们均可以考虑使用SCL,也许STL 在执行时比SCL更加高效,但事实上也不一定,首先SCL可以编译成STL,同时SCL设计时可以优化编程,而STL若运用不当,可能还会将低效率。
当然在目前的这种系列的PLC上,效率对于我们来说已是次要的,我们更关心的是编程结构。
就像在PC机上,舍弃了汇编语言,而主要采用C/C++等高级语言。
总体来说,SCL适合于编写标准功能块,由于在维护中,它和STL一样,不象Lad一样利于维护,因此这些标准功能块都应该有文档说明,以便用户了解其功能。
下面的内容主要是参考西门子的S7-SCL文档,对SCL进行了系统的介绍,最后给出了示例。
这里假设读者是学过S7-300/400编程,并曾经学过至少一种计算机高级编程语言。
一、软件的使用1、创建一个新的S7-SCL Source 文件打开工程项目à选择CPU站à选择S7 Programà选择Sources在右边窗口的空白处点右键选Insert New Objectà点击SCL Source双击创建的SCL Source文件,进入SCL编辑界面。
2、块保护在SCL Source文件的开头添加关键字:KNOW_HOW_PROTECT,当打开由其创建的块时,只能显示参数,而看不到内容。
3、主菜单”Insert”下的”Block Template”可用于插入如OB,FB等各种块的结构。
”Control Structure”菜单可插入各种流程控制结构,这些都可以简化编程。
西门子S7-300400系列PLC的编程方法
数据块拷贝FUNCTION FC 100 :VOIDTITLE =//DB BLOCK COPYAUTHOR :AXGNAME :DBBTODBBVERSION :0.1VAR_INPUTSOU_DB :INT ; //SOURCE DB NUMBERLENG :INT ; //HOW MANY TO COPYDES_DB :INT ; //DESTINATION DB NUMBEREND_VARVAR_TEMPSOURCE :ANY ;DEST :ANY ;END_VARBEGINNETWORKTITLE =LAR1 P##SOURCE; // Load the start address of the ANY pointers in AR1. L B#16#10; // Load the syntax ID andT LB [AR1,P#0.0]; // transfer it to the ANY pointer.L B#16#4; // Load data type WORD andT LB [AR1,P#1.0]; // transfer it to the ANY pointer.L #LENG; // Load HOW MANY WORDS andT LW [AR1,P#2.0]; // transfer them to the ANY pointerL #SOU_DB; // Source is DB[?],DBB0.0T LW [AR1,P#4.0]; //L P#DBX 0.0; //T LD [AR1,P#6.0]; //LAR1 P##DEST; //Load the DESTINATION address of the ANY pointer in AR1.L B#16#10; //Load the syntax ID andT LB [AR1,P#0.0]; //transfer it to the ANY pointer.L B#16#4; //Load data type WORD andT LB [AR1,P#1.0]; //transfer it to the ANY pointer.L #LENG; //Load HOW MANY WORDS andT LW [AR1,P#2.0]; //transfer them to the ANY pointer.L #DES_DB; //Destination is DB{?},DBB0.0T LW [AR1,P#4.0];L P#DBX 0.0; //T LD [AR1,P#6.0]; //CALL “BLKMOV” (//Call the block move system functionSRCBLK := #SOURCE,//RET_VAL := MW 210,//Evaluate the BR bit and MW 210DSTBLK := #DEST);//END_FUNCTION使用说明:可直接调用,#SOURCE---源数据块号#DEST------目标数据块号#LENG----要拷贝数据的长度S7 300/400 的一些功能和技巧2单键翻转FUNCTION FC 11 :VOIDTITLE =//AUTHOR :AXGFAMILY :ESUNAME :SDZFVERSION :0.0BEGINNETWORKTITLE =A M 0.0; PLCA M 0.1;= M 58.0;NETWORKTITLE =A M 58.0;AN M 58.1;= M 58.2; NETWORK TITLE =A M 58.2;S M 58.1;ON M 58.0; ON M 0.0;R M 58.1; PLC NOP 0; NETWORK TITLE =A M 58.2;A M 58.4;= M 58.3; NETWORK TITLE =A M 58.2;AN M 58.3; AN M 58.4;S M 58.4;O M 58.3;ON M 0.0;R M 58.4; PLCNOP 0;END_FUNCTION使用说明:M0.0----使能M0.1----单键使M58.4翻转S7 300/400 的一些功能和技巧3 循环读模拟量入DB块L #DB_NOT LW 0OPN DB [LW 0]L #PIW_ADDRSLD 3T LD 4L #DBD_ADDRSLD 3T LD 8L #CH_LEN PLC资料网NEXT:T LW 0L LD 4LAR1L PIW [AR1,P#0.0]T LW 2{ CALL “Read Analog Value 464-2”IN :=LW2HI_LIM :=5.000000e+002LO_LIM :=-1.000000e+001 将模拟量转换成工程量BIPOLAR:=TRUERET_VAL:=LW10OUT :=LD12 }L LD 8PLCLAR1L LD 2T DBD [AR1,P#0.0]L LD 4+ L#16T LD 4L LD 8+ L#32T LD 8L LW 0LOOP NEXTPIW_Addr :模拟块通道起始地址CHI_LEN :要读入的通道数DB_NO :存储数据块DBW_Addr :存储在数据块中的字地址艾驰商城是国内最专业的MRO工业品网购平台,正品现货、优势价格、迅捷配送,是一站式采购的工业品商城!具有10年工业用品电子商务领域研究,以强大的信息通道建设的优势,以及依托线下贸易交易市场在工业用品行业上游供应链的整合能力,为广大的用户提供了传感器、图尔克传感器、变频器、断路器、继电器、PLC、工控机、仪器仪表、气缸、五金工具、伺服电机、劳保用品等一系列自动化的工控产品。
工业以太网S7300400CPs通信组态和编程(学习资料)
自动化技术 > 工业通信 > 工业以太网 > 系统接口 > SIMATIC S7工业以太网S7-300/400 CPs -- 通信组态和编程 -- 调用通信块调用 TRCV 指令的时候如何使能 ad-hoc 模式?在 STEP 7 Professional (TIA Portal) 中,如何基于S7-300/S7-400 的工业以太网 CP 卡使用MODBUS/TCP 通信块?如何从样例项目中将用于开放的 MODBUS / TCP的"Modbus"的 CFC 程序块拷贝到用户项目中?Modbus TCP 块的初始化和运行参数之间的差异是什么?为什么尽管输入了正确的 Modbus TCP 授权,仍然输出 A090(HEX) 状态值?对于 Modbus TCP 块,授权版本和下载的演示版本之间有什么差异?使用 Modbus TCP 通讯块,为何输入管脚 ENQ_ENR 设置为 true 时输出管脚 STATUS 的值一直保持 A083 (十六进制) ?可变消息长度的数据是如何通过TCP协议传送并被S7-300 站的工业以太网CP接收的?怎样在 S7-300 的 S7 程序中用功能块 FB14 "GET" 和 FB15 "PUT" 来编程实现超过 160 个字节的数据传送?哪里可以找到工业以太网上 SIMATIC S5 模块到 SIMATIC S7 模块通过 UDP 传输协议通信的例子和文档?哪里可以找到工业以太网上 SIMATIC S5 模块到 SIMATIC S7 模块通过 TCP 传输协议通信的例子和文档?哪里可以找到工业以太网上 SIMATIC S5 模块到 SIMATIC S7 模块通过 ISO 传输协议通信的例子和文档?如何对FC10 “AG_CNTRL”进行编程?IE CP 支持FC10 "AG_CNTRL" 功能的哪些命令(CMD)?通过CP343-1进行S7 通讯时,在S7-300 CPU中可以同时进行多少通讯任务?哪些通信口可以进行 Modbus/TCP 通讯,作为 Modbus 服务器的 SIMATIC S7 CPU 可以与多少个 Modbus 客户端通信?如何通过 CPU集成的PROFINET 接口或是通过CP443-1 Advanced 使用 FB63 "TSEND", FB64 "TRCV", FB65 "TCON" 和 FB66 "TDISCON" 通讯块实现 ISO-on-TCP 协议的数据交换?如何编写 PROFINET IO 设备通讯块 FC11 和 FC12在多个运行程序中执行通讯处理器块调用在作业运行期间改变用户块"AG_SEND"和"AG_RECV"的输入参数当调用通信功能块 FC5/50 "AG_SEND/AG_LSEND" 和 FC6/60 "AG_RCV/AG_LRCV" 传送 "REAL" 类型的变量时应该注意些什么?当使用通信函数FC53"AG_SSEND" 和FC63 "AG_SRECV"应注意什么?当在 STEP 7的 CPU 中用户程序里调用 FC5/50 和 FC6/60 通讯块时需要记住的要点有哪些?如何使用通讯功能块FC11和FC12用于PROFINET IO 控制器编程?如何在 SIMATIC S7 上建立OPEN MODBUS/TCP 通讯,如何查找相关信息?怎样使用通讯功能块 FC50 和 FC60 编程?在S7-400控制器上利用Send/Receive通信时,功能块FC6 / FC60 (AG_SEND)上出现错误状态“0x7000”如何使用通信功能块FC5和FC6编程?样例程序:在S7-400中使用SFB14 ("GET") 和SFB15 ("PUT")模块进行S7通信示例程序:通过CPU 317-2PN/DP的功能块FB14("GET")和FB15 ("PUT")实现S7通讯S7-300 中如何编程通信块 FB8 "USEND" 和 FB9 "URCV" 进行数据交换?“STATUS = 27”(0x001B) 和在 S7-300 上可加载的 S7 通讯在 S7-300 的数据通信中如何编程使用通信功能块 FB14 “GET”和 FB15 “PUT”?S7-300中如何使用通信功能块FB12 "BSEND" 和 FB13 "BRCV"进行数据交换?当“BRCV”t 块(SFB13)处于“ disabled”状态(“EN_R = 0”) 时,重复“BSEND”作业(SFB12)描述可以通过在 S7-300,S7-400,S7-1200 或者 S7-1500 的用户程序中调用 TRCV 指令,经由工业以太网通过开放式用户通信的方式接收数据。
西门子S7-300 400高级应用编程技术课程
西门子S7-300/400高级应用编程技术课程一、培训时间:5天、老师边讲、学员边练习,每个学员自带电脑二、课程大纲第一天: S7-300/400的编程语言、编程元件及指令系统讲解;STEP7软件的使用方法,S7-PLCSIM仿真软件在程序调试中的应用等;顺序控制梯形图的设计方法与技巧,顺序控制功能图语言S7 Graph的应用;【主办单位】中国电子标准协会【咨询热线】0 7 5 5 – 2 6 5 0 6 7 5 7 1 3 7 9 8 4 7 2 9 3 6 李生【报名邮箱】martin# (请将#换成@)第二天:讲解西门子S7-300/400 PLC各种特殊功能模块的应用,常用的模拟量处理,比如温度,压力,流量,A/D,D/A转换,PID调节等功能。
工程案例分析。
第三天:讲解西门子PLC包含S7-200/300/400的定位控制功能,PLC和伺服,步进等设备的连接,编码器的原理,伺服电机单轴、多轴的控制案例分析。
第四天:讲解西门子PLC包含S7-200/300/400的通信控制功能,S7-300/400与ET200分布式I/O 通信,西门子PLC和各种品牌变频器、智能仪表的通信,Profibus通信,以及常用的Modbus ASCII通信协议,Modbus RTU的通信协议。
第五天;讲解PLC,变频器,伺服,触摸屏在实际工程中综合应用的案例分析,电路设计等。
三、老师介绍程老师男,高级技师。
有着多年的职业教育经验,主要研究是自动控制技术,擅长三菱、西门子系列PLC、变频器、伺服等应用。
2009年广州市人社局授予“广州市技术能手”称号。
2011年公派德国学习交流,学习德国先进职教理念。
2013年广州市人设局授予“广州市机电一体化专业带头人”。
2014年7月,被广州市人设局派往清华大学进修学习。
本人在工控应用领域,教学成果显著,从2008年开始开发系列的视频教程,这些教程由浅到深,通俗易懂,因此在现在工控应用领域有一定的影响力,讲解的视频教程有三菱FX系列,三菱Q系列,西门子200系列,西门子300/400系列共20多个教程。
s7300,400系列以太网配置文档
组态王和西门子S7300/400系列PLC通过以太网协议通讯的配置方案组态王和西门子PLC实现以太网协议方式通讯时,需要通过OPC方式来实现:其中西门子提供OPCServer,组态王作为OPCClient进行数据通讯。
下面具体演示实现以太网通讯时所需要的软硬件及配置步骤。
一、所需硬件:1.配置具有DP接口的S7300、S7400等PLC。
2.CP1613以太网卡,或者普通计算机网卡。
二、所需软件:1.用于软件编程的STEP 7V5.1或以上版本的编程软件。
2.用于实现以太网网络配置的SIMA TIC NET6.0及以上版本的软件。
以上两种软件是西门子公司提供相应授权软件,需要从西门子公司购买。
三、适合的操作系统:WIN2000、WINNT、WINXP(simatci 6.01以上版本支持XP系统)四、实现OPC通讯的配置步骤(以计算机插入一块普通网卡,PLC为CPU313C-2DP为例子第一步:安装STEP 7V5.1(或以上版本)的编程软件,第二步:安装普通网卡一块,并根据硬件安装向导安装卡的驱动程序。
第三步:首先通过STEP 7编程软件配置PLC,具体操作如下:(1)新建一个STEP 7项目,如下图所示:然后点击Hardware 进行硬件组态,如下图所示:双击4号槽的CP343-1模块,弹出对话框如下:―点击General标签页中的Properties按钮,如下:具体IP地址的设置如上图所示。
注意,以太网的IP地址和PC机的IP地址必须在一个网络段内。
并注意设置Use router 的地址为网络内的网关地址或者本PC机的IP地址。
(2)通讯接口参数的配置:进入计算机控制面板,选择SET PG/PC INTERFACE并打开,如下图所示:(3)所有PLC的硬件组态及协议配置完成后,编译当前画面后回到主项目中并下传程序,如下图所示:第四步:使用STEP 7编程软件对硬件配置完成后,再使用Simatic net 6.0(或以上版本)软件组态整个PROFIBUS 网络结构,具体操作如下:(1)首先点击开始-》SIMATIC-》SIMATIC NET-》Settings-》Configuration Console ,用于在PC Station中,添加OPC Server程序及CP5611通讯卡,具体操作如下:打开后找到如下画面:然后作如下配置:说明:上图中,Type of module 应选择为:EthenertMode of the module: Configured modeIndex:3(或其他值)(2)用鼠标双击显示器屏幕右下方任务栏中的PC机样式的小图标,如下图所示:在打开的对话框中,选中1号槽,点击鼠标右键添加一个OPC Server程序,如下图所示:至此一个OPC SERVER 和 CP5611卡已经添加完成。
S7-300400PLC的编程技术
位数据的表示
2)字节(Byte) 8位二进制数组成1个字节(Byte,如下图,其中的第0位为最低位
(LSB),第7位为最高位(MSB)。
• 3)字(Word)
• 相邻两个字节组成一个字,字用来表示无符号数。MWl00是 由MB1OO和MB1O1组成的1个字,如图5.4.3,MB00为高位字 节。MW100中的M为区域标示符,W表示字,100为字的起始
字节MB1O0的地址。字的取值范围为 W#16#0000~W#16#FFFF。
• 4) 双字(Double Word)
• 两个字组成1个双字,双字用来表示无符号数。MD100是由 MB100~MB103组成的1个双字,(见上图),MB100为高位宇节, D表示双字,100为双字的起始字节MB100的地址。双字的取
地址I0.0,这样使程序易于阅读和理解。
用户可以在网络号右边加上网络的标题,在网络号的下面 为网络加上注释。还可以选择在梯形图下面自动加上该网络中
使用的符号的信息。
在分析梯形图中的逻辑关系时,为了借用继电器电路图的 分析方法,可以想象在梯形图的左有两侧垂直“电源”之间有
一个左正右负的直流电源电压,有一个假想的“能 流”(PowerFlow)流过线圈。利用能流这一概念,可以很好地理
值范围为DW#16#0000_0000~DW#16#FFFF_FFFF。
•常数的表示方法 • 常数值可以是字节、字或双字,CPU以二进制方式存储常数,常
数也可以用十进制、十六进制、ASCII码或浮点数形式来表示。
• B#16#,W#16#,DW#16#分别用来表示十六进制 字节、字和双字常数。2#用来表示二进制常数,例如 2#1101_1010。 L#为32位双整数常数,例如L# +5。 P#为地址指针常数,例如P#M2.O是M2.0的地址。
S7-300400的编程语言与指令系统
S7-300/400 的编程语言与指令系统1. S7-300/400 的编程语言1.1 PLC 编程语言的国际标准IEC 61131 是 PLC 的国际标准,1992~1995 年发布了 IEC 61131标 准 中 的 1 ~ 4 部 分 , 我 国 在 1995 年 11 月 发 布 了 GB/T15969-1/2/3/4(等同于 IEC 61131-1/2/3/4)。
IEC 61131-3 广泛地应用 PLC、DCS 和工控机、 “软件 PLC”、数控系统、RTU 等产品。
定义了 5 种编程语言:西门子称为语句表 STL。
1) 指令表 IL(Instruction list):西门子称为结构化控制语言(SCL)。
2) 结构文本 ST(Structured text)3) 梯形图 LD(Ladder diagram):西门子简称为 LAD。
:标准中称为功能方框图语言。
4) 功能块图 FBD (Function block diagram):对应于西门子的 S7Graph。
5) 顺序功能图 SFC(Sequential function chart)1.2 STEP 7 中的编程语言梯形图、语句表和功能块图是3 种基本编程语言,可以相互转换。
1.顺序功能图(SFC) :STEP 7 中的 S7 Graph2.梯形图(LAD)直观易懂,适合于数字量逻辑控制。
“能流”(Power flow)与程序执行的方向。
3. 语句表(STL):功能比梯形图或功能块图强。
4.功能块图(FBD) “LOGO!”系列微型 PLC 使用功能块图编程。
5.结构文本(ST):STEP 7 的 S7 SCL(结构化控制语言)符合 EN61131-3 标准。
SCL 适合于复杂的公式计算、复杂的计算任务和最优化算法,或管理大量的数据等。
6.S7 HiGraph 编程语言)来描述异步、非顺图形编程语言 S7 HiGraph 属于可选软件包,它用状态图(state graphs序过程的编程语言。
S7300-400PLC编程之设置PG-PC接口
S7300-400PLC编程之设置PG-PC 接口
S7300/400PLC编程之设置PG PC接口
IMATIC管理器的基本操作方法:
1、设置PC,PG接口这对新手来说很重要,当用软件仿真时,选择“PLCSIM(MPI)”接口;做工程时用的是PC的话那就要选择“set PG/PC interface”。
如果选择错误的话将会出现通讯故障了。
2、接下来我们建立一个项目演示一下SMATIC管理器的归档和上传功能,这样可以方便我们有序地管理曾经做过项目。
我们在新建好的项目工程菜单栏里依次点击“ZHENG/SIMATIC/CPU 315-2 DP/BLOCK/OB1”。
如下图所示
在归档之前,一定先把程序保存好之后,再把写程序的窗口关闭,在“SIMATIC”界面工具栏里打开“FILE/Archive"
现在我们已经将文件名为“zheng”的文件压缩储存在了桌面上如下图所示:
我们想打开已经归档好的文件时,就要在“SIMATIC主界面”打开“File/Retrieve”如下图所示:
单击OK之后就可以看到我们和原来一样的程序文件了,以上就是我们归档文件和打开归档文件的操作步骤。
3、对编写程序的仿真器操作:
A、首先我们先编写一个主程序,例如:
B、写好程序之后记得要先保存一下,养成一个好的习惯,防止我们写程序时如果遇到计算机掉电的意外情况时的程序丢失。
然后在“SIMATIC”界面打开仿真图标,如下图所示
在上图I0.0通电时我们可以看到梯型图中Q0.0正常运行,如图
通过仿真,可以监控到PLC程序的运行状态正常。
4、对占用的地址进行交叉索引,监控所有地址是否重复。
在西门子PLC中使用SCL语言编程的技巧
在西门子PLC中使用SCL语言编程的技巧前言:两年半前我就在工控网上发表了有关SCL编程的知识<<在S7300400型PLC中使用高级语言编程>>,但发表完后,即使我自己都从没有把任何使用SCL编写的程序用到实际控制中,当时的感觉是使用SCL编程到处受限,没有STL语言灵活和强大。
直到最近使用施耐德的Unity软件编程,并使用这种已经国际标准化的文本语言(等同于西门子的SCL 语言),才体会到它的优点:<1>、程序容易阅读,便于诊断和维护;<2>、程序容易在不同厂家之间的PLC之间转换。
西门子的STL语言是强大,但难于阅读,编写程序也需要异常小心,其最强大的可能是它的寄存器寻址(类似于一些计算机高级语言中的地址指针),SCL没有这个功能,那就多费一些程序代码来实现同样的功能,程序是否优秀更应该看重程序的架构和提高程序生产效率的标准化,好的PLC程序不应该只有自己明白,而是让更多的人明白。
在西门子PLC中使用SCL语言的场合一般是编写标准功能块FB,其编程方式和西门子的其他编程语言,如梯形图Lad、语句表STL是完全不同的,同时为了实现程序的国际标准化,即为了方便的将程序代码移植到不同厂家的PLC系统上,尽量不要在SCL 中使用西门子独有的功能块。
1、在FB块中使用结构编写FB块的准则,就是其使用的内部变量尽量与外部隔离,除了像PLC的新启动/重启动标志,以及一些方波/脉冲波等全局变量可以在FB块中使用外,其他的任何全局变量都不应该在FB内部使用,即使是自定义结构也应该在FB中单独定义,在FB块中使用结构应该在静态类型变量中定义,如下:VAR // Static Variables IM:STRUCT //Data structure of Internal FlagsH1_AFCountImp:BOOL:=False; // Aux Flag Counter Impulse H1_CountImp:BOOL:=False; // Counter Impulse H1_ELCountMV:BOOL:=False; // Endless Counter Maximum Value END_STRUCT; //other data structure … END_VAR 在使用这些结构时,可以按照如下方式:IM. H1_CountImp:=Imp;2、在SCL中替代Set/Reset指令的方法SCL中不存在Set/Reset指令,或者说也没有必要使用。
第七章 S7-300和S7-400PLC系统配置与编程
第7章S7-300和S7-400 PLC系统配置与编程本章的内容是向大家介绍西门子公司的SIMATIC S7-300和S7-400两个系列的PLC。
S7-300/400 PLC在结构上属于模块式结构,简单的说,一台完整的S7-300或者S7-400 PLC,是由基板(RACK)+ 各种模块组成的。
各种模块的选择,基于控制系统功能的需要,所有的模块安装在基板上,最终构成一台完整的PLC。
S7-300与S7-400的设计与编程通过STEP 7软件包来完成。
本章的主要内容:●S7-300与S7-400的系统配置●S7-300与S7-400的指令系统●S7-300与S7-400应用系统的编程本章重点是熟悉S7-300/400 系统的结构,了解S7-300与S7-400 PLC的各种模块的功能和特点;掌握STEP 7编程软件的基本知识和使用方法,从而具备设计开发S7-300或S7-400 PLC系统的能力。
7.1 S7-300 PLC和S7-400 PLC的系统配置7.1.1 S7-300 PLC的基本组成S7-300是模块式的PLC,它的组成部件主要有以下几个部分:1. 中央处理单元(CPU)各种CPU单元有不同的性能,有的集成有数字量和模拟量输入/输出点,而有的集成有PROFIBUS-DP等通信接口。
CPU面板上有状态故障显示灯、模式开关、24 V电源输入端子、电池盒与存储器模块盒(有的CPU没有)。
2. 负载电源模块(PS)负载电源模块用于将AC 220 V电源转换为DC 24 V电源,提供给CPU和I/O模块使用。
额定输出电流有2 A、5 A和10 A三种。
3. 信号模块(SM)数字量输入/输出模块和模拟量输入/输出模块的总称,它们使不同的过程信号电压或电流与PLC内部的信号电平匹配。
4. 功能模块(FM)用于对实时性和存储容量高的控制任务,例如高速计数器模块、快速/慢速进给驱动位置控制模块、步进电动机定位模块、伺服电动机定位模块、闭环控制模块、工业标识系统的接口模块、称重模块、位置输入模块等。
西门子PLC中使用SCL语言编程的技巧
在西门子PLC中使用SCL语言编程的技巧前言:两年半前我就在工控网上发表了有关SCL编程的知识<<在S7300400型PLC中使用高级语言编程>>,但发表完后,即使我自己都从没有把任何使用SCL编写的程序用到实际控制中,当时的感觉是使用SCL编程到处受限,没有STL语言灵活和强大。
直到最近使用施耐德的Unity软件编程,并使用这种已经国际标准化的文本语言(等同于西门子的SCL语言),才体会到它的优点:<1>、程序容易阅读,便于诊断和维护;<2>、程序容易在不同厂家之间的PLC之间转换。
西门子的STL语言是强大,但难于阅读,编写程序也需要异常小心,其最强大的可能是它的寄存器寻址(类似于一些计算机高级语言中的地址指针),SCL没有这个功能,那就多费一些程序代码来实现同样的功能,程序是否优秀更应该看重程序的架构和提高程序生产效率的标准化,好的PLC程序不应该只有自己明白,而是让更多的人明白。
在西门子PLC中使用SCL语言的场合一般是编写标准功能块FB,其编程方式和西门子的其他编程语言,如梯形图Lad、语句表STL是完全不同的,同时为了实现程序的国际标准化,即为了方便的将程序代码移植到不同厂家的PLC系统上,尽量不要在SCL中使用西门子独有的功能块。
1、在FB块中使用结构编写FB块的准则,就是其使用的内部变量尽量与外部隔离,除了像PLC的新启动/重启动标志,以及一些方波/脉冲波等全局变量可以在FB块中使用外,其他的任何全局变量都不应该在FB内部使用,即使是自定义结构也应该在FB中单独定义,在FB块中使用结构应该在静态类型变量中定义,如下: VAR // Static Variables IM:STRUCT //Data structure of Internal Flags H1_AFCountImp:BOOL:=False; // Aux Flag Counter Impulse H1_CountImp:BOOL:=False; // Counter Impulse H1_ELCountMV:BOOL:=False; // Endless Counter Maximum Value END_STRUCT; //other data structure … END_VAR 在使用这些结构时,可以按照如下方式: IM. H1_CountImp:=Imp;2、在SCL中替代Set/Reset指令的方法 SCL中不存在Set/Reset指令,或者说也没有必要使用。
在西门子PLC中使用SCL语言编程的技巧教程文件
在西门子P L C中使用S C L语言编程的技巧在西门子PLC中使用SCL语言编程的技巧前言:两年半前我就在工控网上发表了有关SCL编程的知识#lt;#lt;在S7300400型PLC中使用高级语言编程#gt;#gt;,但发表完后,即使我自己都从没有把任何使用SCL编写的程序用到实际控制中,当时的感觉是使用SCL编程到处受限,没有STL语言灵活和强大。
直到最近使用施耐德的Unity软件编程,并使用这种已经国际标准化的文本语言(等同于西门子的SCL语言),才体会到它的优点:#lt;1#gt;、程序容易阅读,便于诊断和维护;#lt;2#gt;、程序容易在不同厂家之间的PLC之间转换。
西门子的STL语言是强大,但难于阅读,编写程序也需要异常小心,其最强大的可能是它的寄存器寻址(类似于一些计算机高级语言中的地址指针),SCL没有这个功能,那就多费一些程序代码来实现同样的功能,程序是否优秀更应该看重程序的架构和提高程序生产效率的标准化,好的PLC程序不应该只有自己明白,而是让更多的人明白。
在西门子PLC中使用SCL语言的场合一般是编写标准功能块FB,其编程方式和西门子的其他编程语言,如梯形图Lad、语句表STL是完全不同的,同时为了实现程序的国际标准化,即为了方便的将程序代码移植到不同厂家的PLC系统上,尽量不要在SCL中使用西门子独有的功能块。
1、在FB块中使用结构编写FB块的准则,就是其使用的内部变量尽量与外部隔离,除了像PLC的新启动/重启动标志,以及一些方波/脉冲波等全局变量可以在FB块中使用外,其他的任何全局变量都不应该在FB内部使用,即使是自定义结构也应该在FB中单独定义,在FB块中使用结构应该在静态类型变量中定义,如下: VAR // Static Variables IM:STRUCT //Data structure of Internal Flags H1_AFCountImp:BOOL:=False; // Aux Flag Counter ImpulseH1_CountImp:BOOL:=False; // Counter ImpulseH1_ELCountMV:BOOL:=False; // Endless Counter Maximum ValueEND_STRUCT; //other data structure … END_VAR 在使用这些结构时,可以按照如下方式: IM. H1_CountImp:=Imp;2、在SCL中替代Set/Reset指令的方法 SCL中不存在Set/Reset指令,或者说也没有必要使用。
西门子S7-300 400高级编程培训教材
功能及功能块中的参数声明
"Motor"
EN
ENO
Start
地址 声明 名称 类型 初始化值 ... 0.0 输入 Start BOOL FALSE 0.1 输入 Stop BOOL TRUE 2.0 输入 Speed INT 0 2.0 输出 Motor_on BOOL FALSE 8.0 输出 Setpoint INT 0 10.0 输入/输出 EMER_OFF BOOL FALSE ... 静态 ... ... ... ... 临时 .. ... ...
CALL #Punch . CALL #Guard
... ...
CALL FB10, DB10
Press_1的数据
传送带的数据
Press_1. Guard
Press_2. Punch
Press_2. Guard
Press_2的数据
FB10的数据
Press_1. Punch
多个实例只需要 一个 DB 在为各个实例创建“private” 数据区时,无需任何额外的管理工作 多重背景模型使得“面向对象的编程风格”成为可能(通过“集合”的方式实现可重用性) 最大嵌套深度为8级
Q20.5 Q20.6 Q9.0 QW12
. . . Q8.2 Q8.3 I 0.2 I 0.3 I 16.6 I 16.7
多重背景模型的结构
FB10
钻床数据
FB10的背景DB
CALL Drill . CALL Motor_1 . CALL Motor_2
DB10
... stat Drill FB1 stat Motor_1 FB2 stat Motor_2 FB2
FB1 “Station” 的工作原理
SIEMENS SIMATIC S7-300和S7- 400的梯形图(LAD)编程 说明书
s附录SIMATICS7-300和S7-400的梯形图(LAD)编程参考手册2004年1月版 A5E00446504-01版权所有 © Siemens AG 2004 保留所有权利未经明确的书面许可,不得复制、传播或使用本手册或所含内容。
违者应对造成的损失承担责任。
保留所有权利,包括实用新型或设计的专利许可权及注册权。
Siemens AGBereich Automation and DrivesGeschaeftsgebiet Industrial Automation Systems Postfach 4848, D- 90327 Nuernberg免责声明我们已检查过本手册中的内容与所描述的硬件和软件相符。
由于差错在所难免,我们不能保证完全一致。
我们会定期审查本手册中的内容,并在后续版本中进行必要的更正。
欢迎提出改进意见。
©Siemens AG 2004技术数据如有改动,恕不另行通知。
Siemens Aktiengesellschaft A5E00446504-01安全指南本手册包括了保证人身安全与保护本产品及连接的设备所应遵守的注意事项。
这些注意事项在手册中均以下列符号加以突出,并根据危险等级标明如下:危险表示如果不采取适当的预防措施,将导致死亡、严重的人身伤害或财产损失。
警告表示如果不采取适当的预防措施,可能导致死亡、严重的人身伤害或财产损失。
当心表示如果不采取适当的预防措施,可能导致轻微的人身伤害。
当心表示如果不采取适当的预防措施,可能导致财产损失。
须知提醒您注意有关产品、产品使用的特别重要的信息,或者是文档的特定部分。
合格人员只有合格人员才允许安装和操作该设备。
合格人员是指被授权按照既定安全惯例和标准,对线路、设备和系统进行调试、接地和标记的人员。
正确使用请注意如下事项:警告 该设备及其部件只能用于产品目录或技术说明书中所描述的范畴,并且只能与由西门子公司认可或推荐的第三方厂商提供的设备或部件一起使用。
SIEMENS S7-300和S7-400梯形逻辑 (LAD)编程 说明书
SIMATICS7-300 和 S7-400 梯形逻辑(LAD)编程参考手册2004年1月版前言,目录位逻辑指令1比较指令2转换指令3计数器指令4数据块指令5逻辑控制指令6整数算术运算指令7浮点算术运算指令8赋值指令9程序控制指令10移位和循环指令11状态位指令12定时器指令13字逻辑指令14附录所有梯形逻辑指令一览A 编程举例B安全指南本手册包括应该遵守的注意事项,以保证人身安全,保护产品和所连接的设备免受损坏。
这些注意事项都使用符号明显警示,并根据严重程度使用下述文字分别说明:危险表示若不采取适当的预防措施,将造成死亡、严重的人身伤害或重大的财产损失。
警告表示若不采取适当的预防措施,将可能造成死亡、严重的人身伤害或重大的财产损失。
小心表示若不采取适当的预防措施,将可能造成轻微的人身伤害。
小心表示若不采取适当的预防措施,将可能造成财产损失。
注意引起你对产品的重要信息和处理产品或文件的特定部分的注意。
合格人员只有合格人员才允许安装和操作这一设备。
合格人员规定为根据既定的安全惯例和标准批准进行试运行、接地和为电路、设备和系统加装标签的人员。
正确使用注意如下:警告本装置及其组件只能用于产品目录或技术说明书中阐述的应用,并且只能与西门子公司认可或推荐的其它生产厂的装置或组件相连接。
本产品只有在正确的运输、贮存、组装和安装的情况下,按建议方式进行运行和维护,才能正确而安全地发挥其功能。
商标SIMATIC®、SIMATIC HMI®和SIMATIC NET®为西门子公司的注册商标。
任何第三方为其自身目的使用与本手册中所及商标有关的其它名称,都将侵犯商标所有人的权益。
西门子公司版权所有©2004。
保留所有权利。
郑重声明未经明确的书面授权,禁止复制、传递或使用本手册或其中的内容。
违者必究。
保留所有权利包括专利权、实用新型或外观设计专有权。
我们已核对过,本手册的内容与所述硬件和软件相符。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在S7300/400型PLC中使用高级语言编程S7-SCL是一种类似于Pasical、Deliphi的高级编程语言,其符合国际标准IEC 61131-3,也就是说支持该标准的任意厂家的PLC均可以使用与之相似的语言编程。
这种语言适合于处理复杂的逻辑和大量的数学运算,由于其具有高级语言的编程结构,因此和S7的STL语句表编程方式比较起来有着更加方便的控制方式,可以这样说,只要是必须使用语句表的地方,我们均可以考虑使用SCL,也许STL 在执行时比SCL更加高效,但事实上也不一定,首先SCL可以编译成STL,同时SCL设计时可以优化编程,而STL若运用不当,可能还会将低效率。
当然在目前的这种系列的PLC上,效率对于我们来说已是次要的,我们更关心的是编程结构。
就像在PC机上,舍弃了汇编语言,而主要采用C/C++等高级语言。
总体来说,SCL适合于编写标准功能块,由于在维护中,它和STL一样,不象Lad一样利于维护,因此这些标准功能块都应该有文档说明,以便用户了解其功能。
下面的内容主要是参考西门子的S7-SCL文档,对SCL进行了系统的介绍,最后给出了示例。
这里假设读者是学过S7-300/400编程,并曾经学过至少一种计算机高级编程语言。
一、软件的使用1、创建一个新的S7-SCL Source 文件打开工程项目à选择CPU站à选择S7 Programà选择Sources在右边窗口的空白处点右键选Insert New Objectà点击SCL Source双击创建的SCL Source文件,进入SCL编辑界面。
2、块保护在SCL Source文件的开头添加关键字:KNOW_HOW_PROTECT,当打开由其创建的块时,只能显示参数,而看不到内容。
3、主菜单”Insert”下的”Block Template”可用于插入如OB,FB等各种块的结构。
”Control Structure”菜单可插入各种流程控制结构,这些都可以简化编程。
4、在运行程序之前,首先必须对它进行编译,可以编译整个Source文件或者某个被选择的块,通过选择菜单File > Compile Selected Blocks。
也可以把几个Source文件一起进行编译,其方法是创建一个S7-SCL compilation control file.在该文件中依次输入需要编译的SCL Source文件名,然后执行编译即可。
二、语法规则1、编写SCL Source文件的一般规则● FB, FC, OB, DB以及用户定义的UDT,它们使用的任意数字号均可以在SCL Source中编辑。
● 每种块类型都有它自己的结构。
● 每段落或者每个变量的声明以符号”;”标志结束。
● 不区分大小写。
● 注释仅存在于程序文档中,它不影响程序运行。
● 当一个功能块被调用时,其背景数据块被自动创建,因此它们不需要被编辑。
● DB0有特定用途,因此在程序中不能创建DB0.2、编写块的先后次序● 被调用的块必须位于调用块之前。
● UDT的定义必须位于其被使用的位置之前。
● 共享数据块必须位于那些使用它的所有块之前。
三、数据类型1、数据类型预览Ⅰ、基本数据类型2、补充<1>、DATE_AND_TIME Data Type其值的范围:DT#1990-01-01-0:0:0.0---------DT#2089-12-31-23:59:59.999 该类型以BCD码形式存储。
例如20/Oct./1995 12:20:30 and 10 milliseconds显示如下:DATE_AND_TIME#1995-10-20-12:20:30.10DT#1995-10-20-12:20:30.10<2>STRINGe.g. 声明VARText1 : String [123]; //该字符串的最大容量为123个字符Text2 : String; //该字符串的默认容量为254个字符END_VAR初始化:x : STRING[7]:='Address'; //在使用STRING前,必须对它赋值。
FUNCTION Test : STRING[45]VAR_TEMPx : STRING[45];END_VARx := 'a';x := concat (in1 := x, in2 := x);Test := x; //返回值END_FUNCTION<3>数组类型e.g.VARCONTROLLER1 : //声明3行、4列的二位整数数组,并对其初始化ARRAY[1..3,1..4] OF INT:= -54, 736, -83, 77,-1289, 10362, 385, 2,60, -37, -7, 103 ;CONTROLLER2 : ARRAY[1..10] OF REAL ; //声明10个数的一维实数数组END_VAR注:数组的最大维数为6维,数组的索引范围为-32768 --- 32767之间的任意整数。
所有的基本数据类型均可用于数组。
数组可以使用变量进行索引,例如:arrname_1[ i ] := arrname_2[ j ] ;<4>STRUCT类型e.g. 声明一个结构MOTOR中包含另一个结构DATA。
对结构声明时,可以初始化元素,也可以在使用之前再初始化。
VARMOTOR : STRUCTDATA : STRUCTLOADCURR : REAL ;VOLTAGE : INT := 5 ;END_STRUCT ;END_STRUCT ;END_VAR结构以WORD的形式结尾,否则系统自动把丢失的字节补到结构中去。
<5>用户定义类型UDT (使用关键字TYPE)TYPE //定义名字为MEASVALUES的数据类型MEASVALUES: STRUCTBIPOL_1 : INT := 5;BIPOL_2 : WORD := W#16#FFAA ;BIPOL_3 : BYTE := B#16#F1 ;BIPOL_4 : WORD := W#16#1919 ;MEASURE : STRUCTBIPOLAR_10V : REAL ;UNIPOLAR_4_20MA :REAL ;END_STRUCT;END_STRUCT;END_TYPE//在FB10中使用该类型FUNCTION_BLOCK FB10VARMEAS_RANGE : MEASVALUES; //创建UDT数据END_VARBEGIN// 使用UDT数据MEAS_RANGE.BIPOL_1 := -4 ;MEAS_RANGE.MEASURE.UNIPOLAR_4_20MA := 2.7 ;END_FUNCTION_BLOCK<6>POINTER类型e.g.//定义功能块FC100FUNCTION FC100 : VOID //VOID表明该功能不返回值VAR_IN_OUT //定义FC100的输入输出型参数N_out : INT;out : POINTER; //定义POINTER型数据类型,参数均为临时变量END_VARVAR_TEMP //定义临时变量ret : INT;END_VARBEGIN //进入函数主体// ...ret := SFC79(N := N_out, SA := out);END_FUNCTION//定义功能块FB100FUNCTION_BLOCK FB100VAR //定义静态变量,即离开块后仍旧保存状态的变量ii : INT;aa : ARRAY[1..1000] OF REAL;END_VARBEGIN// ...FC100(N_out := ii, out := aa); //调用FC100,使用指针的方式传递整个数组// ...END_FUNCTION_BLOCK<7>ANY类型e.g.VAR_INPUT //输入型变量iANY : ANY; //定义为ANYEND_VARVAR_TEMPpANY : ANY; //定义为ANYEND_VARCASE ii OF //CASE分支语句1:pANY := MW4; // 将MW4的地址赋给pANY// of MW43..5: //等于3,4,5的情况下pANY:= aINT[ii]; // pANY contains the address// of the ii th// element of the aINT field;100:pANY := iANY; // pANY contains the value// of the iANY input variableELSEpANY := NIL; // pANY contains the value// of the NIL pointerEND_CASE;SFCxxx(IN := pANY);四、局部变量和参数的声明1、变量静态变量:用于保持块的数据,该数据存在背景数据块中。
临时变量:仅在块运行过程中存在。
若多个变量的数据类型一致,可用如下方式:VALUE2, VALUE3,VALUE4,....: INT;声明时可以初始化:VALUE :REAL := 20.25;数组的初始化有两种方式:CONTROLLER1 : ARRAY [1..2, 1..2] OF INT := -54, 736, -83, 77;当把相邻的数组元素赋相同的值时,例如,把A3[2]到A3[11]的值设为100.0:A3 : ARRAY[1..12] OF REAL := 0.0, 10(100.0), 1.0;2、块参数输入参数:用于接收当块被调用时的输入值,他们是只读的。
输出参数:传输当前值到这个调用块,在被调用块中应该对该参数赋值输入/输出参数:用于接收当块被调用时的输入值,并可以把结果返回到调用块。
3、使用多重背景声明方式如下:Supply1 : FB10; // Supply1为FB10的背景DBSupply2,Supply3,Supply4 : FB100; //为FB100声明多个背景DBMotor1 : Motor ; // Motor为某个FB的符号名4、变量的声明五、常量S7-SCL常量分位常量、数字常量、字符常量、时间常量,使用CONST…END_CONST 声明。
e.g.CONSTNumber := 10 ; //整数常量TIMEOFDAY1 := TIME#1D_1H_10M_22S_2MS ; //时间常量NAME := 'SIEMENS' ; //字符串常量NUMBER2 := 2 * 5 + 10 * 4 ;NUMBER3 := 3 + NUMBER2 ;END_CONST1、位常量Bool#false 位的值为TRUE或者FALSE8#177777 8进制DW#16#0000_0000 16进制2、整数常量,它有多种表达方式15 10进制值为152#1111 2进制值为1516#F 16进制值为15Value_2:=2#0101; // 2进制值为5Value_3:=8#17; // 10进制值为14Value_4:=16#F; // 16进制值为15Value_5:=INT#16#3f_ff // 16进制值,类型被定义3、 Real常量NUM4:= -3.4 ;NUM5:= 4e2 ;NUM6:= real#1.5;4、字符常量(单个字符)Charac_1 := 'B';Charac_2 := char#43;Charac_3 := char#'B'; //字符’B’CHARACTER := '$41' ; //字符'A'5、字符串常量NAME:= 'SIEMENS';6、日期常量TIMEVARIABLE1:= DATE#1995-11-11 ;TIMEVARIABLE2:= D#1995-05-05 ;7、时间常量Interval1:= TIME#10.5S ;Interval2:= T#3D_2S_3MS ;8、 Time-of-Day常量TIMEOFDAY1:= TIME_OF_DAY#12:12:12.2 ; TIMEOFDAY2:= TOD#11:11:11 ;9、Date and Time常量TIMEOFDAY1:= DATE_AND_TIME#1995-01-01-12:12:12.2 ; TIMEOFDAY2:= DT#1995-02-02-11:11:11;六、CPU的内存区域1、可以直接操作字节、字、位STATUSBYTE :=IB10;STATUS_3 :=I1.1;MEASVAL :=IW20;2、可以通过索引对位、字、字节操作,该索引可以是变量MEASVAL_1 :=IW[COUNTER]; //若COUNTER=5,则MEASVAL_1的值为IW5 OUTLABEL :=I[BYTENO, BITNO]; // 若BYTENO=3,BITNO=1,则OUTLABEL=I3.1注:当获取的数据类型是BYTE, WORD or DWORD,时,使用一个索引参数,当获取的数据类型为BOOL时,必须使用两个索引参数,分别指定字节号和位号。