別のスレッドで OPC タグを読み取ろうとすると問題が発生します。現在 Windows を使用しており、DCOM モードを使用して Matrikon OPC Simuator に接続しています。以下のコードは正常に動作します
opc = OpenOPC.client()
opc.connect('Matrikon.OPC.Simulation','localhost')
print(opc.read(['Random.Int1','Random.Int2','Random.Int4']))
ただし、threading.Timer を使用してループ内でタグを読み取ろうとすると、
def start():
def readTags():
# Start new threaded timer
start()
# Read OPC tags.
print(opc.read(['Random.Int1','Random.Int2','Random.Int4']))
# Create new threaded timer with the function to call after 1 second
r = threading.Timer(1, readTags)
r.start()
opc = OpenOPC.client()
opc.connect('Matrikon.OPC.Simulation','localhost')
start()
次のエラーが表示されます
OPCError: AddGroup: CoInitialize が呼び出されていません。
これは、異なるスレッド間でCOMオブジェクトを共有することと関係があると感じています(マルチスレッドでwin32comを使用)しかし、正しく動作させることはできません。どんな助けでも大歓迎です、ありがとう