今天在家清理電腦,在硬碟中找到了2014年剛畢業那會用 OtoStudio(CoDeSys)寫的一個三軸運動控制模拟程式。
概述
代碼設計:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cGcq5CO0MTOyQjN2kTN1QTO0cTZyYzXxIjMzETMxAzLchDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.jpg)
界面設計:
界面
有下面幾個界面:
效果
【登陸過程】
【控制過程】
代碼
PLC_PRG
PROGRAM PLC_PRG
VAR
checking: BOOL; (*密碼檢驗結果*)
warning:BOOL; (*報警狀态*)
normal:BOOL := TRUE; (*系統狀态*)
PwdWarning:BOOL:=TRUE; (*密碼錯誤提示*)
InitOK:BOOL; (*初始化成功與否标志*)
(*定義系統各種極限值*)
PosMin_N:INT := -250; (*負限位最小值*)
PosMax_N:INT := -200; (*負限位最大值*)
PosMin_P:INT := 200; (*正限位最小值*)
PosMax_P:INT := 250; (*正限位最大值*)
SpeedMin:INT := 0; (*速度最小值*)
SpeedMax:INT := 6000; (*速度最大值*)
SpeedRTZ:INT := 5400; (*回零速度*)
DisplacementMin:INT := 0; (*點動位移量最小值*)
DisplacementMax:INT := 10; (*點動位移量最大值*)
Speed:REAL := 0; (*移動速度*)
Displacement:REAL := 0; (*點動位移*)
StartOK: BOOL;
CheckLimit: LIMIT_CHECK;
LEDAxisX:BOOL; (*X軸狀态訓示*)
LEDAxisY:BOOL; (*Y軸狀态訓示*)
LEDAxisZ:BOOL; (*Z軸狀态訓示*)
LEDHandMove:BOOL; (*手動方式狀态訓示*)
LEDClickMove:BOOL; (*點動方式狀态訓示*)
LEDRetToZero:BOOL; (*回零方式狀态訓示*)
AlarmType: INT; (*記錄報警狀态*)
RTZ_retain: BOOL; (*記錄回零狀态*)
HandP_TON: TON;
HandN_TON: TON;
MH_OFF: BOOL;
MH_ON: BOOL;
RTZ_TON: TON;
normal2: BOOL; (*顯示故障清除情況*)
LimitStatus: BOOL; (*記錄是否有超出限位的情況,保留使用*)
CheckPwd: BOOL; (*密碼輸入确定按鈕下降沿觸發*)
(*按鍵下降沿觸發處理*)
SBAxisX_FT: F_TRIG;
SBAxisY_FT: F_TRIG;
SBAxisZ_FT: F_TRIG;
SBClickMove_FT: F_TRIG;
SBHandMove_FT: F_TRIG;
SBRetToZero_FT: F_TRIG;
Positive_RT: R_TRIG;
Negative_RT: R_TRIG;
PwdButton_FT: F_TRIG;
WarningBtn_FT: F_TRIG;
END_VAR
VAR_INPUT
PwdButton: BOOL; (*輸入密碼确定按鈕*)
WarningBtn:BOOL; (*報警框确定按鈕*)
start: BOOL; (*上電按鈕*)
stop:BOOL; (*急停按鈕*)
SBHandMove:BOOL; (*手動方式按鈕*)
SBClickMove:BOOL; (*點動方式按鈕*)
SBRetToZero:BOOL; (*回零方式按鈕*)
SBAxisX:BOOL; (*X軸使能按鈕*)
SBAxisY:BOOL; (*X軸使能按鈕*)
SBAxisZ:BOOL; (*X軸使能按鈕*)
positive:BOOL; (*正向運動按鈕*)
negative:BOOL; (*負向運動按鈕*)
password: STRING(16) := ' '; (*記錄登陸密碼*)
AlarmInfo:STRING(80) := 'Everybody up !'; (*記錄報警資訊*)
END_VAR
VAR_OUTPUT
END_VAR