Hello,
I've been write some code to access a PI system (OSI soft) database from Python
code and I keep running into a "Python instance can not be converted to a COM
object" error everytime I try to access a method on the PI COM objects.
Specifically, I followed the example from http://oracleabc.com/b/archives/2850
as :
importwin32com.clientimportpythoncomimporttime
pi_sdk
pi_time_start
=win32com.client.Dispatch('PISDK.PISDK')=win32com.client.Dispatch('PITimeServer.PITime')pi_time_end
=win32com.client.Dispatch('PITimeServer.PITime')win32com.client.Dispatch('PISDKCommon.NamedValues')pi_server
=pi_sdk.Servers('myservername')# PI server or collective name
pi_server.Open();pi_pt pi_data =pi_pt.Data;
print# This read only property returns the most recent value stored on the
server for the associated PIPoint as a PIValue object.pi_pt.Data.Snapshot();
>> 0.0756051763892
# PIData methods returns a reference to a single PIValue object from the
server for the associated PIPoint based on the passed time and mode. Accepts a
VT_BSTR argumentpi_data
> ---------------------------------------------------------------------------
> TypeError Traceback (most recent call last)
> file://pythonapplication1/%3Cipython-input-34-a8bfc6a08db7> in <module>()
> ----> 1 pi_data.ArcValue("10-JAN-2013 1:00:00.")
> C:\ProgramData\Python27\lib\site-packages\win32com\gen_py\0EE075CE-8C31-11D1-BD73-0060B0290178x0x1x1.pyc
> in > ArcValue(sel
> f, TimeStamp, Mode, asynchStatus)
> 8039 'Retrieve a single value from the server based on the
>input time and retrieval type.'
> 8040 ret = self._oleobj_.InvokeTypes(9, LCID, 1, (9, 0),
>((12, 1), (3, 1), (9, 49)),TimeStamp
> -> 8041 , Mode, asynchStatus)
> 8042 if ret is not None:
> 8043 ret = Dispatch(ret, u'ArcValue',
>'{F293A839-D998-11D3-853F-00C04F45D1DA}')
> TypeError: The Python instance can not be converted to a COM object
> > c:\programdata\python27\lib\site-packages\win32com\gen_py\0ee075ce-8c31-11d1-bd73-0060b0290178x0x1x1.py(8041)>
> > ArcValue(
> )
> 8040 ret = self._oleobj_.InvokeTypes(9, LCID, 1, (9, 0),
>((12, 1), (3, 1), (9, 49)),TimeStamp
> -> 8041 , Mode, asynchStatus)
> 8042 if ret is not None:
As this code-snippet shows, calling a property on the object works fine, but
calling *any* method consistently throws the "The Python instance can not be
converted to a COM object" error.
I don't have much (any) experience using COM / OLE / ODBC in Python and any
help would be appreciated.
Environment:
Python 2.7.3 (32-bit, EPD) with pywin32 build 218 (32-bit) .
Windows 7, 64-bit
Thanks,
-fj .ArcValue("10-JAN-2013 1:00:00.")=pi_server.PIPoints.Item('mytag');
_______________________________________________
python-win32 mailing list
python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32