编码器字.BoolData[0]:=棕色;
编码器字.BoolData[1]:=橙色;
编码器字.BoolData[2]:=黄色;
编码器字.BoolData[3]:=绿色;
编码器字.BoolData[4]:=蓝色;
编码器字.BoolData[5]:=紫色;
编码器字.BoolData[6]:=灰色;
编码器字.BoolData[7]:=白色;//256到7,360到8
编码器字.BoolData[8]:=粉色;//360编码器输入
脉冲命令(Clk:=初始校正);//初始校正脉冲
CASE 编码器选择 OF
360:
初始校正后角度:=Gray(编码器字.wordData,_R360,UINT#76,UINT#0);//格雷码转换值
当前角度L:=Gray(编码器字.wordData,_R360,UINT#76,初始校正后角度UINT);//经过初始校正后转换值
IF 脉冲命令.Q =TRUE THEN;
初始校正后角度UINT:=LREAL_TO_UINT(初始校正后角度);//初始校正角度寄存
END_IF;
IF 角度取反 = TRUE THEN ;//角度取正
编码器角度:= UDINT#10*LREAL_TO_UDINT(当前角度L);
ELSE;//角度取反
编码器角度:=UDINT#10*(UDINT#360-LREAL_TO_UDINT(当前角度L));
END_IF;
256://256编码器
当前角度L2:=Gray(编码器字.wordData,_R256,UINT#0,UINT#0);
Angle_1:=UDINT#10*LREAL_TO_UDINT(当前角度L2);
IF 角度取反 = TRUE THEN;//角度取正
编码器实际位置:=Angle_1;
ELSE;//角度取反
编码器实际位置:=UDINT#3590-Angle_1;
END_IF;
IF 脉冲命令.Q =TRUE THEN;
编码器零位:=编码器实际位置;//初始校正寄存器
END_IF;
IF 编码器实际位置<编码器零位 THEN;
编码器角度:=编码器实际位置+UDINT#3590-编码器零位;
END_IF;
IF 编码器实际位置>=编码器零位 THEN;
编码器角度:=编码器实际位置-编码器零位;
END_IF;
END_CASE;