Q 系列PLC ST 语言编程笔记

1、标识名
标识名不区分大小写。标识名中不能使用保留字及实际软元件等字符串。
2、注释是以表示注释的开始的“(”及表示结束的“)”围住部分。
3、数据类型
ST程序中可用的数据类型如下
BOOL,INT,DINT,REAL,STRING (’…'或 “…”),ARRAY,STRUCT
数组要素的指定编号从0 开始计数
D1:=1; tanka[D1]:=1200;
4、软元件
a、 可直接使用软元件,如D1000,X0A0、DX0(直接输入)。
b、 变址修饰
Z2:=1;
D0Z2:=K0; (D0Z2表示D1)
c、位指定
D0.0 = TRUE; (将D0 软元件的第0位置为ON。 )
W0.F = FALSE; (将W0 软元件的第15 位置为OFF。)
d、 位数指定
通过将位软元件的4 位、8 位、12 位...作为1 位数进行位数指定,在位软元
件中可以处理单字数据或者双字数据。
K4X0 := D0; (将从X0 软元件开始的16 位作为整数型(INT)使用,代入
D0
)
Wtest := K1X0; (将从X0 软元件开始的4 位代入单字型标签Wtest 中。)
Dwtest := K5X0; (将从X0 软元件开始的20位代入双字型标签Dwtest 中)
5、 ST程序的表达式
a、运算符列表
(),函数(),
(指数,如tei**shisuu ), NOT, * ,/ ,MOD (余数), + , -,
比较 < , > , <= , >= , = , <>
逻辑积 AND , &
XOR , OR
b、控制语句(关键字需大写)
(a) IF 条件语句
IF <布尔表达式> THEN
<语句 ···>
END_IF;
IF <布尔表达式> THEN
<语句1···>
ELSE
<语句2···>
END_IF;
IF <布尔表达式1> THEN
<语句1···>
ELSIF <布尔表达式2> THEN
<语句2···>
ELSIF <布尔表达式3> THEN
<语句3···>
END_IF;
(b)CASE 条件语句
CASE <整数表达式> OF
<整数选择值1>: <语句1 ···>
<整数选择值2>: <语句2 ···>
·
·
·
<整数选择值n>: <语句n ···>
ELSE
<语句n+1 ···>
END_CASE;
CASE D100 OF
1: <语句1 ···>
2: <语句2 ···>
3: <语句3 ···>
3,4: <语句4 ···>
ELSE
<语句5 ···>
END_CASE;
(注:整数选择值只能指定无K指定的10进制数,不使用EXIT语句)
©循环语句
FOR idx:=0 TO 100 BY 1 DO

END_FOR;
WHILE W100 < (W2-100) DO
W100 := W100 + 1;
END_WHILE;
REPEAT
D1 := D1 + 1;
UNTIL D1 < 100
END_REPEAT;
(d)其它控制语句
RETURN; RETURN语句用于中途结束功能块内的程序·ST程序。
EXIT; EXIT语句是只能在ST程序的循环语句中使用的语句,使循环回路中
途结束。
6、使用FB 块

  1. 设置FB变量(FB标识)
    选择输入输出类型,选择标识的类型。类型有以下4种:
    ·输入变量… 从FB外部输入的变量
    ·输出变量… 输出到FB外部的变量
    ·输入输出变量… 具有输入及输出功能的变量
    ·“空栏”… FB内部使用的变量
    2)调用:FB1( I_Test := D0,O_Test := D1,IO_Test := D100); 输出变量的记述可以
    省略。可以将FB块拖到程序中。
    7、MELSEC函数
    1)软元件的输出
    BOOL OUT_M(BOOL EN,BOOL D);
    2)低速型定时器
    BOOL TIMER_M(BOOL EN, BOOL TCoil, ANY16 TValue);
    TS:定时器触点;TC:定时器线圈;TN/T:定时器当前值
    IF M0 THEN
    TIMER_M (M1,TC0,K10);
    END_IF;
    (*M0=ON且M1=ON时,开始计数。 *)
    (*M0=ON且M1=OFF时,清除计数。 *)
    (*M0=OFF且M1=ON时,停止计数。计数值不被清除。 *)
    (*M0=OFF且M1=OFF时,停止计数。计数值不被清除。 *)
    3)高速型定时器
    BOOL TIMER_H_M(BOOL EN, BOOL TCoil, ANY16 TValue);
    4)计数器
    BOOL COUNTER_M(BOOL EN, BOOL CCoil, ANY16 CValue);
    CS:计数器触点;CC:计数器线圈;CN/C:计数器当前值
    5)软元件的复位
    BOOL RST_M(BOOL EN, ANY_SIMPLE D);
    6)相同的 16 位数据块传送
    BOOL FMOV_M(BOOL EN, ANY16 S1, ANY16 n, ANY16 D); (D起的n 点
    =S1
    )
    7)n位左移,将指定的BIN16位数据向左移动n位。
    BOOL SFL_M(BOOL EN, ANY16 n, ANY16 D);
    SFL_M(X0, K4, D100); 将D100 的数据向左移动4 位
    8)智能功能模块1字数据读取
    从指定的智能功能模块·特殊功能模块内的缓冲存储器的指定的地址对指定
    点数的数据进行读取。
    BOOL FROM_M(BOOL EN, ANY16 n1, ANY16 n2, ANY16 n3, ANY16 D);
    (*如果执行条件X0变为ON,则从输入输出编号040~05F中安装的智能功
    能 *)
    (*模块的缓冲存储器的地址10读取1字到D0 中。 *)
    FROM_M(X0, H4, K10, K1, D0);
    9)智能功能模块2字数据读取
    从指定的智能功能模块·特殊功能模块内的缓冲存储器的指定的地址对指定
    点数X2 的数据进行读取。
    BOOL DFRO_M(BOOL EN, ANY16 n1, ANY16 n2, ANY16 n3, ANY32 D);
    (*如果执行条件X0 变为ON,则从输入输出编号040~05F中安装的智能 *)
    (*功能模块的缓冲存储器的地址602,603 中读取2字数据至DwResult。 *)
    DFRO_M(X0, H4, K602, K1, DwResult);
    10)智能功能模块1字数据写入
    将从指定的软元件算起n3 点的数据写入到指定的智能功能模块·特殊功能模
    块内缓冲存储器的指定的地址以后。
    BOOL TO_M(BOOL EN, ANY16 S1, ANY16 n1, ANY16 n2, ANY16 n3);
    (*如果执行条件X0 变为ON,则将3 写入到输入输出编号040~05F中安装的智能 *)
    (*功能模块的缓冲存储器的地址0中。 *)
    TO_M(X0, K3, H4, K0, K1);
    11)智能功能模块2字数据写入
    将从指定的软元件算起n3×2 点的数据写入到指定智能功能模块·特殊功能
    模块内的缓冲存储器的指定地址以后。
    BOOL DTO_M(BOOL EN, ANY32 S1, ANY16 n1, ANY16 n2, ANY16 n3);
    (*如果执行条件X0 变为ON,则将0 写入到输入输出编号040~05F中安装的智能 *)
    (*功能模块的缓冲存储器地址41,42 中。 *)
    DTO_M(X0, K0, H4, K41, K1);
    12)对指定的值进行以e为底的自然指数运算
    BOOL EXP_E_MD(BOOL EN, REAL S1, REAL D);
    13)时钟数据的读取
    BOOL DATERD_MD(BOOL EN, ANY16(7) D);
    D[0]:年(公历: 1980~2079);D[1] 月(1~12) ;D[2] 日(1~31) ;D[3] 时(0~
  2. D[4] 分(0~59) ;D[5] 秒(0~59) ;D[6] 星期(0~6)
    (ARRAY [0…6] OF ANY16 )
    14)时钟数据的写入
    BOOL DATEWR_MD(BOOL EN, ANY16(7) S);
    8、IEC函数
    1)DINT_TO_REAL、BOOL_TO_DINT、BOOL_TO_INT、DINT_TO_BOOL、
    DINT_TO_INT、DINT_TO_REAL、
    INT_TO_BOOL 、INT_TO_DINT 、INT_TO_REAL 、REAL_TO_DINT 、
    REAL_TO_INT
    2)绝对值ABS
    3)对指定的数据的自然指数进行运算。 REAL EXP( REAL S1 );
    4)在指定的数据之间进行除法运算,并对其余数进行运算。
    BOOL MOD_E( BOOL EN, ANY_INT S1, ANY_INT S2, ANY_INT D1 );
    9、PID 控制指令
    “不完全微分PID运算”和“完全微分PID运算”是相互独立的,因此可以
    同时执行。
    1)完全微分
    PIDINIT S S:PID控制数据起始数据。使用软元件点数2+10xn
    数据区 内容 备注
    +0 总环路数
    +1 一次扫描中的执行环路数
    +2 PID运行方式(正0/反) 回路1
    +3 采样周期(Ts)1~6000(10MS)
    +4 比例常数(kp)1~10000(0.01)
    +5 积分常数(Ti)1~32767(100MS)
    +6 微分常数(Td)0~30000(10MS)
    +7 过滤系数0~100(%)
    +8 操作值下限(MVLL)-50~2050
    +9 操作值上限(MVHL)-50~2050
    +10 操作值变化率(deltaMVL)0~2000
    +11 过程值变化率(deltaPVL)0~2000

+12 回路2

(1) 采样周期就是执行PID运算的周期。
每次执行PID 运算指令 时,将一次扫描的测定时间累加到至上一次扫描测定
时间中。
当累计值达到或超出设置采样周期时,执行相应环路的PID运算。
(2) 用于PID运算的采样周期的测定值以10ms 为单位进行舍取。
例如,如果采样周期设置为50ms,测定值为57ms,则以50ms 为采样周期
PID运算;如果测定值为64ms,则以60ms 为采样周期执行PID运算。
正0 运行方式:PV>SV=>MV增大
根据所设置的SV(设置值)和PV(测定值)执行PID运算:
PIDCONT S PID运算。使用软元件点数10+18xn P63
+0 初次处理标识W 通用数据设置区
+1 res
+2 res
+3 res
+4 res
+5 res
+6 res
+7 res
+8 res
+9 res
+10 设置值(SV)W 0 至2000 SV设置区 环路1
+11 测定值(PV)W -50 至2050
+12 自动操作值(MV)R -50 至2050
+13 过滤后的测定值(PVf)R -50 至2050
+14 手动操作值(MVman)W -50 至2050
+15 手动/自动选择(MAN/AUTO)W 0 自动!!!不是0/1
+16 报警(ALARM)R/W
+17~+27RES
+28 环路2

BOOL S_PIDINIT(EN,ANT16 s);
将使用回路数的PID 控制用数据,批量地登录到CPU 模块内部,置为可以进行
PID控制状态
将n 中指定的回路No.的运算参数变更为s 中指定的软元件编号以后存储的
PID控制用数据
BOOL PIDPRMW(BOOL EN,ANY16 n,ANY16 S);
n:变更的回路,S:存储变更的PID 控制用数据的软元件的起始编号
BOOL PIDCONT(EN,ANY16 s);
s:输入输出数据区域中分配的软元件的起始编号
(1) 执行 PIDCONT指令时进行采样周期的计测及PID运算。
(2) PIDCONT指令以s 中指定的软元件编号以后设置的输入输出数据区域的设
置值 (SV)、测定值
(PV) 为基础进行 PID 运算,将运算结果存储到输入输出数据区域的自动操作
量 (MV) 区域中。
(3) 在经过了采样周期的设置时间后的最初的 PIDCONT 指令执行时进行
PID运算。
2)不完全微分
S_PIDINIT S S:PID控制数据起始数据 使用软元件点数10+14xn P54
数据区 内容 备注
+0 总环路数
+1 一次扫描中的执行环路数
+2 PID运行方式(正0/反) 回路1
+3 采样周期(Ts) 1 至6000 (单位: 10ms)
+4 比例常数(kp) 1 至10000 (单位: 0.01)
+5 积分常数(Ti) 1 至32767 (单位: 100ms)
+6 微分常数(Td) 0 至30000 (单位: 10ms)
+7 过滤系数 0 至100(%)
+8 操作值下限(MVLL) -32768 至32767
+9 操作值上限(MVHL) -32768 至32767
+10 操作值变化率(deltaMVL)-32768 至32767
+11 过程值变化率(deltaPVL)-32768至32767
+12 0
+13 微分增益(Kd) 0 至32767 (单位: 0.01)
+14 0
+15 0

+16… 回路2
S_PIDCONT S PID运算。使用软元件点数10+23xn P61
+0 初次处理标识W 通用数据设置区
+1 res
+2 res
+3 res
+4 res
+5 res
+6 res
+7 res
+8 res
+9 res
+10 设置值(SV)W SV设置区 环路1
+11 测定值(PV)W
+12 自动操作值(MV)R
+13 过滤后的测定值(PVf)R
+14 手动操作值(MVman)W
+15 手动/自动选择(MAN/AUTO)W
+16 报警(ALARM)R/W
+17~+32RES
+33 环路2

10、其他
1)LDP, LDF
LDP 是上升沿脉冲运算开始指令,仅在指定位软元件的上升沿时 (OFF→ON)
导通。字软元件的位指定时,仅在指定位发生0→1 的变化时导通。
BOOL LDP(EN,Bit s);s 作为触点使用的软元件
2)实现DWORD_AS_WORD(ds, wLow, wHigh):
DMOV(TRUE,ds,K8M0);
MOV(TRUE,K4M0 ,wLow);
MOV(TRUE,K4M16,wHigh);
3)
SM400:总是ON
SM401:总是OFF
SM402:仅运行以后一次扫描时ON
SM403:仅运行以后一次扫描时OFF
SM409:0.01 秒时钟
SM410:0.1 秒时钟
SM411:0.2秒时钟
SM412:1秒时钟
SM413:2秒时钟
SM414:2n 秒时钟(n=SD414)
SM415:2n 毫秒时钟(n=SD415)
参考:
·三菱Q系列 结构化文本(ST)编程参考手册
·MELSEC-QLF结构体编程手册(结构化文本篇)
·MELSEC-QLF结构体编程手册(公共指令篇)
·MELSEC-QLF结构体编程手册(应用函数篇)
·MELSEC-QLF结构体编程手册(特殊指令篇)

你可能感兴趣的:(PLC,开发语言,c语言,iot)