代码执行顺序
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 是暂停的毫秒数。
我是一名 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 是暂停的毫秒数。