我正在尝试制作可以使用RefProp的dll和计算的Excel函数,并且成功有限。我有以下代码:
Public Function enthalpy(t, p)
Dim hRef As Double: Dim sRef As Double: Dim Tref As Double: Dim pref As Double
Dim nc2 As Long
Dim i As Integer
Dim xtemp(1 To MaxComps) As Double
hmxnme = "C:\Program Files (x86)\REFPROP\Mixtures\R404A.MIX"
hfmix = "C:\Program Files (x86)\REFPROP\fluids\hmx.bnc"
nc2 = 0
ierr = 0
herr = ""
For i = 1 To MaxComps: xtemp(i) = 0: Next
hRef = 0: sRef = 0: Tref = 0: pref = 0
Call SETMIXdll(hmxnme, hfmix, hrf, nc2, hfld, xtemp(1), ierr, herr, 255&, 255&, 3&, 10000&, 255&)
Call SETREFdll(hrf, 2&, x(1), hRef, sRef, Tref, pref, ierr2, herr2, 3&, 255&)
'Zero variables apart from T and P
q = 0: d = 0: Dl = 0: Dv = 0: e = 0: h = 0: s = 0: Cvcalc = 0: Cpcalc = 0: w = 0
nc = 3
For i = 1 To nc
xliq(i) = 0: xvap(i) = 0
Next
For i = 1 To 3: x(i) = xtemp(i): Next
Call TPFLSHdll(t, p, x(1), d, Dl, Dv, xliq(1), xvap(1), q, e, h, s, Cvcalc, Cpcalc, w, ierr, herr, 255&)
enthalpy = h / 97.6037985507645
End Function
它首次被调用时,但不是任何其他时间。除非我按下vba中的重置按钮然后再使用具有公式= enthalpy(278,1500)的单元格再次调用代码。我打印了发送到dll的参数,每次都是相同的。
从TPFLSHdll调用开始,无论多少次调用函数而没有复位,所有返回值(包括q)都始终相同。 e到w的值在我第一次调用函数时是正确的,然后是不正确的第二,第三,第四等等,但是它们保持不变。
我有其他功能使用类似的代码但不同的dll工作正常。如果使用所有相同的参数调用它,我无法完全看到如何从进程中获取不同的值,除非它链接到另一个值,该值仅在第一次运行时更改,然后保持不变,随后将计算结果抛出。这个神秘的值通过重置“清除”,所以我的功能再次起作用。
显然我希望它能够正常工作,因为没有必要尝试将某些东西自动循环数千次只需要每次都手动按下一个重置按钮,其次我觉得我做的是一个巨大的基础,明显我真的应该发现的错误。
我意识到我正在询问一个niché程序,但我知道错误必须出现在我输入的一行代码中,所以任何帮助都会非常感激。