ST语言入门(维修电工1)

发布于:2022-10-24 ⋅ 阅读:(1882) ⋅ 点赞:(1)

1  该语言不区分大小写: 

    

私有软元件区:硬件寄存器地址

%I        输入区    %id0  //32bit长度,从0bit开始截取
%Q        输出区
%M        存储区

%ix0.0    //  1bit长度,从0bit开始截取

 3值类型长度:用于截取bit长度

X:    1位   (bit)//bool
B:    8位   (byte) //  8bit
W:   16位   (word) // 16bit
D:   32位 (double) // 32bit
L:   64位   (long) // 64bit

 语法:%< 存储器区前缀iqm>< bit长度前缀xbwdl>< 首地址数字>|.< 数字>
变量名1  at    绑定地址%mw10    : 类型解释 word    :=  赋值 1234;
输出2  at    %qd0 :  dint :=  16#0f;    //32bit类型,Q区输出:00001111

4硬件寄存器地址:%软元件+长度  (组合)

%ix0.0  // 输入区 0bit位置
%qx0.0  // 输出区 0bit位置

%qb0 := 16#0f  // 输出区 0bit位置开始(截取 8bit)  00001111指示灯
%qw0 := 16#0f  // 输出区 0bit位置开始(截取16bit)  00001111指示灯
区别在于截取的bit长度不一样。

5值类型:  选中变量  shift + F2

a: BOOL := FALSE;   // 变量 a 是布尔类型,值是0

wo的进制: BYTE := 255; //  byte类型 默认值255

a:=TRUE;
wo的进制 := 123;     // 十进制表示
wo的进制 := 16#0F;   // 十六进制表示
wo的进制 := 10#255;  // 十进制表示
wo的进制 := 8#255;  //  八进制表示
wo的进制 := 2#00001111;   // 二进制表示

           := 是赋值的意思 ,    16# 是十六进制

    整数
byte     8bit        数据范围0~255
usint    8bit
uint     16bit
udint    32bit
ulint    64bit

    负整数
sint    -8bit        
int     -16bit
dint    -32bit
lint    -64bit        受限于PLC的cpu

    小数
real     -32bit
lreal    -64bit

    时间
time     32bit        毫秒      T#12345MS;
ltime    64bit        L毫秒     LTIME#12.789D;  //  D天 H时  M分  S秒  MS毫秒
date                32bit        年-月-日           D#2022-10-24;
date_and_time       32bit        年-月-日L          DT#1970-1-1-0:0:0
time_of_day         32bit        时-分-秒           TOD#14:57:39;//   4    TOD#

    其他
bool                 8bit        数据只能是TRUE或FALSE
word                16bit        WORD#1234;//2
dword               32bit        DWORD#12345;//4
lword               64bit        LWORD#123456789;//8

string              81字节    'ABCDEF'
wstring            162字节    "汇川PLC-AM600"

下面我来验证一下数据长度:

//  正整数_类型
lookbyte  := SIZEOF(BYTE);//  1 (0~255)
lookusint := SIZEOF(USINT);// 1
lookuint  := SIZEOF(UINT);//  2
lookudint := SIZEOF(UDINT);//  4
lookulint := SIZEOF(ULINT);//  8

u8 := -127;// 129
byte2 := -99999;
usint2 := -99999999;
uint2  := -99999999;
udint2 := -99999999;
ulint2 := -99999999;

它只能表示正数,且bit长度不能超出

   下面验证 负整数

//  负整数
looksint := SIZEOF(SINT);// 1
lookint  := SIZEOF(INT);//  2
lookdint := SIZEOF(DINT);//  4
looklint := SIZEOF(LINT);//  8

sint2 := -128;
int2 := -12345;
dint2 := -1234567;
lint2 := -9999999;

 

 下面验证  小数

//  小数_浮点数
lookreal := SIZEOF(REAL);// 4
looklreal:= SIZEOF(LREAL);//  8

real2 := -65535.1234567;
lreal2 := -2147483647.1234567;

 验证一下时间

//	时间_类型
looktime  := SIZEOF(TIME);//  4			T#			毫秒
lookltime := SIZEOF(LTIME);// 8		LTIME#		    L毫秒
lookdate := SIZEOF(DATE); //  4			D#		    年-月-日        D#2022-10-24;
// dateandtime   //4				   DT#			年-月-日L       DT#1970-1-1-0:0:0
// timeofday	 //4				  TOD#		    时-分-秒        TOD#14:57:39;//   4    TOD#
time2 :=  T#12345.6789S;  //4    T#12345ms;
ltime2 := LTIME#12.789D;  //8    D天 H时  M分  S秒  MS毫秒

date2 :=  D#2022-10-24;//4                        年-月-日
lookdateandtime := SIZEOF(dateandtime);//4
dateandtime2 :=DT#2022-1-1-0:0:0; //     4        年-月-日L          DT#   
looktimeofday :=SIZEOF(timeofday);//     4
timeofday2   := TOD#14:57:39;//          4        时-分-秒           TOD#

其它类型:

//	其它
lookbool := SIZEOF(BOOL);// 1   false   true
bool2 :=  TRUE;  //  false  true

lookword  := SIZEOF(WORD);     //  2
lookdword := SIZEOF(DWORD);    //  4
looklword := SIZEOF(LWORD);    //  8
lookstring := SIZEOF(STRING);  // 81
lookwstring := SIZEOF(WSTRING);//162

word2 := WORD#1234;//2
dword2 :=DWORD#12345;//4
lword2 :=LWORD#123456789;//8
string2 := INT_TO_STRING(23);//
wstring2 := "汇川PLC";//
string3 := WSTRING_TO_STRING( wstring2);//

 

 word和string我还不明白

wstring 是字符串

 6变量修饰:

局部变量      var
输入         var_input
输出         var_output
输入输出     var_in_out
常量         var_constant
全局变量 :  Application-右键添加GVL

 7语法:

:    类型指定
:=    赋值
<>    不等于
=      逻辑等于
EXPT     求幂
NOT       取反
*        乘法
/         除法
MOD     取余
and     逻辑与
xor      逻辑异或
or        逻辑或
s=        置位
r=        复位
not        逻辑非

if

IF value < 7 THEN
WHILE value < 8 DO
value := value +1;
END_WHILE;
END_IF;
IF guzhang故障 THEN
	%QX0.0 :=1; // Q0.0=1;  黄色灯
	;
ELSE
	%Qx0.0 :=0; // Q0.0=1;  黄色灯
	;
END_IF

 

for

FOR dangqianzhi当前值:=0 TO zuigaozhi最高值 BY 3 DO  //每次加3到最高值
	%QX0.2 := 0;
	;
END_FOR

 while

WHILE yunxing运行 DO
	%QX0.2 := 1; // 运行灯
	
	;
END_WHILE

 

 case

CASE zhuanpan转盘值 OF
	0..4:			//0到4的情况
			%QX0.2 := 0;
	5,7,9:			// 5,7,9的情况
			%QX0.2 := 0;
	8:				// 等于8的时候
			%QX0.2 := 0;
// 	
// 	label1 :;
ELSE
	CASE zisuoyin子索引 OF
		0..300:		// 0到300
				%QX0.2 := 0;
// 		label1 :;
	ELSE
		%QX0.2 := 1;
		;
	END_CASE
	
	
	;
END_CASE

 

 repeat

continue

jmp

exit

return

8编程:

 直接拖入左侧

 其它功能块也是如此。

本文含有隐藏内容,请 开通VIP 后查看

网站公告


今日签到

点亮在社区的每一天
去签到