python3で Free OPC-UA Libraryのpython-opcuaを使って同期通信してみます
コマンドプロンプトで
> pip install opcua
PLCのIPアドレス=192.168.0.21 の変数名='uaInt' の値を読み出します
opcuaclient.py
from opcua import Client
if __name__ == "__main__":
client = Client("opc.tcp://192.168.0.21:4840")
try:
client.connect()
var = client.get_node("ns=4;s=uaInt")
value = var.get_value()
print(f'value={value}')
finally:
client.disconnect()
読み出したい変数はclient.get_node()で指定
var = client.get_node("ns=4;s=uaInt")のns=4;はこちらのNodeIDからカンニング
コマンドプロンプトで実行すると
> python3 opcuaclient.py
Requested session timeout to be 3600000ms, got 60000ms instead
value=0
python3で Free OPC-UA Libraryのopcua-asyncioを使って非同期通信してみます
opcua-asyncioはpython3.7以上でサポートされています
コマンドプロンプトで
> pip install asyncua
PLCのIPアドレス=192.168.0.21 の変数名='uaIntAry' の値を読み出します
opcuaclient_async.py
import asyncio
from asyncua import Client
async def main():
url = 'opc.tcp://192.168.0.21:4840'
async with Client(url=url) as client:
var = client.get_node("ns=4;s=uaIntAry")
value = await var.read_value()
print(f'value={value}')
if __name__ == '__main__':
asyncio.run(main())
読み出したい変数はclient.get_node()で指定
var = client.get_node("ns=4;s=uaIntAry")のns=4;は同期と同様にNodeIDからカンニングします
コマンドプロンプトで実行すると
> python3 opcuaclient_async.py
Requested session timeout to be 3600000ms, got 60000ms instead
value=[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
pip install opcuaでライブラリをインストールし、Clientオブジェクトを生成してconnect()後にNodeIdを指定して値を読み取ります。
pip install opcuaでライブラリをインストールし、Clientオブジェクトを生成してconnect()後にNodeIdを指定して値を読み取ります。
Pythonのasyncioに対応したOPC UAライブラリで、非同期通信によるデータ取得が可能です。
通常は4840番ポートを使用します。
Free OPC-UA Libraryを詳しく調べたい場合はGitHubを参照してください
Free OPC-UA Library