代码执行顺序

Code Execution Sequence

我是一名 PLC 程序员,目前正在使用 VB 的变体来控制电机。

我想调用一个函数来执行移动,而不是 return 到主代码,直到移动完成。目前这是我所拥有的:

Program  'Main Program
   While 1
      If move_req = 1
         Function MoveMotor
      End If 
   Wend
End Program

Function MoveMotor
   MoveABS 10  ' Move to encoder position 10mm
   move_complete = 1
   While move_req = 1
      'Do Nothing
   Wend
End Function

出于某种原因,此代码无法正常工作,并且一遍又一遍地发送移动命令。难道是因为主程序在函数运行ning时继续运行? VB 是这样的吗?我习惯于从 PLC 的角度来思考代码序列,它们以一定的频率重复扫描所有内容。

只要移动完成,程序就必须有办法检测到它。看起来您希望在发生这种情况时将 move_req 设置为零,但我看不出是什么原因造成的。机器如何向程序发出移动完成的信号?

第二点是,当您有一个循环在检查变量变化时等待,它可能会导致 CPU 尖峰。您可以使用 System.Threading.Thread.Sleep(100) 之类的东西在循环中暂停,其中 100 是暂停的毫秒数。