第11章利用结构化文本编写程序11-1第11章利用结构化文本编写程序FPWINPro导入11-211-1概要结构化文本(ST)是与梯形图等的图形化形式的语言不同的、以纯文本形式编写程序的语言。与其他的语言(LD、IL、SFC、FBD)相同,本软件支持本公司全部型号的PLC。此外,在ST编辑器中,也可以使用Windows所使用的文本编辑器的标准编辑功能(剪切、粘贴、查找、替换等)。更进一步地利用指令输入辅助功能(模板),可以非常简单地输入功能或功能块、IF语句及FOR语句等等。但是,在编程的表述方法中有若干限制事项,因此,请仔细阅读后边记述的[关于ST语言的注意事项],并在充分理解的基础上使用。第11章利用结构化文本编写程序11-311-2ST编辑器的准备ST编辑器的启动方法有以下2种。点击[新创建POU]图标。・启动FPWINPro,作成ST语言的POU。・在正在编辑的工程文件中追加ST语言的POU。■在正在编辑的工程文件中追加ST语言的POU。在此处以“ST_Test_1”的名称生成。选择结构化文本(ST)。入左图所示,POU类型:程序(PRG)程序语言:结构化文本(ST)Task:Programs选择后请点击[OK]按钮。画面将显示ST编辑器。POU名称显示为[ST_Test_1]。FPWINPro导入11-411-3编制ST程序11-3-1ST的表述方法在ST编辑器中,基本是通过键盘输入文本进行编程的。例注释指令条件语句IFInitial_SWTHENDATA_AREA:=0;IFInitial_SWTHENDATA_AREA:=0;END_IF;END_IF;使用IF或FOR等指令语句时,在与其后的词语之间需要1个以上的空格。在运算符的情况下,不必须特别插入空格。(DATA_AREA:=0;这样的表达也可以。)对于左记的条件语句,表述成这种形式也可以。在指令昀后,请务必添加分号[;]。第11章利用结构化文本编写程序11-511-3-2输入指令■命令文を入力する虽然ST所支持的各种指令语句基本上都可以通过键盘直接输入,在本节中,将对实际使用ST输入各种指令的方法进行说明。但是使用“插入用模板(快捷方式)”会使输入编辑更加简便。(插入用模板)例1.输入“IF”指令语句。2.在光标置于“IF”指令某处的状态下,按Ctrl+F1键。1.在ST编辑画面中,首先利用键盘输入“IF”。●操作步骤随后,画面将显示以下所示的IF语句。在?所包围的部分中,输入任意的变量或设备。3.请在“IF”~“END_IF”的区间内对应编辑需要的内容。【例】当X0为ON时,使Y0为ONFPWINPro导入11-6例2.输入“FOR”指令语句。■输入步骤1.在ST编辑画面中,首先用键盘输入“FOR”。2.在光标置于“FOR”指令某处的状态下,按Ctrl+F1键。(插入用模板)随后,画面将显示以下所示的IF语句。在?所包围的部分中,输入任意的变量或设备。3.请在FOR~END_FOR的区间内对应编辑需要的内容。【例】使i在0~1000内逐次增1、使DT0的数值逐次增加i。(在本例中,将i作为INT型的变量使用)第11章利用结构化文本编写程序11-7■输入OP/FUN/FB在ST编辑画面中,OP(运算符)/FUN(功能)/FB(功能块)的输入方法如下所示。例输入数据传输指令F0(MV)指令。(在本例中输入[F0(MV)DT0,DT1])●操作步骤1.将光标置于ST编辑画面中的输入指令的位置。2.点击工具栏中按钮、或在[工具(Tool)菜单中选择[指令的选择]。画面将显示以下的对话框。FPWINPro导入11-83.在[库(Library)]选择区里,从[FPLibrary]中选择[F0_MV],然后请双击或点击[插入(Insert)]按钮。(在库选择区中,缺省值被选择为全部(All),在此状态下,F0_MV指令也能在列表中显示)4.如下所示,F0_MV指令被插入。5.在光标置于“F0_MV”指令某处的状态下,按Ctrl+F1键。(插入用模板)随后,如下图所示,在输入中自动显示必需的参数。6.在?所包围的文字部分(表示输入数据的类型)中,输入相应的内容后结束。第11章利用结构化文本编写程序11-911-3-3在ST中可以使用的操作数/指令语句/运算符■在ST中可以使用的操作数及数据类型如下所示。名称数据类型例常数数值字符串时间55,-3.14159‘Thisisasampletext’T#8d_3h_23m变量变量数组的成员DUT(构造体)的成员构造体内的数组成员Var1Array[15]Dut1.Var1Dut1.Array[i+5]功能功能调用Fun1(a,b,c)这些操作数,可以共同用于运算符和指令。在ST中记述PLC设备(定义全局变量,在程序中直接使用)时,请按以下的形式“全部使用大写字母记述”。(如果以小写字母表述,在进行编译时就会被认为时变量,同时会因此而产生变量未定义错误。)名称例(全部以大写字母记述)补充说明外部输入XX0外部输出YY0内部继电器RR0链接继电器LL0继电器定时器/计数器T/CT0/C200外部输入WXWX0双字指定时为DWX0外部输出WYWY0双字指定时为DWY0内部继电器WRWR0双字指定时为DWR0链接继电器WLWL0双字指定时为DWL0数据寄存器DTDT0双字指定时为DDT0链接寄存器LDLD0双字指定时为DLD0定时器/计数器SV设定值区SV0双字指定时为DSV0定时器/计数器EV经过值区EV0双字指定时为DEV0存储区索引寄存器IIX,IYI0-ID不可以使用10进制常数100,1000,255,-15直接记述数字16进制常数16#0000,16#50AC,16#FFFF在开头添加[16#]常数10进制常数(浮点型)0.0,100.0,12.3,-0.5添加小数点后,作为实数使用。数据类型内容位(bit)数范围BOOL0:FALSE,1:TRUE1-DINT双精度整数32-2147483648~2147483647DWORD32位字符串32-INT整数16-32768~32767REAL实数(IEEE754标准)32-3.402823*E38~-1.175494*E-38,0.0+1.175494*E-38~+3.402823*E38STRING字符串-昀多255个字符TIME连接时间16(FP1,3等)32(FP0,Σ,2/2SH,10SH)0.01~327.67秒0.01~21474836.47秒WORD16位字符串16-FPWINPro导入11-10■在ST中可以使用的指令列表如下所示。指令例说明y:=(a+b+c)/3;将右边的值赋值到左边的变量。在本例中,是将a,b,c的平均值代入y。Y:=SIN(x);调用单纯包含1个变量的功能。本例是计算出输入变量x的正弦、并赋值到变量Y。Y:=LIMIT(MN:=0,IN:=X,MX:=100);调用包含参数赋值语句的功能。在本例中,如果参数IN为MN与MX之间的数值,则将该值原样赋值到Y。:=(赋值)(FUN调用)(FB调用)Ton1(IN:=Start1,PT:=T#300ms,End1:=Ton1.Q;Ev1:=Ton1.ET);直接代入输入参数,调用FB。在本例中,当变量Start1为ON时,在300ms后变量End1为ON。变量Ev1中赋值到经过值。IF(条件分支)IFa=0THENb:=0;ELSIFa=100THENb:=1;ELSEb:=2;END_IF;根据记述的逻辑值,执行各分支中的赋值语句。在使用IF语句的情况下,必须输入END_I。CASE(复数选择)CASEaOF0:b=0;1,2:b=1;3,4,10..20:b=2;100..110:b=3;ELSEb=4;END_CASE;根据记述的变量值,选择被执行的语句。变量a必须是INT型(或者DINT型)。FORi:=0TO100DOSUM:=SUM+a[i];END_FOR;按照设定的增量循环执行。在本例中,将i逐次增1,当其变为100后,退出处理。FOR(循环)FORi:=0TO100BY10DOSUM:=SUM+a[i];END_FOR;在本例中,将i逐次增加10,当其变为100后,退出处理。WHILE(重复)i:=0;WHILEi=100ANDa[i]100DOi:=i+10;END_WHILE;在满足WHILE语句以下的条件的期间,重复进行处理。执行条件是在执行处理之前进检查。REPEAT(重复)i:=0;REPEATi:=i+10;UNTILi100ORa[i]=100END_REPEAT;到满足UNTIL语句以下的条件为止,重复进行处理。执行条件是在执行处理之后进行检查。EXIT(终止)EXIT;无条件地停止循环处理。RETURN(返回跳转点)RETURN;返回进行调用的POU的程序。这些指令在全部PLC型号中都可以使用。第11章利用结构化文本编写程序11-11■在ST中可以使用的指令列表如下所示。运算符可以使用的数据类型例结果运算优先级()(1+2)*(3+4)21**REAL3.0**2.09.000435-(符号反转)NOT(逻辑非)INT,DINT,REALBOOL,WORD,DWORD-DATA0(DATA0为100时)NOTDATA0(DATA1为16#0064时)-10016#FF9B*(乘法)/(除法)MOD(求余数)INT,DINT,REAL10*520/412MOD105052+(加法)-(减法)INT,DINT,REAL10+205–12-10304-8==(比较)ANY(ANY_BIT不可以使用)13135=52=1FALSETRUETRUEFALSE=(等式)(不等式)ANYX0=X1(X0:ON状态,X1:OFF状态)100100FALSEFALSE&,AND(逻辑与)BOOL,WORD,DWORD16#A5F8AND16#B0B016#A0B0XOR(逻辑异或)BOOL,WORD,DWORD16#A5F8XOR16#B0B016#1548OR(逻辑或)BOOL,WORD,DWORD16#5555OR16#AAAA16#FFFF昀高级昀低级这些运算符可以在全部型号PLC中使用。(但是可以使用REAL的型号仅限FP0、FPΣ、FP10SH、FP2/2SH)【补充】此外,三角函数(SIN,COS,TAN等)及指数、对数、平方根等的算术指令是作为IEC指令被定义的,在FP-X、FP0、FPΣ、FP10SH、FP2/2SH(可以使用实数的PLC机型)中可以使用。运算符可以使用的数据类型例结果ABS(绝对值)ANY_NUMResult:=ABS(-5.0)(以下Result为REAL型的变量)5.0SQRT(平方根)REALResult:=SQRT(4.0)2.0LN(自然対数)REALResult:=LN(100.0)4.605168LOG(对数)REALResult:=LOG(100.0)1.999999EXP(自然指数)REALResult:=EXP(3.0)20.08554SIN(正弦)REAL(角度数据以弧度指定)Result:=SIN(1.0)0.841471COS(余弦)REAL(角度数据以弧度指定)Result:=COS(1.0)0.5403023TAN(正切)REAL(角度数据以弧度指定)Result:=TAN(1.0)1.557408ASIN(反正弦)REAL(角度数据以弧度指定)Result:=ASIN(1.0)1.570796ACOS(反余弦)REAL(角度数据以弧度指定)Result:=ACOS(1.0)0.0ATAN(反正切)REAL(角度数据以弧度指定)Result:=ATAN(1.0)0.7853另外,与这些同等的指令也在FPWINPro系列指令(FPLibrary)中被定义。使用其中任何的一个都可以。FPWINPro导入11-1211