我正在用Python实现COM,因为我必须在两个不同的软件(dSPACE HIL environment&Vector CANOE environment)之间进行交互。我的想法是在(CANOE)CAPL脚本中更改环境变量,并希望在事件发生时对dSPACE HIL执行一些操作。现在我还没有实现任何线索
(1)所以第一个问题是当我试图使用简单的睡眠来确保测试在CANOE中完成时,执行不会发生,因为python sleep阻塞了CANOE的执行,而且我还得到了pythoncom错误:每当环境变量发生变化时,调用COM方法的python错误。因此,只有在Python中的sleep结束后,CANOE才会开始执行,而且我在CANOE中看到以下弹出消息:Server busy。在
当我使用消息框时,也就是说,测试完成后,用户必须按下按钮。我想用其他机制(如睡眠)替换它。请告诉我如何解决此问题。我已将脚本粘贴在下面。在
class EnvironmentEvents:
def __init__ ( self ) :
print "Initializing Environment Event Class"
def OnChange ( self , value ) :
StopTestExecution = Value
print '% 3.2f' % StopTestExecution
print ( 'Environment Variable Value Changed' )
# # # # # # # # # # # # # # # # # # # INITIALIZE CONTROL DESK # # # # # # # # # # #
MyControlDeskHandler = Controldesk_Handler. CONTROLDESK_HANDLER ()
# # # # # # # # # # # # # # # # # # # INITIALIZE CANOE # # # # # # # # # # # # # #
MyCAN = Dispatch ( 'CANoe.Application' )
MyCANMeasurement = MyCAN. Measurement
MyCANEnvironment = MyCAN. Environment . GetVariable ( "env_COM_BatteryVoltage" )
My events = Dispatch WithEvents ( MyCANEnvironment , EnvironmentEvents )
Test Setup = MyCAN. Configuration . Test Setup
TestEnvs = test setup. Test Environments
Testenv = TestEnvs. Item ( 1 )
Testenv. ExecuteAll ( )
## Msgbox (0, "Test Completed", "info", 16) ## with a message box everything is working fine
while ( StopTestExecution > 0 ):
print '% 3.2f' % StopTestExecution
Sleep ( 500 )
在 在
我的想法是将CAPL中的事件变量值作为0发送,以停止执行,直到那时循环才停止是的。但是这不起作用。在
(2)第二个问题是当OnChange事件发生时,我想在dSPACE HIL控制台中更改一些东西。为此,我必须使用dSPACE提供的库。但问题是如何在Events类中访问这个库及其方法。我试图将dSPACE library对象和参数作为参数传递给类EnvironmentEvents,如下所示。现在我只是在全球范围内使用它,它运行得很好。但如果有更好的选择,我想避免它。在
^{pr2}$请帮我解决这些问题。如果你需要其他信息,请告诉我。在
{cdcom}处理消息时,{1}不需要处理消息。(
MessageBox
确实泵送消息,所以它可以工作。)这里的典型解决方案是使用}有适当的包装。在
MsgWaitForMultipleObjectsEx
和消息泵。显然pythoncom
和{^{} 需要一个句柄来等待;如果需要等待一个特定的时间,则最好创建一个可等待的计时器。奇怪的是,根据文件,}。希望这是一个文档错误。在
win32event
有{a2},但没有{无论如何,如果不需要特定的时间,可以使用^{} 创建一个win32事件。它可以是匿名事件;您只需要等待它。在OnChange处理程序中,可以设置事件。在
一旦你有活动,你可以等待。请原谅我的可怕的python;这是C语言的音译
相关问题 更多 >
编程相关推荐