我设法解决了将所有内容声明为对象然后使用 createobject 的问题。这样做的主要问题是使用函数,比如这个:我有函数“arcValue”。它需要三个参数:arcValue(TimeStamp as PITimeFormat, Mode as RetrieveTypeConstants, Optional asynchStatus as PIAyncnStatus) 我使用它进行早期绑定的方式是:
dim pt as PIPoint
dim pv as PIValue
set pv = pt.data.arcValue("01/09/2014 17:00:00", rtInterpolated)
这行得通。但是当我这样做时:
Dim myPISDK As Object
Dim srv As Object
Dim pt As Object
Dim pd as Object
Dim pv as Object
Set myPISDK = CreateObject("PISDK.PISDK")
Set pv = CreateObject("PISDK.PIValue")
Set srv = myPISDK.Servers.defaultserver
Set pd = pt.DATA
Set pt = srv.PIPoints("piTAG")
Set pv = pd.ArcValue("01/09/2014 17:00:00", rtInterpolated)
它不起作用。但为什么?有两个问题:首先:当我使用后期绑定(createobject)时,我无法访问“rtInterpolated”常量,所以我必须使用它的等效数字。
Set pv = pd.ArcValue("01/09/2014 17:00:00", 3)
但这仍然行不通。所以我必须这样做才能使它工作:
Set pv = pd.ArcValue("01/09/2014 17:00:00", 3, Nothing)
然后一切都开始工作了。我不知道为什么,但 VBA 让我写一些东西做所有参数,即使它们是可选的。
这样,我能够在运行时检测到错误,所以我使用了这段代码:
If myPISDK Is Nothing Then
piVerified = "Erro PI"
Exit Function
End If
此外,我不得不删除所有引用(无论如何它们不再使用),因为当引用丢失时,它会导致与此代码无关的其他部分出现故障。