trig_Start(CLK:=In_b_Start,Q=>);
CASE ui_loop OF
0:
IF trig_Start.Q
THEN
ui_loop:=10;
END_IF
10:
Out_b_Done R= TRUE;
Out_b_Error R= TRUE;
Out_str := 'null';
IF NOT Out_b_Done AND
NOT Out_b_Error AND
Out_str='null'
THEN
ui_loop:=100;
END_IF
100:
lr_LAB:=SQRT((In_lr_Start_X-In_lr_End_X)*(In_lr_Start_X-In_lr_End_X)+(In_lr_Start_Y-In_lr_End_Y)*(In_lr_Start_Y-In_lr_End_Y));
IF lr_LAB>(2*In_lr_Radius)
THEN
Out_str:='01:The length of two points is greater than the diameter';
Out_b_Error S= TRUE;
Out_b_Done S= TRUE;
ui_loop:=0;
ELSE
ui_loop:=200;
END_IF
200:
IF lr_LAB<=0
THEN
Out_str:='02:The length OF two points is equal TO 0';
Out_b_Error S= TRUE;
Out_b_Done S= TRUE;
ui_loop:=0;
ELSE
ui_loop:=10000;
END_IF
10000:
lr_LAB:=SQRT((In_lr_Start_X-In_lr_End_X)*(In_lr_Start_X-In_lr_End_X)+(In_lr_Start_Y-In_lr_End_Y)*(In_lr_Start_Y-In_lr_End_Y));
ui_loop:=10100;
10100:
lr_Sin:=(In_lr_End_Y-In_lr_Start_Y)/lr_LAB;
lr_Cos:=(In_lr_End_X-In_lr_Start_X)/lr_LAB;
ui_loop:=10200;
10200:
lr_Center_Mon_X:=lr_LAB/2;
lr_Center_Mon_YP:=SQRT(In_lr_Radius*In_lr_Radius-lr_Center_Mon_X*lr_Center_Mon_X);
lr_Center_Mon_YN:=-SQRT(In_lr_Radius*In_lr_Radius-lr_Center_Mon_X*lr_Center_Mon_X);
ui_loop:=10300;
10300:
lr_Center_AZero_XP:=lr_Center_Mon_X*lr_Cos-lr_Center_Mon_YP*lr_Sin;
lr_Center_AZero_XN:=lr_Center_Mon_X*lr_Cos-lr_Center_Mon_YN*lr_Sin;
lr_Center_AZero_YP:=lr_Center_Mon_X*lr_Sin+lr_Center_Mon_YP*lr_Cos;
lr_Center_AZero_YN:=lr_Center_Mon_X*lr_Sin+lr_Center_Mon_YN*lr_Cos;
ui_loop:=10400;
10400:
lr_Center_XP:=lr_Center_AZero_XP+In_lr_Start_X;
lr_Center_YP:=lr_Center_AZero_YP+In_lr_Start_Y;
lr_Center_XN:=lr_Center_AZero_XN+In_lr_Start_X;
lr_Center_YN:=lr_Center_AZero_YN+In_lr_Start_Y;
ui_loop:=11000;
11000:
lr_AO_P:=SQRT((In_lr_Start_X-lr_Center_XP)*(In_lr_Start_X-lr_Center_XP)+(In_lr_Start_Y-lr_Center_YP)*(In_lr_Start_Y-lr_Center_YP));
lr_BO_P:=SQRT((In_lr_End_X-lr_Center_XP)*(In_lr_End_X-lr_Center_XP)+(In_lr_End_Y-lr_Center_YP)*(In_lr_End_Y-lr_Center_YP));
lr_AO_N:=SQRT((In_lr_Start_X-lr_Center_XN)*(In_lr_Start_X-lr_Center_XN)+(In_lr_Start_Y-lr_Center_YN)*(In_lr_Start_Y-lr_Center_YN));
lr_BO_N:=SQRT((In_lr_End_X-lr_Center_XN)*(In_lr_End_X-lr_Center_XN)+(In_lr_End_Y-lr_Center_YN)*(In_lr_End_Y-lr_Center_YN));
ui_loop:=11100;
11100:
IF lr_AO_P>=(In_lr_Radius-0.0001) AND
lr_AO_P<=(In_lr_Radius+0.0001) AND
lr_AO_N>=(In_lr_Radius-0.0001) AND
lr_AO_N<=(In_lr_Radius+0.0001) AND
lr_BO_P>=(In_lr_Radius-0.0001) AND
lr_BO_P<=(In_lr_Radius+0.0001) AND
lr_BO_N>=(In_lr_Radius-0.0001) AND
lr_BO_N<=(In_lr_Radius+0.0001)
THEN
ui_loop:=20000;
ELSE
Out_str:='The distance from two points to the center of the circle is not equal';
Out_b_Error S= TRUE;
Out_b_Done S= TRUE;
ui_loop:=0;
END_IF
20000:
lr_Center_Start_norm:=SQRT((In_lr_Start_X-lr_Center_XP)*(In_lr_Start_X-lr_Center_XP)+(In_lr_Start_Y-lr_Center_YP)*(In_lr_Start_Y-lr_Center_YP));
lr_Center_End_norm:=SQRT((In_lr_End_X-lr_Center_XP)*(In_lr_End_X-lr_Center_XP)+(In_lr_End_Y-lr_Center_YP)*(In_lr_End_Y-lr_Center_YP));
ui_loop:=20100;
20100:
lr_Quantityproduct_CS_CE:=((In_lr_Start_X-lr_Center_XP)*(In_lr_End_X-lr_Center_XP)+(In_lr_Start_Y-lr_Center_YP)*(In_lr_End_Y-lr_Center_YP));
ui_loop:=20200;
20200:
IF (lr_Center_Start_norm*lr_Center_End_norm)<>0
THEN
lr_Radian_CS_CE:=ACOS(lr_Quantityproduct_CS_CE/(lr_Center_Start_norm*lr_Center_End_norm));
ELSE
Out_str:='04:One norm is zero';
Out_b_Error S= TRUE;
Out_b_Done S= TRUE;
lr_Radian_CS_CE:=0;
ui_loop:=0;
END_IF
ui_loop:=20300;
20300:
IF lr_Radian_CS_CE>=lr_Pi-0.0001 AND
lr_Radian_CS_CE<=lr_Pi+0.0001
THEN
ui_loop:=30000;
ELSE
ui_loop:=40000;
END_IF
30000:
Out_lr_Center_X:=lr_Center_XP;
Out_lr_Center_Y:=lr_Center_YP;
Out_lr_Radian:=lr_Radian_CS_CE;
ui_loop:=60000;
40000:
IF In_lr_Start_Y=In_lr_End_Y AND
In_lr_Start_X<In_lr_End_X
THEN
IF lr_Center_YP>In_lr_Start_Y
THEN
IF In_b_Dir
THEN
IF NOT In_b_Inferior_Major_Arc
THEN
Out_lr_Center_X:=lr_Center_XN;
Out_lr_Center_Y:=lr_Center_YN;
Out_lr_Radian:=lr_Radian_CS_CE;
ELSE
Out_lr_Center_X:=lr_Center_XP;
Out_lr_Center_Y:=lr_Center_YP;
Out_lr_Radian:=2*lr_Pi-lr_Radian_CS_CE;
END_IF
ELSE
IF NOT In_b_Inferior_Major_Arc
THEN
Out_lr_Center_X:=lr_Center_XP;
Out_lr_Center_Y:=lr_Center_YP;
Out_lr_Radian:=lr_Radian_CS_CE;
ELSE
Out_lr_Center_X:=lr_Center_XN;
Out_lr_Center_Y:=lr_Center_YN;
Out_lr_Radian:=2*lr_Pi-lr_Radian_CS_CE;
END_IF
END_IF
ELSE
IF In_b_Dir
THEN
IF NOT In_b_Inferior_Major_Arc
THEN
Out_lr_Center_X:=lr_Center_XP;
Out_lr_Center_Y:=lr_Center_YP;
Out_lr_Radian:=lr_Radian_CS_CE;
ELSE
Out_lr_Center_X:=lr_Center_XN;
Out_lr_Center_Y:=lr_Center_YN;
Out_lr_Radian:=2*lr_Pi-lr_Radian_CS_CE;
END_IF
ELSE
IF NOT In_b_Inferior_Major_Arc
THEN
Out_lr_Center_X:=lr_Center_XN;
Out_lr_Center_Y:=lr_Center_YN;
Out_lr_Radian:=lr_Radian_CS_CE;
ELSE
Out_lr_Center_X:=lr_Center_XP;
Out_lr_Center_Y:=lr_Center_YP;
Out_lr_Radian:=2*lr_Pi-lr_Radian_CS_CE;
END_IF
END_IF
END_IF
END_IF
IF In_lr_Start_Y=In_lr_End_Y AND
In_lr_Start_X>In_lr_End_X
THEN
IF lr_Center_YP>In_lr_Start_Y
THEN
IF In_b_Dir
THEN
IF NOT In_b_Inferior_Major_Arc
THEN
Out_lr_Center_X:=lr_Center_XP;
Out_lr_Center_Y:=lr_Center_YP;
Out_lr_Radian:=lr_Radian_CS_CE;
ELSE
Out_lr_Center_X:=lr_Center_XN;
Out_lr_Center_Y:=lr_Center_YN;
Out_lr_Radian:=2*lr_Pi-lr_Radian_CS_CE;
END_IF
ELSE
IF NOT In_b_Inferior_Major_Arc
THEN
Out_lr_Center_X:=lr_Center_XN;
Out_lr_Center_Y:=lr_Center_YN;
Out_lr_Radian:=lr_Radian_CS_CE;
ELSE
Out_lr_Center_X:=lr_Center_XP;
Out_lr_Center_Y:=lr_Center_YP;
Out_lr_Radian:=2*lr_Pi-lr_Radian_CS_CE;
END_IF
END_IF
ELSE
IF In_b_Dir
THEN
IF NOT In_b_Inferior_Major_Arc
THEN
Out_lr_Center_X:=lr_Center_XN;
Out_lr_Center_Y:=lr_Center_YN;
Out_lr_Radian:=lr_Radian_CS_CE;
ELSE
Out_lr_Center_X:=lr_Center_XP;
Out_lr_Center_Y:=lr_Center_YP;
Out_lr_Radian:=2*lr_Pi-lr_Radian_CS_CE;
END_IF
ELSE
IF NOT In_b_Inferior_Major_Arc
THEN
Out_lr_Center_X:=lr_Center_XP;
Out_lr_Center_Y:=lr_Center_YP;
Out_lr_Radian:=lr_Radian_CS_CE;
ELSE
Out_lr_Center_X:=lr_Center_XN;
Out_lr_Center_Y:=lr_Center_YN;
Out_lr_Radian:=2*lr_Pi-lr_Radian_CS_CE;
END_IF
END_IF
END_IF
END_IF
IF In_lr_Start_X=In_lr_End_X AND
In_lr_Start_Y<In_lr_End_Y
THEN
IF lr_Center_XP>In_lr_Start_X
THEN
IF In_b_Dir
THEN
IF NOT In_b_Inferior_Major_Arc
THEN
Out_lr_Center_X:=lr_Center_XP;
Out_lr_Center_Y:=lr_Center_YP;
Out_lr_Radian:=lr_Radian_CS_CE;
ELSE
Out_lr_Center_X:=lr_Center_XN;
Out_lr_Center_Y:=lr_Center_YN;
Out_lr_Radian:=2*lr_Pi-lr_Radian_CS_CE;
END_IF
ELSE
IF NOT In_b_Inferior_Major_Arc
THEN
Out_lr_Center_X:=lr_Center_XN;
Out_lr_Center_Y:=lr_Center_YN;
Out_lr_Radian:=lr_Radian_CS_CE;
ELSE
Out_lr_Center_X:=lr_Center_XP;
Out_lr_Center_Y:=lr_Center_YP;
Out_lr_Radian:=2*lr_Pi-lr_Radian_CS_CE;
END_IF
END_IF
ELSE
IF In_b_Dir
THEN
IF NOT In_b_Inferior_Major_Arc
THEN
Out_lr_Center_X:=lr_Center_XN;
Out_lr_Center_Y:=lr_Center_YN;
Out_lr_Radian:=lr_Radian_CS_CE;
ELSE
Out_lr_Center_X:=lr_Center_XP;
Out_lr_Center_Y:=lr_Center_YP;
Out_lr_Radian:=2*lr_Pi-lr_Radian_CS_CE;
END_IF
ELSE
IF NOT In_b_Inferior_Major_Arc
THEN
Out_lr_Center_X:=lr_Center_XP;
Out_lr_Center_Y:=lr_Center_YP;
Out_lr_Radian:=lr_Radian_CS_CE;
ELSE
Out_lr_Center_X:=lr_Center_XN;
Out_lr_Center_Y:=lr_Center_YN;
Out_lr_Radian:=2*lr_Pi-lr_Radian_CS_CE;
END_IF
END_IF
END_IF
END_IF
IF In_lr_Start_X=In_lr_End_X AND
In_lr_Start_Y>In_lr_End_Y
THEN
IF lr_Center_XP>In_lr_Start_X
THEN
IF In_b_Dir
THEN
IF NOT In_b_Inferior_Major_Arc
THEN
Out_lr_Center_X:=lr_Center_XN;
Out_lr_Center_Y:=lr_Center_YN;
Out_lr_Radian:=lr_Radian_CS_CE;
ELSE
Out_lr_Center_X:=lr_Center_XP;
Out_lr_Center_Y:=lr_Center_YP;
Out_lr_Radian:=2*lr_Pi-lr_Radian_CS_CE;
END_IF
ELSE
IF NOT In_b_Inferior_Major_Arc
THEN
Out_lr_Center_X:=lr_Center_XP;
Out_lr_Center_Y:=lr_Center_YP;
Out_lr_Radian:=lr_Radian_CS_CE;
ELSE
Out_lr_Center_X:=lr_Center_XN;
Out_lr_Center_Y:=lr_Center_YN;
Out_lr_Radian:=2*lr_Pi-lr_Radian_CS_CE;
END_IF
END_IF
ELSE
IF In_b_Dir
THEN
IF NOT In_b_Inferior_Major_Arc
THEN
Out_lr_Center_X:=lr_Center_XP;
Out_lr_Center_Y:=lr_Center_YP;
Out_lr_Radian:=lr_Radian_CS_CE;
ELSE
Out_lr_Center_X:=lr_Center_XN;
Out_lr_Center_Y:=lr_Center_YN;
Out_lr_Radian:=2*lr_Pi-lr_Radian_CS_CE;
END_IF
ELSE
IF NOT In_b_Inferior_Major_Arc
THEN
Out_lr_Center_X:=lr_Center_XN;
Out_lr_Center_Y:=lr_Center_YN;
Out_lr_Radian:=lr_Radian_CS_CE;
ELSE
Out_lr_Center_X:=lr_Center_XP;
Out_lr_Center_Y:=lr_Center_YP;
Out_lr_Radian:=2*lr_Pi-lr_Radian_CS_CE;
END_IF
END_IF
END_IF
END_IF
IF In_lr_Start_X<>In_lr_End_X AND
In_lr_Start_Y<>In_lr_End_Y
THEN
lr_KSE:=(In_lr_Start_Y-In_lr_End_Y)/(In_lr_Start_X-In_lr_End_X);
IF (In_lr_End_X>In_lr_Start_X) AND
(In_lr_End_Y>In_lr_Start_Y)
THEN
IF (lr_Center_YP-In_lr_Start_Y)>(lr_KSE*(lr_Center_XP-In_lr_Start_X))
THEN
IF In_b_Dir
THEN
IF NOT In_b_Inferior_Major_Arc
THEN
Out_lr_Center_X:=lr_Center_XN;
Out_lr_Center_Y:=lr_Center_YN;
Out_lr_Radian:=lr_Radian_CS_CE;
ELSE
Out_lr_Center_X:=lr_Center_XP;
Out_lr_Center_Y:=lr_Center_YP;
Out_lr_Radian:=2*lr_Pi-lr_Radian_CS_CE;
END_IF
ELSE
IF NOT In_b_Inferior_Major_Arc
THEN
Out_lr_Center_X:=lr_Center_XP;
Out_lr_Center_Y:=lr_Center_YP;
Out_lr_Radian:=lr_Radian_CS_CE;
ELSE
Out_lr_Center_X:=lr_Center_XN;
Out_lr_Center_Y:=lr_Center_YN;
Out_lr_Radian:=2*lr_Pi-lr_Radian_CS_CE;
END_IF
END_IF
ELSE
IF In_b_Dir
THEN
IF NOT In_b_Inferior_Major_Arc
THEN
Out_lr_Center_X:=lr_Center_XP;
Out_lr_Center_Y:=lr_Center_YP;
Out_lr_Radian:=lr_Radian_CS_CE;
ELSE
Out_lr_Center_X:=lr_Center_XN;
Out_lr_Center_Y:=lr_Center_YN;
Out_lr_Radian:=2*lr_Pi-lr_Radian_CS_CE;
END_IF
ELSE
IF NOT In_b_Inferior_Major_Arc
THEN
Out_lr_Center_X:=lr_Center_XN;
Out_lr_Center_Y:=lr_Center_YN;
Out_lr_Radian:=lr_Radian_CS_CE;
ELSE
Out_lr_Center_X:=lr_Center_XP;
Out_lr_Center_Y:=lr_Center_YP;
Out_lr_Radian:=2*lr_Pi-lr_Radian_CS_CE;
END_IF
END_IF
END_IF
END_IF
IF (In_lr_End_X<In_lr_Start_X) AND
(In_lr_End_Y>In_lr_Start_Y)
THEN
IF (lr_Center_YP-In_lr_Start_Y)>(lr_KSE*(lr_Center_XP-In_lr_Start_X))
THEN
IF In_b_Dir
THEN
IF NOT In_b_Inferior_Major_Arc
THEN
Out_lr_Center_X:=lr_Center_XP;
Out_lr_Center_Y:=lr_Center_YP;
Out_lr_Radian:=lr_Radian_CS_CE;
ELSE
Out_lr_Center_X:=lr_Center_XN;
Out_lr_Center_Y:=lr_Center_YN;
Out_lr_Radian:=2*lr_Pi-lr_Radian_CS_CE;
END_IF
ELSE
IF NOT In_b_Inferior_Major_Arc
THEN
Out_lr_Center_X:=lr_Center_XN;
Out_lr_Center_Y:=lr_Center_YN;
Out_lr_Radian:=lr_Radian_CS_CE;
ELSE
Out_lr_Center_X:=lr_Center_XP;
Out_lr_Center_Y:=lr_Center_YP;
Out_lr_Radian:=2*lr_Pi-lr_Radian_CS_CE;
END_IF
END_IF
ELSE
IF In_b_Dir
THEN
IF NOT In_b_Inferior_Major_Arc
THEN
Out_lr_Center_X:=lr_Center_XN;
Out_lr_Center_Y:=lr_Center_YN;
Out_lr_Radian:=lr_Radian_CS_CE;
ELSE
Out_lr_Center_X:=lr_Center_XP;
Out_lr_Center_Y:=lr_Center_YP;
Out_lr_Radian:=2*lr_Pi-lr_Radian_CS_CE;
END_IF
ELSE
IF NOT In_b_Inferior_Major_Arc
THEN
Out_lr_Center_X:=lr_Center_XP;
Out_lr_Center_Y:=lr_Center_YP;
Out_lr_Radian:=lr_Radian_CS_CE;
ELSE
Out_lr_Center_X:=lr_Center_XN;
Out_lr_Center_Y:=lr_Center_YN;
Out_lr_Radian:=2*lr_Pi-lr_Radian_CS_CE;
END_IF
END_IF
END_IF
END_IF
IF (In_lr_End_X<In_lr_Start_X) AND
(In_lr_End_Y<In_lr_Start_Y)
THEN
IF (lr_Center_YP-In_lr_Start_Y)>(lr_KSE*(lr_Center_XP-In_lr_Start_X))
THEN
IF In_b_Dir
THEN
IF NOT In_b_Inferior_Major_Arc
THEN
Out_lr_Center_X:=lr_Center_XP;
Out_lr_Center_Y:=lr_Center_YP;
Out_lr_Radian:=lr_Radian_CS_CE;
ELSE
Out_lr_Center_X:=lr_Center_XN;
Out_lr_Center_Y:=lr_Center_YN;
Out_lr_Radian:=2*lr_Pi-lr_Radian_CS_CE;
END_IF
ELSE
IF NOT In_b_Inferior_Major_Arc
THEN
Out_lr_Center_X:=lr_Center_XN;
Out_lr_Center_Y:=lr_Center_YN;
Out_lr_Radian:=lr_Radian_CS_CE;
ELSE
Out_lr_Center_X:=lr_Center_XP;
Out_lr_Center_Y:=lr_Center_YP;
Out_lr_Radian:=2*lr_Pi-lr_Radian_CS_CE;
END_IF
END_IF
ELSE
IF In_b_Dir
THEN
IF NOT In_b_Inferior_Major_Arc
THEN
Out_lr_Center_X:=lr_Center_XN;
Out_lr_Center_Y:=lr_Center_YN;
Out_lr_Radian:=lr_Radian_CS_CE;
ELSE
Out_lr_Center_X:=lr_Center_XP;
Out_lr_Center_Y:=lr_Center_YP;
Out_lr_Radian:=2*lr_Pi-lr_Radian_CS_CE;
END_IF
ELSE
IF NOT In_b_Inferior_Major_Arc
THEN
Out_lr_Center_X:=lr_Center_XP;
Out_lr_Center_Y:=lr_Center_YP;
Out_lr_Radian:=lr_Radian_CS_CE;
ELSE
Out_lr_Center_X:=lr_Center_XN;
Out_lr_Center_Y:=lr_Center_YN;
Out_lr_Radian:=2*lr_Pi-lr_Radian_CS_CE;
END_IF
END_IF
END_IF
END_IF
IF (In_lr_End_X>In_lr_Start_X) AND
(In_lr_End_Y<In_lr_Start_Y)
THEN
IF (lr_Center_YP-In_lr_Start_Y)>(lr_KSE*(lr_Center_XP-In_lr_Start_X))
THEN
IF In_b_Dir
THEN
IF NOT In_b_Inferior_Major_Arc
THEN
Out_lr_Center_X:=lr_Center_XN;
Out_lr_Center_Y:=lr_Center_YN;
Out_lr_Radian:=lr_Radian_CS_CE;
ELSE
Out_lr_Center_X:=lr_Center_XP;
Out_lr_Center_Y:=lr_Center_YP;
Out_lr_Radian:=2*lr_Pi-lr_Radian_CS_CE;
END_IF
ELSE
IF NOT In_b_Inferior_Major_Arc
THEN
Out_lr_Center_X:=lr_Center_XP;
Out_lr_Center_Y:=lr_Center_YP;
Out_lr_Radian:=lr_Radian_CS_CE;
ELSE
Out_lr_Center_X:=lr_Center_XN;
Out_lr_Center_Y:=lr_Center_YN;
Out_lr_Radian:=2*lr_Pi-lr_Radian_CS_CE;
END_IF
END_IF
ELSE
IF In_b_Dir
THEN
IF NOT In_b_Inferior_Major_Arc
THEN
Out_lr_Center_X:=lr_Center_XP;
Out_lr_Center_Y:=lr_Center_YP;
Out_lr_Radian:=lr_Radian_CS_CE;
ELSE
Out_lr_Center_X:=lr_Center_XN;
Out_lr_Center_Y:=lr_Center_YN;
Out_lr_Radian:=2*lr_Pi-lr_Radian_CS_CE;
END_IF
ELSE
IF NOT In_b_Inferior_Major_Arc
THEN
Out_lr_Center_X:=lr_Center_XN;
Out_lr_Center_Y:=lr_Center_YN;
Out_lr_Radian:=lr_Radian_CS_CE;
ELSE
Out_lr_Center_X:=lr_Center_XP;
Out_lr_Center_Y:=lr_Center_YP;
Out_lr_Radian:=2*lr_Pi-lr_Radian_CS_CE;
END_IF
END_IF
END_IF
END_IF
END_IF
ui_loop:=60000;
60000:
Out_lr_Degrees:=(Out_lr_Radian/lr_Pi)*180;
Out_lr_Arc_Length:=Out_lr_Radian*In_lr_Radius;
Out_b_Done S= TRUE;
ui_loop:=0;
END_CASE