編碼器字.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;