Python 2.7-如何访问和控制浮点控制字

Python 2.7-如何访问和控制浮点控制字,python,dll,com,Python,Dll,Com,我正在使用Python2.7通过一个COM DLL来控制OpenDSS,一个电源模拟软件。我遇到的问题似乎与COM DLL接口覆盖的浮点控制字有关 我可以在独立版本的OpenDSS中执行电路的解算,但是当试图通过COM DLL执行时,解算执行的精度将丢失 我正在使用win32com.client下的Dispatch函数,如下所示: self.dss=调度(“OpenDSSEngine.dss”) 建立连接后,OpenDSS具有一些内置功能,可以在不同级别访问它- self.dss.Text、se

我正在使用Python2.7通过一个COM DLL来控制OpenDSS,一个电源模拟软件。我遇到的问题似乎与COM DLL接口覆盖的浮点控制字有关

我可以在独立版本的OpenDSS中执行电路的解算,但是当试图通过COM DLL执行时,解算执行的精度将丢失

我正在使用win32com.client下的Dispatch函数,如下所示: self.dss=调度(“OpenDSSEngine.dss”)

建立连接后,OpenDSS具有一些内置功能,可以在不同级别访问它- self.dss.Text、self.dss.ActiveCircuit、self.dss.ActiveCircuit.ActiveCktElement、self.dss.ActiveCircuit.Solution

然后将给定电路加载到软件中,并使用以下方法进行编译: self.dss.Text.Command=r“Compile'”+电路路径+电路文件

**请注意,此初始编译似乎可以正确求解

在通过以下方式对电路进行任何更改后,使用后续的solve命令会出现错误: self.dss.ActiveCircuit.Solution.Solve()

OpenDSS的创建者在询问时表示,使用MATLAB控制软件时,FPCW也出现了类似的问题。显然,电阻值非常小的开关会产生非常高的不准确电流。这似乎意味着电压值除以非常小的电阻值,并且由于FPCW中的精度不足,软件认为它已达到可接受的解决方案,即使产生的电流不准确

如何访问Python中FPCW的值?我如何控制它以达到所需的精度

*编辑:

我在Delphi中发现了以下讨论类似问题的帖子-

有人知道Set8087CW()函数的Python等价物是什么吗

干杯,
Chris

如果看不到代码,很难猜出这里出了什么问题。我最好的猜测是Python/C++接口将double描述为浮点,或者可能将double描述为int是错误的。如果使用
ctypes
,请再次检查类型。如何调用DLL?您是否使用了正确的调用约定?我已经在上面详细阐述了,我仍然不知道如何从COM DLL将浮点数返回到python中。您的函数返回什么类型,以及如何将其转换为python对象?有关Python浮点运算的一些背景知识,请参阅。这不是我要找的特定数字,引用的Solve()函数通过前面的compile命令求解加载到软件中的电路模型。通过这种方式,我可以更改电路中的条件,运行Solve(),然后通过内置功能访问电路的更新属性。问题在于Solve()命令求解电路的精度与单机版OpenDSS.exe程序的精度不同。这是由于通过COM接口更改了FPCW。您如何知道部分浮点数(您称之为FPCW)正在更改?在转换过程中,可能更容易丢失精度,例如从双到浮或双到文本字符串,或者在C++和Python之间。