1

別のスレッドで 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を使用)しかし、正しく動作させることはできません。どんな助けでも大歓迎です、ありがとう

4

0 に答える 0