Codesys——汇川AC700系列基础指令

本文介绍了汇川AC700系列的ST编程与西门子SCL编程的相似之处,强调了有C语言基础对学习这两者的优势。文中详细讲解了基础指令如异或非、定时器、计数器以及if...then、case语句的使用,并提供了编程示例。文章还提到了ST和SCL在语法上的细微差别,如END_CASE后的分号要求。最后,作者分享了学习PLC编程的方法,强调实践和查阅手册的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下内容属于个人理解,如有错误欢迎指正。

汇川AC700系列的ST编程跟西门子的SCL编程大体相同,有C编程基础以及PLC编程基础的话是比较好上手的。因大学专业主修的是C语言以及单片机,在学习的期间,将汇川ST编程与西门子的SCL编程同时对比学习,方便记忆。本文章中主要写出基础以及常用指令的编程方法,例如异或非、定时器计数器、以及常用if.....then、case语句。整个文章中的指令会附在文章结尾。编程手册在主页资源区。

学习PLC编程以及ST、SCL编程的过程中,主要是通过查手册以及百度,掌握基础的与或非定时器指令基本就可以写简单的程序了,简单的编程熟悉之后,再了解轴控制以及通讯部分的编程。然后根据案例编程进一步提高自己的编程能力(后续也会更新这部分内容),有不理解的指令就查手册或者百度,不可能根据一篇文章就把编程学会的。好喽~废话不多说。

SCL、STL、ST的区别?

ST:是STRUCT TEXT 的缩写,从字面理解,是结构化文本语言。它以计算机的Pascal语言为基础,针对工业控制进行了一系列的优化和修改,也可以认为它是根据C语言来的,但这种说法不太严谨,因为ST语言是不区分大小写的,而C语言严格区分大小写。这些都是根据工业控制的实际情况而制定的。

SCL:是结构化控制语言,它其实和ST语言是一样的,只是在个别语法和功能块(FB)调用上,略有不同,比如case语句。

在SCL编程中,END_CASE后面要加上一个分号,而ST编程中这不需要加分号。下图图1为SCL编程案例,图2为ST编程案例。

CASE "IEC_Counter_0_DB_2".CV OF
    1:
        "Q0.0" := TRUE;
    2:
        "Q0.1" := TRUE;
        
    ELSE
        "Q0.0" := TRUE;
        "Q0.1" := TRUE;
END_CASE;
CASE CTU_0.CV OF
	1 : NUM1 := TRUE;
	2 : NUM2 := TRUE;
	3 : NUM3 := TRUE;
ELSE
	NUM1 := TRUE;
	NUM2 := TRUE;
	NUM3 := TRUE;
END_CASE

STL:STL语言是一种汇编语言,是面向机器底层的语言,可以直接操作寄存器,可读性不强,和80C51单片机的机器语言是一个层面。所以,它是一种低级语言,而ST,SCL都是中高级语言。

位逻辑指令(AND、OR、XOR、NOT、PLS、PLF)

AND

在学习指令的时候,首先查看手册,手册中都会有每个指令的LD以及ST、SCL编程示例,如下图所示。只以AND指令为例,OR、XOR、NOT与AND指令的使用方法都是类似的。

 查看之后在软件中自己进行编程实验,首先就是创建三个布尔类型的变量。

NUM1: BOOL;
NUM2: BOOL;
NUM3: BOOL;

 然后使用AND指令。

//与
NUM3 := NUM1 AND NUM2;

OR

//或
NUM3 := NUM1 OR NUM2;

XOR

//异或
NUM3 := NUM1 XOR NUM2;

NOT

//非
NUM1 := NOT NUM2;

上升沿下降沿(PLS、PLF) 

 汇川中的上升沿的使用,首先要建立一个PLS类型的变量PLS_0。PLS类型的变量是结构体类型的变量,跟C语言中的结构体类似。

//
	PLS0: PLS;
	PLF0: PLF;
	xExecute: BOOL;
	xOut: BOOL;

然后调用PLS指令。指令中的xExecute为指令的输入端,xOut为输出端,整条指令的意思就是当NUM1为1的时候将NUM3置为1。下降沿的使用与上升沿类似。需要注意的是输入端的引脚赋值是用:=,输出端引脚的赋值是用=>。

PLS0(xExecute := NUM1 , xOut=> );
IF PLS0.xOut THEN
	NUM3 := TRUE;
END_IF

 定时器计数器(TON、CTU)

TON

定时器的使用,有四个引脚,两个输入两个输出,输入端为IN使能,PT预设值。输出端为ET当前值,Q计时到输出。与PLS的使用方法一样,首先定义一个TON类型的TON_0变量。

//
	TON_0: TON;
	T0_ET: TIME;
	T0_PT:TIME := T#5S;
	b_Enable: BOOL;
	b_Out: BOOL;
	

 然后调用TON指令,填写对应的引脚值。

//接通延时定时器
TON_0(IN := b_Enable , PT := T0_PT , 
	  Q => b_Out , ET => T0_ET);

CTU 

计数器的使用,有五个引脚,三个输入两个输出,输入端为CU使能,PV预设值,RESET复位引脚。输出端为CV当前值,Q计数到输出。与PLS的使用方法一样,首先定义一个TCTU类型的CTU_0变量。

//
	CTU_0: CTU;
	xCU: BOOL;
	xRESET: BOOL;
	wPV: WORD;
	xQ: BOOL;
	wCV: WORD;

 然后调用CTU指令,填写对应的引脚值。

//计数器
CTU_0(
	CU := xCU,
	RESET := xRESET,
	PV := wPV,
	Q => xQ,
	CV => wCV
	);

语句(case,if.....then) 

case

case语句类似于C语言中的Switch...case语句,判断case后面变量的值的不同,执行不同的语句。下图所示的案例就是,判断计数器0的当前值,如果为1,NUM1=1,如果为2,NUM2=1,如果为3,NUM3=1,如果不等于1或者2或者3,则执行ELSE后面的语句,NUM1=1,NUM2=1,NUM3=1。需要注意的是END_CASE后面不需要加分号。

CASE CTU_0.CV OF
	1 : NUM1 := TRUE;
	2 : NUM2 := TRUE;
	3 : NUM3 := TRUE;
ELSE
	NUM1 := TRUE;
	NUM2 := TRUE;
	NUM3 := TRUE;
END_CASE

if.....then

 if语句与C语言中的IF语句的用法个人感觉完全一样。

基本语法是:

 使用案例:

PLF0(xExecute := NUM1 , xOut=> );
IF PLF0.xOut THEN
	NUM3 := TRUE;
END_IF

所有指令源程序

/**************************变量声明*************************/
PROGRAM PLC_PRG
VAR
	//
	NUM1: BOOL;
	NUM2: BOOL;
	NUM3: BOOL;
	
	//
	PLS0: PLS;
	PLF0: PLF;
	xExecute: BOOL;
	xOut: BOOL;
	
	//
	TON_0: TON;
	T0_ET: TIME;
	T0_PT:TIME := T#5S;
	b_Enable: BOOL;
	b_Out: BOOL;
	
	//
	CTU_0: CTU;
	xCU: BOOL;
	xRESET: BOOL;
	wPV: WORD;
	xQ: BOOL;
	wCV: WORD;
END_VAR

/**************************指令使用*************************/
//与
NUM3 := NUM1 AND NUM2;
//或
NUM3 := NUM1 OR NUM2;
//异或
NUM3 := NUM1 XOR NUM2;
//非
NUM1 := NOT NUM2;
//上升沿
PLS0(xExecute := NUM1 , xOut=> );
IF PLS0.xOut THEN
	NUM3 := TRUE;
END_IF
//下降沿
PLF0(xExecute := NUM1 , xOut=> );
IF PLF0.xOut THEN
	NUM3 := TRUE;
END_IF
//接通延时定时器
TON_0(IN := b_Enable , PT := T0_PT , 
	  Q => b_Out , ET => T0_ET);
//计数器
CTU_0(
	CU := xCU,
	RESET := xRESET,
	PV := wPV,
	Q => xQ,
	CV => wCV
	);
CASE CTU_0.CV OF
	1 : NUM1 := TRUE;
	2 : NUM2 := TRUE;
	3 : NUM3 := TRUE;
ELSE
	NUM1 := TRUE;
	NUM2 := TRUE;
	NUM3 := TRUE;
END_CASE

谢谢大家~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值