Документация
Подключение
- Общий сервер
opc.tcp://opcua-sendbox.electroman.by:4840/electroman/- Личные серверы
- порты
4841–5000 - Безопасность
None(анонимный вход) иBasic256Sha256(Sign/SignAndEncrypt): логин и парольsendbox/sendbox- Пространство имён
urn:electroman:opcua-sendbox(ns=2)- Узлы
Objects/SendBox/Tags/*,Objects/SendBox/Alarms/*
UaExpert
Add Server → Custom Discovery → вставьте адрес, политика None, Anonymous (или Basic256Sha256, Sign/SignAndEncrypt, Username с парой sendbox/sendbox). События: Document → Add → Event View, перетащите узел Server; алармы — Alarms & Conditions View.
ModbusToolkit
Вкладка OPC UA: вставьте адрес в поле «Адрес», безопасность None (или Basic256Sha256 с логином sendbox), «Подключиться». История — вкладка «История», события — «События» → подписка на SendBox или Server.
Python (asyncua)
import asyncio
from asyncua import Client, ua
async def main():
async with Client("opc.tcp://opcua-sendbox.electroman.by:4840/electroman/") as client:
sine = client.get_node("ns=2;s=Tags.Sine")
print("Sine =", await sine.read_value())
asyncio.run(main())
Python (asyncua): подписка с переподключением
auto_reconnect=True: при обрыве связи клиент переподключается и восстанавливает подписки сам. UaExpert также восстанавливает подписки автоматически, а в библиотеке open62541 (C/C++) восстановление сессии и подписок встроено.
import asyncio
from asyncua import Client
class Handler:
def datachange_notification(self, node, value, data):
print(node, "=", value)
async def main():
# auto_reconnect=True: при обрыве клиент переподключается
# и восстанавливает подписки сам
async with Client("opc.tcp://opcua-sendbox.electroman.by:4840/electroman/", auto_reconnect=True) as client:
node = client.get_node("ns=2;s=Tags.Sine")
subscription = await client.create_subscription(500, Handler())
await subscription.subscribe_data_change(node)
while True:
await asyncio.sleep(3600)
asyncio.run(main())
REST API
KEY=$(curl -s -X POST http://opcua-sendbox.electroman.by/api/keys | jq -r .key)
curl -s -X POST -H "X-API-Key: $KEY" http://opcua-sendbox.electroman.by/api/sessions
Что умеет сервер
- Теги Double, Float, Int16/32, UInt16/32, Boolean с генераторами: синус, пила, треугольник, меандр, счётчик, шум, блуждание, ступеньки, свой профиль по точкам и другие.
- Запись в теги-константы с флагом «клиент может писать».
- История HistoryRead Raw: последние 1000 значений каждого тега.
- Алармы ExclusiveLimitAlarmType и AlarmConditionType: порог с гистерезисом, периодический, ручной; ConditionRefresh поддерживается.
Ограничения
- Сессий: 2 на ключ, 4 на IP, 50 всего.
- Тегов до 100 и алармов до 20 на сессию.
- Acknowledge и Confirm не поддерживаются: аларм сразу считается квитированным. LimitState в событии нет.
- Сертификат сервера самоподписанный: при подключении по Basic256Sha256 клиент спросит доверие к нему.
Исходный код
Сервер открыт: можно поднять свою копию в локальной сети.
git clone https://github.com/StarLeG/opcua-sendbox.git
SendBox бесплатный и без рекламы. Сервер и испытательный стенд оплачиваются из пожертвований.