在PLC的ST语言中atan2(y,x)函数的实现

本文介绍在PLC的ST语言中如何实现atan2(y,x)函数,该函数用于解决传统atan(x)函数角度范围限制的问题,确保算法能正确处理所有象限的情况。

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

        在plc中传统的atan(x)函数所得出的角度范围是[-pi/2,pi/2],而在我们的算法中需要得出大于九十度的值时就会出现错误。所以需要用到atan2(y,x)这个函数。atan2(y,x)所计算出来的结果范围是[2*pi,pi]。我将其写为ST中的function,其具体代码如下:

        变量声明:

FUNCTION atan2 : lREAL
VAR_INPUT
	
y:LREAL;		//  y
x:LREAL;		//  x
END_VAR
VAR
	state:INT;

	a1: LREAL;
	mid:lreal;
END_VAR

        内部逻辑:


// Version:2.0
IF (y>=0 AND x>0) THEN	// 1
	state:=1;
ELSIF (y>=0 AND x<0) THEN	// 2
	state:=2;
ELSIF (y<=0 AND x<0) THEN	//3
	state:=3;
ELSIF(y<=0 AND x>0) THEN	//4
	state:=4;
ELSIF y>0 AND x = 0 THEN
	state:=5;
ELSIF y<0 AND x = 0 THEN
	state:=6;
END_IF
 
CASE state OF
	1:
		atan2:=ATAN(y/x);
	2:
		mid:=ABS(y/x);
		atan2:=pi-ATAN(mid);
	3:
		mid:=ABS(y/x);
		atan2:=-pi+ATAN(mid);	
	4:
		atan2:=ATAN(y/x);
	5:
		atan2:=pi/2;	
	6:
		atan2:=-pi/2;	
END_CASE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值