『7x24小时有问必答』
     先简单介绍下ST语言,ST语言是规定逻辑记述方法的国际标准IEC61131-3所定义的语言。ST语言是具有与C语言等相似的语法结构的文本形式的程序 语言。适用于对难以梯形图语言表现的复杂处理进行编程的情况下。   
      在本章中,对ST语言的动作及规格有关内容进行说明。关于创建ST程序时的操作方法,请参考三菱相关手册。
     ST语言支持控制语法、运算式、功能块(FB)、函数(FUN),可以按以下方式记述。     
例:件语句的选择分支、重复语句等的控制语法(*以线A~C进行控制*)
CASE   线   OF  
        1:
        开始开关 := TRUE;   (*传送带运行*)  
        2:  
        开始开关 := FALSE;   (*传送带停止*)  
        3:  
      开始开关 := TRUE;   (*传送带停止 警告*)  
      ELSE  
      警告指示灯 := TRUE;  
END_CASE;  
IF   开始开关 = TRUE THEN   //传送带运行 处理100次
     FOR   处理次数 := 0   TO   100   BY   1   D0  
         处理数 := 处理数 +1;  
     END_FOR;  
END_IF;
例:使用运算符(*、/、+、-、<、>、=等)的表达式
D0 := D1 * D2 + D3 / D4 - D5 ;  
IF   D0 > D10   THEN  
        D0 := D10 ;
  END_IF;
例:定义的FB的调用
//FB数据名:LINE1_FB
//输入变量:I_Test  
//输出变量:O_Test  
//输入输出变量:IO_Test  
//FB标签名:FB1  
FB1(I_Test:= D0 , O_Test => D1 ,IO_Test:= D100);
例:通用函数的调用
//将BOOL型数据转换为INT型/DINT型数据
wLabel2 := BOOL_TO_INT(bLabel1);
例:汉字等全角字符的使用
//油箱限制器ON时关闭阀,OFF时打开阀
IF   油箱限制器 = TRUE   THEN
        阀 := FALSE; //由于限制器变为ON,关闭阀
ELSE
        阀 := TRUE ; //由于限制器变为OFF,打开阀
END_IF;   
  ST语言中的编程由运算符与语法组成。   
intV2 = ABS( ); //代入语句

IF M1 THEN      //选择语句
   btn01 = TRUE;
ELSE
   btn01 = FALSE;
END IF;

Output_ENO = ENEG(btn01, Input1); //函数调用语句

LadderFBInstance(Input1:=bool1, Input2:= bool2, Input3:= bool3  
);//FB调用语句

句子的终端必须添加“;”(分号)。
intV1:=0;//语句的终端要加分号  
空格、制表符、换行可以插入到运算符及数据中。
intV1 := 0;//可以空格和制表符
intV2:=
2;//可以换行
可以在程序中插入注释。在注释语句的前后记述“(*注释语句*)”。
intV1:=0;
(*注释语句*)
  
程序的结构要素:
ST程序由以下要素构成。   
分隔符

;、(,)
运算符

+、-、<、>、=

保留字

语法
IF、CASE、WHILE、RETURN

软元件
X40、Y50、M100、ZR0

数据类型
BOOL、DWORD

通用函数

ADD、REAL_TO_STRING_E
常数

123、"abc"

标签

Switch_A

注释
(*置为ON*)

其他符号

半角空格、换行代码、TAB代码

备注:以上分隔符、运算符号、保留字应用半角记述
分隔符介绍:
符号
内容
()
圆括弧式
[]
数组要素编号的指定
.(句号)
结构体、FB构件的指定
,(逗号)
自变量的分隔
:(冒号)
软元件型指定符、CASE语句的分隔
;(分号)
语句的终端
"(双引号)
Unicode字符串的标记
'(单引号)
字符串(ASCII、移位JIS)的标记
..(两个句号)
整数范围指定
运算符介绍:
运算符
对象数据类型
运算结果类型
*、/、+、-
ANY_NUM
ANY_NUM
<、>、<=、>=、=、<>
ANY_ELEMENTARY
MOD
ANY_INT
ANY_INT
AND、&、XOR、OR、NOT
ANY_BIT
ANY_BIT
**
ANY_REAL(底) ANY_NUM(指数)
ANY_REAL

指令的解读:
ST程序中使用的指令如下所示:
bResult  :=  BMOV (TRUE ,wValue0,  1,  wValuel);//BIN16位数据块传送,
bResult:  
指定为返回值((在上述示例中,将ENO代入bResult。指令的情况下,返回值的记述可以省略。)
BMOV:指定为指令名。
(内容):指定为指令的参数。
这个当中的TRUE我们可以省略掉,是做为EN使用。好比说:
//省略前
MOV(TRUE, SrcLabel, DstLabel);   
//省略后
MOV(SrcLabel, DstLabel);
但是在通用函数等指令以外不能省略EN。
  也可以说下运动轴的寸动指令的写法:
1.png
// 伺服运行使能 所有的伺服   这个也是要做标签 有标签才行 做的是局部标签

//进行使能
MCv_AllPower_1(
            Axis:=Axis0001.AxisRef,
            Enable:= TRUE ,
            ServoON:= bServoON ,
            Busy=> bBusy  
);
// 轴1的速度这些进行赋值
//-----JOG运行用数据的设置-----
G_JeJogVelocity          := 1500.0;          //在启动的时候 需要给速度赋值   为1500.0
leJogAcceleration         := 2000.0;         // 在启动的时候 要给加速度赋值
leJogDeceleration       := 2000.0;         //在启动的时候   要给减速度赋值
leJogJerk                           := 0.0;                  // 在加减速的时候   看用那个加减速模式
//FB块的填写,进行正反转的互锁
//-----Axis0001 JOG运行-----
G_bJogF1CMD:=(G_bJogF1CMD=TRUE)AND(G_bJogR1CMD=FALSE);       //为互锁模式   就是在正转的时候   不能同时反转 一起TRUE
G_bJogR1CMD:=(G_bJogR1CMD=FALSE)AND(G_bJogF1CMD=TRUE);      // 同上为互锁模式   
//调入FB,进行标签的填写。
MCv_Jog_1(                                                                             
Axis := Axis0001.AxisRef ,   //轴1输入标签 AxisRef是G_b标签中自带的 直接调用就行
JogForward := G_bJogF1CMD ,   //轴1的正转指令 在G_b的时候要建立位标签
JogBackward := G_bJogR1CMD , //轴1的反转指令 在G_b的时候要建立位标签   
Velocity := G_JeJogVelocity ,   //轴1的速度指令 在G_b的时候要建立双精度实数标签
Acceleration := leJogAcceleration ,   //轴1的加速度指令 在le的时候   要建立双精度实数标签
Deceleration := leJogDeceleration ,    //轴1的减速度指令 在le的时候 要建立双精度实数标签
Jerk := leJogJerk ,   //轴1的Jerk指令   在le的时候 要建立双精度实数标签标签
Busy => G_bJog1Busy    //轴1的运行指令   在G_b中建立位标签
);

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码