web-dev-qa-db-ja.com

OpenOpcサーバー上のバリアント構造に配列タグを作成する方法

私はOPC DAサーバーと通信しようとしており、配列形式のタグに書き込む必要があります。シミュレーションサーバー、読み取りタグ(int、実、アレイ)と書き込みタグ(int、real、str)と接続できます。アレイタグに書き込む必要があるときに問題が発生します。 OPC "配列などの複雑なオブジェクトを書くときにWindowsのバリアント構造を表示することを期待するので、OpcC Library(Barry Barnreiter)の開発者はバリアント変数を使用することをお勧めします。

  • 提案されたようにpywin32(ビルド217)をインストールしました ここ
  • バリアント構造内の配列の代わりに単純な整数を送信しようとしました。

これがコードです:

from win32com.client import VARIANT
import pythoncom
import OpenOPC
opc_local = OpenOPC.open_client()
opc_local.connect('Matrikon.OPC.Simulation','localhost')
values = VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, [1.0, 2.0, 3.0, 4.0, 5.0, 6.0])
w = opc_local.write(('Bucket Brigade.ArrayOfReal8', values))
print(w)
 _

OPC_LOCAL.WRITEの行が実行されたときに取得するエラーがあります。

AttributeError: 'module' object has no attribute 'VARIANT'
 _

これがトレースバック全体です。

runfile('C:/Users/nadmin/Downloads/sanstitre0.py', wdir='C:/Users/nadmin/Downloads')
Traceback (most recent call last):

  File "<ipython-input-5-6799f41ab928>", line 1, in <module>
    runfile('C:/Users/nadmin/Downloads/sanstitre0.py', wdir='C:/Users/nadmin/Downloads')

  File "C:\Users\nadmin\AppData\Local\Continuum\anaconda2\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 827, in runfile
    execfile(filename, namespace)

  File "C:\Users\nadmin\AppData\Local\Continuum\anaconda2\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 95, in execfile
    exec(compile(scripttext, filename, 'exec'), glob, loc)

  File "C:/Users/nadmin/Downloads/sanstitre0.py", line 14, in <module>
    w = opc_local.write(('Bucket Brigade.ArrayOfReal8', values))

  File "C:\Users\nadmin\AppData\Local\Continuum\anaconda2\lib\site-packages\Pyro\core.py", line 381, in __call__
    return self.__send(self.__name, args, kwargs)

  File "C:\Users\nadmin\AppData\Local\Continuum\anaconda2\lib\site-packages\Pyro\core.py", line 456, in _invokePYRO
    return self.adapter.remoteInvocation(name, Pyro.constants.RIF_VarargsAndKeywords, vargs, kargs)

  File "C:\Users\nadmin\AppData\Local\Continuum\anaconda2\lib\site-packages\Pyro\protocol.py", line 497, in remoteInvocation
    return self._remoteInvocation(method, flags, *args)

  File "C:\Users\nadmin\AppData\Local\Continuum\anaconda2\lib\site-packages\Pyro\protocol.py", line 572, in _remoteInvocation
    answer.raiseEx()

  File "C:\Users\nadmin\AppData\Local\Continuum\anaconda2\lib\site-packages\Pyro\errors.py", line 72, in raiseEx
    raise self.excObj
 _

そしてこれがコンピュータの構成です:

  • ウィンドウズ10
  • Python 2.7
  • Pyro 3.16
  • Pywin32ビルド223
  • OpenOPC 1.3.1 Win32-PY27
8
Simon F.-Smith

Python COMサーバーによると、 'Module'オブジェクトに属性 'variant'がないVARIANTクラスはpywin32 build 217で導入されました。

Pywin32 Build 223を持っているあなたの投稿に含まれているように、これは問題にならないはずです。しかし、この利用可能なダウンロードリストから、 HOME/PYWIN32/BUILD 217 、特に選択します pywin32-27.win-amd64-py2.7.7.exe

それがうまくいかない場合は、リストされている構成のソースを確認することをお勧めします。 pythonインストールしたバージョンは1つだけですか?おそらくあなたはマルチPython IDEを混同することができる_ Idesを持っていますか?これらは、バグを修正するのに混乱を引き起こす可能性がある一般的なケースです。

1
Ann Zen