TECHNIKA WAGOWA · WŁASNY ROZWÓJ · WSPARCIE
+386 2 320 33 46info@preciz.si

PRECIZ · NEUTRON OPC UA

Neutron OPC UA — instrukcja integracji

Integracja OPC UA z Neutron: bezpieczne połączenia, dane ważenia na żywo, przechwytywanie stabilnego pomiaru i integracja z PLC/SCADA.

Wersje instrukcji

Wersja instrukcji: 1.0 · Data publikacji: 18 października 2026
Dotyczy: oprogramowania układowego Neutron 2.5.0 z obsługą OPC UA · Model informacyjny producenta 1.3.0

Tabela 1

Wersja

Data publikacji

Zmiany

1.0

18 października 2026

Pierwsze wydanie instrukcji Neutron OPC UA. Model informacyjny NodeSet2 1.3.0 z ActiveChannel do odczytu aktywnego kanału i SetChannel do wyboru kanału 1–4.

Wideo: Neutron OPC UA

PRECIZ jest członkiem OPC Foundation

PRECIZ jest oficjalnie zarejestrowanym członkiem OPC Foundation. Zobacz oficjalny wpis PRECIZ w katalogu członków OPC Foundation.

1. Przegląd i obsługiwane funkcje

Neutron firmy PRECIZ udostępnia serwer OPC UA do integracji z PLC, SCADA, MES i aplikacjami komputerowymi. Interfejs korzysta z komunikacji OPC UA Client/Server przez UA-TCP z kodowaniem UA Binary.

Serwer udostępnia:

  • Bieżącą masę brutto, netto, tarę i masę brutto o wysokiej rozdzielczości, surowe ADC, stabilność, stan wagi, kod błędu i jednostkę.

  • Metadane pomiaru: działkę, liczbę miejsc dziesiętnych, nośność, jednostki inżynierskie i zakres inżynierski.

  • Identyfikację urządzenia i standardowe informacje serwera OPC UA.

  • Subskrypcje zmian danych dla wartości bieżących.

  • Spójny odczyt pomiaru zawierający jedenaście pól z jednej migawki.

  • Asynchroniczne przechwytywanie i pobieranie świeżego stabilnego pomiaru.

  • Tarowanie, zadawanie tary, zerowanie i kasowanie tary.

  • Ustawienie filtra FT i ustawienie przełączania ADC FC.

    Odczytaj aktywny kanał wagowy przez ActiveChannel i wybierz kanał 1–4 przez SetChannel (NodeSet2 1.3.0).

  • Dwie równoczesne sesje klientów.

  • Opcjonalną szyfrowaną komunikację, zaufanie do certyfikatów aplikacji i uprawnienia użytkowników do odczytu lub odczytu i wykonywania poleceń.

Wszystkie udostępniane zmienne procesowe są tylko do odczytu. Operacje wykonuje się metodami. Interfejs nie udostępnia wykonywania dowolnych poleceń natywnych, kalibracji, sterowania wyjściami, wyboru aplikacji, wyników liczenia, historii, zdarzeń ani OPC UA PubSub. Model informacyjny jest modelem producenta PRECIZ, a nie modelem towarzyszącym OPC UA Weighing lub Device Integration.

Trzy sposoby uzyskania pomiaru służą różnym celom:

Tabela 2

Interfejs

Zastosowanie

Zmienne bieżące i subskrypcje

Wyświetlanie lub ciągłe monitorowanie poszczególnych wartości

ReadMeasurement

Pobranie wszystkich jedenastu pól pomiaru z jednej aktualnej migawki

CaptureStableWeight, a następnie GetCapturedMeasurement

Zamrożenie świeżego, prawidłowego, stabilnego pomiaru i pobranie go według identyfikatora żądania

2. Szybki start

2.1 Włącz serwer

  1. Połącz się z lokalną stroną konfiguracji Neutron lub narzędziem konfiguracji Bluetooth. Do zarządzania certyfikatami/użytkownikami użyj HTTPS lub uwierzytelnionego Bluetooth.

  2. Wybierz interfejs połączenia sieciowego i odczytaj przypisany mu adres IP.

  3. Pozostaw akwizycję wagi włączoną w ustawieniach Scale.

  4. Otwórz kartę OPC UA. Oprogramowanie układowe musi zgłaszać dostępność OPC UA.

  5. Aby uzyskać dostęp szyfrowany, najpierw utwórz użytkownika w Users & permissions.

  6. W Settings włącz serwer, wybierz tryb bezpieczeństwa i do pierwszego połączenia zachowaj port 4840 oraz minimalny interwał 100 ms.

  7. Kliknij Save. Skopiuj adres połączenia przyciskiem Copy endpoint.

Przykładowy punkt końcowy:

opc.tcp://192.168.50.73:4840

2.2 Połącz przez UAExpert

  1. Dodaj punkt końcowy jako serwer w UAExpert.

  2. W trybie szyfrowanym wybierz Basic256Sha256 / SignAndEncrypt i uwierzytelnianie Username/Password. W trybie niezabezpieczonym wybierz None i Anonymous.

  3. Aby uzyskać dostęp szyfrowany, porównaj certyfikat Neutron i oznacz go jako zaufany. Jeśli certyfikat klienta nie jest jeszcze zaufany przez Neutron, postępuj zgodnie z sekcją 4.2 i połącz się ponownie.

  4. Połącz się i przejdź do Objects → CS-NEUTRON Scale. NodeId obiektu to Scale; jego wyświetlana nazwa to CS-NEUTRON Scale.

  5. Przeciągnij Gross, Net, Tare, Stable, Status, ErrorCode i Unit do Data Access View.

  6. W menu kontekstowym Data Access View ustaw interwał publikacji subskrypcji i interwał próbkowania monitorowanych elementów, początkowo 100 ms.

Używaj wartości tylko wtedy, gdy jej OPC UA StatusCode wynosi Good. ErrorCode=1 oznacza brak błędu natywnej wagi. Status=1 lub Status=3 opisuje stabilne wskazanie.

3. Połączenie i konfiguracja

3.1 Punkt końcowy i sieć

Punkt końcowy ma postać opc.tcp://<assigned-device-IP>:<port>. Użyj adresu wybranego interfejsu Wi-Fi, Ethernet lub LTE. Karta OPC UA wyświetla adres i udostępnia przycisk kopiowania. Stały adres IP upraszcza integrację.

Urządzenie nie wymaga skonfigurowania adresu IP sterownika PLC. Zezwól na przychodzący ruch TCP na wybranym porcie. Klient musi mieć trasę sieciową do Neutron; adres LTE za NAT operatora nie jest automatycznie osiągalny spoza tej sieci. Użyj odpowiedniej sieci routowanej, prywatnego APN lub VPN.

3.2 Ustawienia

Tabela 3

Ustawienie

Klucz

Domyślnie

Wartości / działanie

Dostępność OPC UA

OUB

Zależnie od oprogramowania układowego

Tylko do odczytu: 0 brak, 1 dostępny

Obsługa zabezpieczeń

OUS

Zależnie od oprogramowania układowego

Tylko do odczytu: 0 brak, 1 dostępny

Serwer OPC UA

OUE

Wyłączony

0 wyłączony, 1 włączony

Port TCP

OUP

4840

1024–65535; wybierz nieużywany port usługi

Minimalny interwał aktualizacji

OUI

100 ms

10–5000 ms; minimalny interwał próbkowania i publikacji akceptowany przez serwer

Bezpieczeństwo połączenia

OUM

Niezabezpieczone

0 None/anonymous; 1 Basic256Sha256/SignAndEncrypt z nazwą użytkownika/hasłem

Dostęp anonimowy do poleceń

OUC

Wyłączony

Tylko w trybie niezabezpieczonym: 0 tylko odczyt; 1 wszystkie obsługiwane polecenia dozwolone

Zapisanie ustawień OPC UA uruchamia ponownie usługę OPC UA i rozłącza jej klientów. Zmiany użytkowników i zaufania również uruchamiają usługę ponownie. Po tych zmianach połącz się ponownie. Wykorzystywane są istniejące ustawienia adresu IP urządzenia, wagi i zegara.

Minimalny interwał to dolna granica, a nie stały okres transmisji ani gwarancja opóźnienia od końca do końca. Klienci żądają własnych interwałów i muszą używać skorygowanych wartości zwróconych przez serwer.

4. Bezpieczeństwo i uprawnienia

4.1 Tryby połączenia

Tabela 4

Tryb

Polityka / zabezpieczenie komunikatów

Uwierzytelnianie

Uprawnienie do poleceń

Niezabezpieczone

None / None

Anonymous

Sterowane ustawieniem Anonymous command access

Szyfrowany

Basic256Sha256 / SignAndEncrypt

Nazwa użytkownika i hasło; zaufany certyfikat aplikacji klienta

Sterowane uprawnieniem użytkownika

W trybie szyfrowanym sesje anonimowe i logowanie użytkownika za pomocą certyfikatu nie są obsługiwane. Certyfikat aplikacji klienta identyfikuje oprogramowanie klienta; nie zastępuje uwierzytelniania nazwą użytkownika/hasłem. PIN konfiguracji internetowej i certyfikat HTTPS są niezależne od danych uwierzytelniających i certyfikatów OPC UA.

Trybu niezabezpieczonego używaj w zaufanej, odizolowanej sieci. Nie szyfruje on danych ani nie uwierzytelnia poszczególnych użytkowników.

4.2 Pierwsze połączenie szyfrowane

  1. Otwórz ustawienia OPC UA Neutron przez HTTPS lub uwierzytelniony Bluetooth.

  2. Dodaj użytkownika. Nazwy użytkowników zawierają 1–64 litery ASCII, cyfry, podkreślenia lub łączniki i rozróżniają wielkość liter. Hasła zawierają 12–128 znaków. Obsługiwanych jest maksymalnie ośmiu użytkowników; nie ma domyślnego konta OPC UA.

  3. Wybierz Read only lub Read and execute commands.

  4. Włącz szyfrowany OPC UA i zapisz. Zegar urządzenia musi być zsynchronizowany i musi istnieć przynajmniej jeden użytkownik. Bezpieczne uruchomienie czeka na synchronizację zegara.

  5. Przy pierwszym bezpiecznym uruchomieniu Neutron generuje klucz prywatny i samopodpisany certyfikat aplikacji RSA-2048, ważny przez pięć lat.

  6. W kliencie porównaj odcisk SHA-256 certyfikatu Neutron z odciskiem wyświetlanym w interfejsie konfiguracji, a następnie oznacz go jako zaufany.

  7. Spróbuj nawiązać połączenie szyfrowane. Neutron odrzuca nieznany certyfikat aplikacji klienta i wyświetla go w Certificates jako rejected.

  8. Kliknij Refresh certificates and users, porównaj odcisk klienta i kliknij Approve przy tym certyfikacie.

  9. Połącz się ponownie, używając nazwy użytkownika i hasła.

Klient musi zaufać Neutron, zanim będzie mógł przejść do etapu wysłania własnego certyfikatu. Zatwierdzenie nie pomija sprawdzania terminu ważności, podpisu, użycia klucza ani URI aplikacji.

4.3 Uprawnienia

Tabela 5

Operacja

Tylko odczyt

Odczyt i wykonywanie poleceń

Odczyt zmiennych / subskrypcja

Tak

Tak

ReadMeasurement

Tak

Tak

GetCapturedMeasurement

Tak

Tak

CaptureStableWeight

Nie

Tak

TareCurrent, SetTare, Zero, ClearTare

Nie

Tak

SetFilter, SetHRFilter, SetChannel

Nie

Tak

Zapis zmiennych / zarządzanie użytkownikami lub certyfikatami przez OPC UA

Nie

Nie

Zapisane role Reader i Operator odpowiadają tym dwóm uprawnieniom. Nie ma poziomów uprawnień dla poszczególnych poleceń. W trybie szyfrowanym obowiązuje uprawnienie użytkownika; OUC jest ignorowane. W trybie niezabezpieczonym OUC zezwala na wszystkie obsługiwane polecenia albo na żadne.

Pięć nieudanych logowań powoduje 30-sekundową blokadę logowania na całym serwerze. Może to tymczasowo wpływać także na innych użytkowników. Hasła użytkowników są przechowywane jako skróty PBKDF2-HMAC-SHA256 z solą; interfejs administracyjny nie eksportuje haseł ani kluczy prywatnych.

4.4 Tożsamość urządzenia, certyfikaty CA i odnawianie

URI aplikacji Neutron:

urn:preciz:cs-neutron:<MID>

Wygenerowany certyfikat zawiera ten URI, nazwę hosta <MID>.local zapisaną małymi literami i adres IP urządzenia w chwili generowania. Zachowaj stały adres lub wystaw certyfikat zastępczy zawierający adresy używane przez klientów.

Certyfikat CA nie jest wymagany dla jawnie zaufanych samopodpisanych certyfikatów aplikacji. W przypadku firmowej infrastruktury PKI:

  1. Wybierz Create and download CSR. CSR wykorzystuje istniejący klucz urządzenia.

  2. Zleć CA wystawienie certyfikatu aplikacji OPC UA zachowującego URI aplikacji w SAN oraz odpowiednie rozszerzone użycia klucza serwera/klienta i użycia podpisu cyfrowego/szyfrowania klucza.

  3. Zaimportuj go jako CA-signed device certificate. Jego klucz prywatny musi odpowiadać istniejącemu kluczowi Neutron. Zainstaluj wymagany łańcuch CA w kliencie.

  4. Aby ufać klientom z certyfikatami wystawionymi przez CA, zaimportuj główny certyfikat wystawcy jako Trusted client certificate or CA. Pośrednie CA importuj jako Intermediate issuer CA. Sam wpis pośredniego wystawcy nie nadaje zaufania.

  5. Jeśli używana jest kontrola unieważnień, importuj podpisane przez CA listy CRL jako Certificate revocation list i aktualizuj je przed upływem ważności. Najpierw zaimportuj CA ich wystawców.

Obsługiwany jest import PEM lub DER, do 8192 bajtów na plik. Każdy magazyn certyfikatów zaufanych, odrzuconych, wystawców i CRL mieści do 12 wpisów. Usuń nieaktualne odrzucone wpisy, gdy ten magazyn się zapełni. Zainstalowane CRL są sprawdzane pod kątem dat i podpisu wystawcy; wygasłe CRL powodują odrzucanie objętych nimi nowych połączeń. Bez zainstalowanych CRL kontrola unieważnień nie jest wykonywana. CRL nie są pobierane automatycznie; zarządzanie OCSP i GDS nie jest udostępniane.

Odnów certyfikat, tworząc CSR i importując odnowiony certyfikat. Wygasły certyfikat urządzenia uniemożliwia bezpieczne uruchomienie. Replace device identity usuwa bieżący klucz/certyfikat/CSR i generuje nową tożsamość przy następnym bezpiecznym uruchomieniu; klienci muszą ponownie jej zaufać. Użytkownicy i zaufani klienci zostają zachowani.

Użytkownicy i magazyny certyfikatów zachowują się przy zwykłych restartach i aktualizacjach OTA. Wymazanie systemu plików urządzenia je usuwa. Przed przekazaniem własności urządzenia jawnie usuń poprzednich użytkowników i wpisy zaufania.

5. Przestrzeń adresowa i reprezentacja danych

5.1 Przestrzeń nazw i NodeId

URI przestrzeni nazw producenta:

urn:preciz:cs-neutron:weighing:1

Przy każdym połączeniu odszukaj ten URI w Server/NamespaceArray. Nie koduj na stałe indeksu przestrzeni nazw 1 ani 2. Sufiks wersji :1 należy do stałego URI przestrzeni nazw; wersja modelu do pobrania to 1.3.0.

Przykładowe postacie tej samej zmiennej:

nsu=urn:preciz:cs-neutron:weighing:1;s=Scale.Gross
ns=2;s=Scale.Gross

Postać liczbowa jest prawidłowa tylko wtedy, gdy serwer aktualnie przypisuje ten URI do indeksu 2. Jeśli klient nie akceptuje składni nsu=, odszukaj URI i zbuduj NodeId z indeksem liczbowym. Identyfikatory producenta są ciągami rozróżniającymi wielkość liter, włącznie z kropkami w Scale.Gross.

Tabela 6

Lokalizacja w przeglądarce

Łańcuchowy NodeId obiektu

Objects / CS-NEUTRON Scale

Scale

Objects / Device

Device

Objects / Server

Standardowa przestrzeń nazw 0, liczbowy NodeId i=2253

Metody należy wywoływać z Scale jako nadrzędnym ObjectId i NodeId metody jako MethodId.

5.2 Jednostki i precyzja liczbowa

Gross, Net i Tare są eksportowane jako wartości Double znormalizowane do skonfigurowanej liczby miejsc dziesiętnych. HR to masa brutto o wysokiej rozdzielczości przed zaokrągleniem wskazania, a nie masa netto ani surowe ADC. Każda masa używa bieżącej Scale.Unit; OPC UA nie przelicza jednostek. Typ transportowy Double nie zwiększa dokładności czujnika.

Binarne wartości zmiennoprzecinkowe nie przedstawiają dokładnie każdej liczby dziesiętnej. Formatuj wyświetlane masy według Scale.Decimals, a jako krok ważenia używaj Scale.Division. HR może występować w notacji naukowej: 9.31e-5 kg oznacza 0.0000931 kg.

5.3 Czas, migawki i jakość

Neutron kopiuje najnowsze wartości ważenia do migawki OPC UA mniej więcej co min(OUI, 50) milisekund, zależnie od dostępności akwizycji. Odczyt ani subskrypcja nie inicjują kolejnego przetworzenia ADC.

SourceTimestamp określa czas migawki pomiaru, gdy zegar urządzenia jest zsynchronizowany. Przed synchronizacją jest nieobecny. ServerTimestamp to znacznik czasu dostarczony przez serwer dla DataValue; nie musi być równy SourceTimestamp. Znaczniki czasu OPC UA używają UTC.

Oddzielne odczyty lub powiadomienia subskrypcji mogą dotyczyć różnych migawek. Używaj ReadMeasurement lub przechwyconego wyniku, gdy pola muszą należeć do jednego pomiaru. Niezmieniona monitorowana wartość nie musi generować nowego powiadomienia w każdym interwale.

Tabela 7

StatusCode DataValue

Znaczenie / działanie klienta

Good

Wartość nadaje się do użycia; w razie potrzeby sprawdź Stable i stan natywny

BadNoCommunication

Brak migawki lub ponad dwie sekundy bez nowej migawki; odrzuć bieżący pomiar

BadSensorFailure

Błąd natywnej wagi; sprawdź ErrorCode

BadOutOfRange

Niedociążenie lub przeciążenie; odrzuć pomiar

Jakość dotyczy mas, ADC i Stable. Status, ErrorCode i Unit pozostają czytelne podczas błędów natywnej wagi, ale stają się nieaktualne po zatrzymaniu migawek. Diagnostyka poleceń/przechwytywania pozostaje czytelna niezależnie od jakości bieżącej wagi. Metadane są informacją konfiguracyjną; ich stan Good nie potwierdza prawidłowości bieżącego wyniku ważenia.

6. Dane referencyjne

Wszystkie poniższe pozycje są tylko do odczytu. NodeId są identyfikatorami łańcuchowymi producenta, chyba że wskazano standardową przestrzeń nazw 0. Wszystkie pozycje skalarne mają ValueRank −1.

6.1 Pomiar bieżący i konfiguracja

Tabela 8

Łańcuchowy NodeId

Typ

Jednostka

Opis

Scale.Gross

Double

Scale.Unit

Zaokrąglona masa brutto

Scale.Net

Double

Scale.Unit

Zaokrąglona masa netto

Scale.Tare

Double

Scale.Unit

Zastosowana tara

Scale.HR

Double

Scale.Unit

Niezaokrąglona masa brutto o wysokiej rozdzielczości

Scale.ADC

Int32

Zliczenia ADC

Istniejąca wartość ADC wagi skopiowana z migawką; bez dodatkowego odczytu sprzętowego

Scale.Stable

Boolean

—

Flaga stabilności wagi

Scale.Status

UInt16

—

Stan wskazania; tabela poniżej

Scale.ErrorCode

UInt16

—

Błąd natywny; 1 oznacza brak błędu

Scale.Unit

String

—

Skonfigurowana jednostka, np. kg lub g

Scale.Decimals

UInt16

miejsca dziesiętne

Liczba miejsc dziesiętnych wyświetlanej masy

Scale.Division

Double

Scale.Unit

Aktywna działka wagowa

Scale.Capacity

Double

Scale.Unit

Nośność aktywnego zakresu

Scale.Filter

UInt16

—

Aktywne ustawienie FT, 1–1023

Scale.HRFilter

Boolean

—

Ustawienie FC: false wyłączone, true włączone; steruje przełączaniem ADC

ADC nie jest oddzielnym skanowaniem poszczególnych czujników tensometrycznych. Zmienna mV nie jest udostępniana. Mimo nazwy HRFilter steruje istniejącą funkcją FC/przełączania ADC, a nie filtrem programowym stosowanym wyłącznie do zmiennej OPC UA HR.

6.2 Natywny stan wagi

Tabela 9

Scale.Status

Znaczenie

0

Niedociążenie

1

W zakresie zera

2

Niestabilna

3

Stabilna

4

Przeciążenie

255

Niezainicjowana migawka

Używaj Scale.Stable jako flagi stabilności. Scale.Status i OPC UA StatusCode to odrębne pojęcia; natywny stan 3 nie jest kodem jakości OPC UA.

6.3 Natywne kody błędów

Tabela 10

Scale.ErrorCode

Znaczenie

1

Brak błędu

99

Przekroczenie limitu czasu polecenia

98

Nieznane polecenie

97

Waga wyłączona

96

Brak kalibracji

95

Brak danych metrologicznych

94

Błąd rejestru stanu ADC

93

Błąd napięcia odniesienia ADC

92

Błąd trybu przetwarzania ADC

91

Błąd konfiguracji zegara ADC

90

Błąd konfiguracji pojedynczego cyklu ADC

89

Błąd konfiguracji filtra tłumiącego ADC

88

Niezgodność filtra ADC

87

Błąd konfiguracji kanału ADC

86

Niezgodność przełączania ADC

85

Błąd trybu bipolarnego ADC

84

Błąd konfiguracji zewnętrznego napięcia odniesienia ADC

83

Niezgodność wzmocnienia ADC

82

Błąd filtra uśredniającego ADC

6.4 Właściwości pomiaru

Właściwości mają następujące łańcuchowe NodeId producenta. Ich BrowseNames należą do przestrzeni nazw 0, na przykład 0:EngineeringUnits.

Tabela 11

Wzorzec łańcuchowego NodeId

Typ

Znaczenie

Scale.Gross.EngineeringUnits, Scale.Net.EngineeringUnits, Scale.Tare.EngineeringUnits, Scale.HR.EngineeringUnits

EUInformation

Metadane jednostki

Scale.Gross.EURange, Scale.Net.EURange, Scale.Tare.EURange, Scale.HR.EURange

Range

Zakres inżynierski Low/High

Scale.Gross.ValuePrecision, Scale.Net.ValuePrecision, Scale.Tare.ValuePrecision

Double

Eksportowana liczba miejsc dziesiętnych, równa Decimals

EURange wynosi [0, Capacity], z wyjątkiem Net, które używa [-Capacity, Capacity]. Zakres inżynierski to metadane, a nie instrukcja ograniczania wartości. ValuePrecision to liczba miejsc dziesiętnych, a nie działka ani specyfikacja dokładności. HR nie ma właściwości ValuePrecision.

EngineeringUnits używa kodów UN/CEFACT dla kg (4933453), g (4674125), lb (4997714) i oz (5197402). Inne symbole jednostek mają UnitId −1 i pustą przestrzeń nazw standardów. Odśwież metadane po zmianach jednostek, zakresu lub konfiguracji wagi.

6.5 Diagnostyka poleceń i przechwytywania

Tabela 12

Łańcuchowy NodeId

Typ

Opis

Scale.LastCommandId

UInt32

Identyfikator ostatniego przyjętego polecenia tarowania/zerowania/filtra

Scale.LastCommandState

UInt16

0 bezczynne; 1 w kolejce; 2 wykonywane; 3 zakończone powodzeniem; 4 niepowodzenie

Scale.LastCommandResult

String

Natywna odpowiedź lub powód odrzucenia

Scale.LastCaptureId

UInt32

Identyfikator ostatniego przyjętego żądania przechwycenia stabilnego pomiaru

Scale.LastCaptureState

UInt16

0 bezczynne; 1 oczekujące; 2 zakończone; 3 przekroczenie limitu czasu

Identyfikatory poleceń i przechwytywania należą do oddzielnych sekwencji. Obie są wspólne dla wszystkich klientów, lokalne dla uruchomionej usługi i zerują się przy ponownym uruchomieniu usługi.

6.6 Identyfikacja urządzenia

Tabela 13

Łańcuchowy NodeId

Typ

Opis

Device.Manufacturer

String

PRECIZ

Device.Model

String

Model urządzenia

Device.SerialNumber

String

MID

Device.SoftwareRevision

String

Wersja oprogramowania układowego

Device.HardwareRevision

String

Wersja sprzętu

Device.DeviceName

String

Skonfigurowana nazwa urządzenia

Wartości tożsamości są ładowane przy uruchomieniu OPC UA. Po zmianie nazwy urządzenia uruchom usługę ponownie, aby odświeżyć DeviceName.

6.7 Standardowe informacje serwera

Poniższe ścieżki są względne wobec Objects / Server i używają przestrzeni nazw 0.

Tabela 14

Ścieżka przeglądania

Typ / wartość

ServerArray

String[]; indeks 0 to URI aplikacji urządzenia

NamespaceArray

String[]; indeks 0 to przestrzeń nazw OPC UA, indeks 1 to URI aplikacji urządzenia; odszukaj URI producenta w tej tablicy

ServerStatus

ServerStatusDataType

ServerStatus/StartTime, CurrentTime

DateTime, zadeklarowany UtcTime

ServerStatus/State

ServerState; 0 Running podczas normalnej pracy

ServerStatus/SecondsTillShutdown

UInt32; 0, gdy nie zaplanowano wyłączenia

ServerStatus/ShutdownReason

LocalizedText

ServerStatus/BuildInfo

BuildInfo: ProductUri, ManufacturerName, ProductName, SoftwareVersion, BuildNumber, BuildDate

ServiceLevel

Byte; 255 podczas normalnej pracy

Auditing

Boolean; false

VendorServerInfo

Obiekt informacji producenta

ServerRedundancy/RedundancySupport

RedundancySupport; 0 None

ServerCapabilities/ServerProfileArray

String[]; URI profili/aspektów implementacji

ServerCapabilities/LocaleIdArray

LocaleId[]; en

ServerCapabilities/MinSupportedSampleRate

Duration w ms; aktywne minimum OUI

ServerCapabilities/MaxBrowseContinuationPoints

UInt16; 5 na sesję

ServerCapabilities/SoftwareCertificates

SignedSoftwareCertificate[]; pusta

ServerCapabilities/ModellingRules, AggregateFunctions

Foldery

ServerCapabilities/OperationLimits

Limity na żądanie wymienione w sekcji 9

Standardowe zmienne tablicowe mają ValueRank 1 i ArrayDimensions [0]; zero oznacza nieokreśloną maksymalną długość. ServerProfileArray identyfikuje docelową implementację Micro Embedded Device 2017 i aktywne aspekty transportu/metod/bezpieczeństwa. Identyfikator tego profilu nie jest znakiem certyfikacji OPC Foundation.

6.8 Aktywny kanał — ActiveChannel

Scale.ActiveChannel to zmienna UInt16 wskazująca aktualnie aktywny kanał wagowy. Jest tylko do odczytu; kanał wybieraj przez Scale.SetChannel. NodeSet2 1.3.0 obsługuje wybór kanałów 1–4. Przy łączeniu odszukaj URI przestrzeni nazw zgodnie z sekcją 5.1.

7. Metody i wykonywanie poleceń

7.1 Zestawienie metod

Wywołuj każdą metodę na obiekcie nadrzędnym Scale. Podawaj argumenty skalarne dokładnie we wskazanych typach OPC UA; nie zastępuj argumentu UInt32 lub Boolean typem String, Int32 ani Double.

SetChannel przyjmuje Channel: UInt16 (1–4) i zwraca RequestId: UInt32; patrz sekcja 7.9.

Tabela 15

Łańcuchowy NodeId metody

Argumenty wejściowe

Wynik

Uprawnienie

Scale.ReadMeasurement

Brak

Jedenaście pól pomiaru, sekcja 8.1

Odczyt

Scale.CaptureStableWeight

TimeoutMs: UInt32

RequestId: UInt32

Wykonywanie

Scale.GetCapturedMeasurement

RequestId: UInt32

Jedenaście pól pomiaru, sekcja 8.1

Odczyt

Scale.TareCurrent

Brak

RequestId: UInt32

Wykonywanie

Scale.SetTare

Value: Double

RequestId: UInt32

Wykonywanie

Scale.Zero

Brak

RequestId: UInt32

Wykonywanie

Scale.ClearTare

Brak

RequestId: UInt32

Wykonywanie

Scale.SetFilter

Value: UInt16

RequestId: UInt32

Wykonywanie

Scale.SetHRFilter

Enabled: Boolean

RequestId: UInt32

Wykonywanie

7.2 TareCurrent

Taruje bieżącą stabilną masę brutto, używając natywnej operacji T. Ustawia tarę równą masie brutto, a masa netto staje się zerowa; nie zmienia punktu zerowego masy brutto. Waga musi przyjąć operację stabilnego tarowania przed upływem limitu czasu polecenia.

Przykład z 1.11 kg na wadze: Gross pozostaje 1.11 kg, Tare staje się 1.11 kg, a Net staje się 0.00 kg. Natywna odpowiedź powodzenia przypomina T S 1.11 kg.

7.3 SetTare

Ustawia zadaną tarę w Scale.Unit, używając natywnej operacji TA. Value musi być skończona, nieujemna, nie większa niż 1,000,000,000 i nie większa niż nośność. Zastosowana tara jest zaokrąglana do działki wagi. Po zakończeniu odczytaj Scale.Tare, aby uzyskać zastosowaną wartość. Przykładowe wejście: Double 0.250, gdy Unit to kg.

7.4 Zero

Wykonuje natywne Z z uwzględnieniem stabilności i skonfigurowanego zakresu zera. Przy powodzeniu punkt zerowy zostaje skorygowany, a istniejąca zastosowana/zadana tara zostaje skasowana. Natywna odpowiedź powodzenia to Z A. Jest to operacja odmienna od TareCurrent.

7.5 ClearTare

Wykonuje natywne TAC, usuwając zastosowaną i zadaną tarę. Gross zostaje zachowane, a Net powraca do Gross. Nie ma argumentów wejściowych.

7.6 SetFilter

Value ma typ UInt16, 1–1023 włącznie. Ustawia FT dla aktywnego kanału wagowego przez istniejącą procedurę konfiguracji filtra. Zero i wartości powyżej 1023 zwracają BadOutOfRange. Przykład: UInt16 512.

7.7 SetHRFilter

Enabled ma typ Boolean: true włącza FC/przełączanie ADC, false je wyłącza. Wartość liczbowa wysłana z liczbowym typem OPC UA nie jest Boolean i zostaje odrzucona.

FT i FC są aktywowane i zapisywane dla aktywnego kanału przez natywne procedury konfiguracji. Niepowodzenie weryfikacji sprzętowej powoduje niepomyślny wynik polecenia. Akwizycja może zostać wstrzymana podczas stosowania ustawienia. Po zakończeniu odczytaj Scale.Filter lub Scale.HRFilter, aby zobaczyć aktywne ustawienie.

7.8 Asynchroniczna sekwencja poleceń

Dla TareCurrent, SetTare, Zero, ClearTare, SetChannel, SetFilter i SetHRFilter:

  1. Wywołaj metodę i zachowaj zwrócony RequestId.

  2. Odczytuj lub subskrybuj LastCommandId, LastCommandState i LastCommandResult.

  3. Powiąż wynik tylko ze zgodnym LastCommandId.

  4. Stan 3 oznacza powodzenie; stan 4 oznacza niepowodzenie. Stany 1 i 2 są oczekujące.

  5. Po pomyślnym zakończeniu odczytaj odpowiednie wartości procesowe/konfiguracyjne.

Wynik wywołania Call o stanie Good potwierdza przyjęcie, a nie zakończenie. W danej chwili tylko jedno z tych poleceń może być w kolejce lub w trakcie wykonywania; kolejne otrzymuje BadResourceUnavailable. Nadal obowiązują istniejące blokady stabilności wagi, dostępności, zajętości i aplikacji.

Miejsce na polecenie i diagnostyka ostatniego wyniku są wspólne dla całego urządzenia. Koordynuj klientów wysyłających polecenia, jeśli może je wydawać dwóch klientów: późniejsze polecenie może zastąpić ostatnią zakończoną diagnostykę, zanim inny klient ją odczyta. Nie jest to historia poleceń.

Identyfikatory żądań nie są trwałymi identyfikatorami operacji. Po utracie połączenia sprawdź odpowiedni stan wagi przed ponowieniem polecenia o nieznanym wyniku. Restart usługi kasuje diagnostykę i anuluje niezakończone polecenia wagowe należące do OPC UA; nie cofa zakończonego tarowania, zerowania ani zmiany ustawień.

7.9 SetChannel — wybór kanału wagowego

Wywołaj Scale.SetChannel na obiekcie Scale. Jego argument wejściowy Channel jest skalarnym UInt16 o wartości 1–4; inne wartości są odrzucane. Argument wyjściowy RequestId ma typ UInt32.

Wywołanie wymaga uprawnienia do poleceń i ponownie inicjalizuje wagę. Koordynuj wykonanie z innymi poleceniami i postępuj według sekwencji asynchronicznej z sekcji 7.8. Wybrany kanał odczytuj z Scale.ActiveChannel.

8. Spójne pomiary i przechwytywanie stabilnego pomiaru

8.1 Wynik ReadMeasurement

ReadMeasurement() natychmiast zwraca najnowszą prawidłową migawkę. Nie czeka na stabilność ani nie żąda nowego odczytu ADC. GetCapturedMeasurement zwraca tę samą sygnaturę wyniku dla zamrożonego stabilnego pomiaru.

Tabela 16

Pozycja (liczona od zera)

Argument

Typ OPC UA

Znaczenie

0

MeasurementId

UInt64

Numer sekwencyjny migawki

1

Gross

Double

Masa brutto

2

Net

Double

Masa netto

3

Tare

Double

Zastosowana tara

4

HR

Double

Masa brutto o wysokiej rozdzielczości

5

Stable

Boolean

Stabilność tej migawki

6

Status

UInt16

Natywny stan wagi

7

ErrorCode

UInt16

Natywny kod błędu wagi

8

Unit

String

Jednostka tego wyniku

9

Timestamp

DateTime

Czas UTC migawki lub zero bez synchronizacji

10

TimeSynchronized

Boolean

Czy Timestamp można wykorzystać jako czas kalendarzowy

Wszystkie pola należą do jednej migawki. MeasurementId zwiększa się przy każdej migawce OPC UA, a nie przy każdym fizycznym przetworzeniu ADC, i zeruje się wraz z usługą. Przy zapisywaniu zachowaj precyzję UInt64. ADC, metadane i filtry są oddzielnymi węzłami bieżącymi i nie wchodzą w skład jedenastopolowego wyniku tej metody.

Jeśli TimeSynchronized ma wartość false, nie interpretuj Timestamp jako daty kalendarzowej. ReadMeasurement zwraca BadNoCommunication, BadSensorFailure lub BadOutOfRange, gdy bieżącej migawki brakuje/jest nieaktualna, ma błąd natywny lub jest poza zakresem.

8.2 CaptureStableWeight i GetCapturedMeasurement

  1. Wywołaj CaptureStableWeight(TimeoutMs) z UInt32 100–60000 ms. Na przykład 5000 pozwala czekać do pięciu sekund na prawidłowy stabilny pomiar. Zero jest nieprawidłowe.

  2. Zachowaj zwrócony UInt32 RequestId.

  3. Wywołaj GetCapturedMeasurement(RequestId), używając tego identyfikatora. Podczas oczekiwania zwraca BadWaitingForInitialData. Powtarzaj w umiarkowanym interwale, na przykład 100 ms.

  4. Przy powodzeniu zapisz jedenastopolowy wynik wraz z RequestId przechwytywania.

Możesz też subskrybować LastCaptureId i LastCaptureState, a następnie pobrać wynik, gdy zgodne żądanie osiągnie stan 2.

Tabela 17

LastCaptureState

Znaczenie

0

Bezczynne

1

Oczekujące

2

Zakończone; wynik dostępny

3

Przekroczenie limitu czasu

Przechwycona migawka musi zostać opublikowana po rozpoczęciu żądania i musi być stabilna, świeża, bez błędów natywnych i w zakresie. Nieprawidłowe migawki są pomijane do nadejścia odpowiedniej lub upływu limitu czasu. Jeśli waga jest już stabilna, następna prawidłowa migawka może natychmiast zakończyć przechwytywanie; nie jest wymagane przejście od niestabilności do stabilności ani dodatkowy czas utrzymania.

Operacja nie taruje ani nie zeruje wagi i nie blokuje innych klientów. Tylko jedno przechwytywanie może oczekiwać. Dla całego urządzenia istnieje jeden zamrożony wynik wspólny dla wszystkich klientów. Pozostaje niezmieniony nawet po zmianie lub utracie dostępności bieżącej masy. Rozpoczęcie nowego przechwytywania zastępuje poprzednie żądanie/wynik. Nie ma historii przechwytywania.

Tabela 18

Wynik GetCapturedMeasurement

Znaczenie

Good

Zwrócony zamrożony wynik

BadWaitingForInitialData

Zgodne przechwytywanie nadal oczekuje

BadTimeout

Zgodne przechwytywanie wygasło bez prawidłowego stabilnego pomiaru

BadNotFound

Identyfikator jest zerowy, nieznany, zastąpiony lub niedostępny po restarcie

BadNoData

Brak zakończonego wyniku dla zgodnego stanu przechwytywania

Jako wejścia GetCapturedMeasurement używaj RequestId przechwytywania, a nie MeasurementId wyniku. Przechwytywanie może zakończyć się po rozłączeniu klienta, który je zainicjował. Można je pobrać po ponownym połączeniu z tym samym identyfikatorem, jeśli usługa OPC UA działała nieprzerwanie. Restart usługi kasuje oczekujące przechwytywania, zapisane wyniki i identyfikatory; koordynuj żądania przechwytywania między klientami.

9. Subskrypcje, czas i limity wydajności

9.1 Czas

Tabela 19

Parametr

Znaczenie

OUI

Skonfigurowana dolna granica próbkowania i publikacji

Interwał próbkowania

Jak często próbkowany jest monitorowany element

Interwał publikacji

Jak często subskrypcja może publikować powiadomienia z kolejki

Rozmiar kolejki

Liczba powiadomień zachowywanych dla monitorowanego elementu

Keepalive

Sygnalizuje aktywną subskrypcję, gdy nie ma powiadomień

Dla wyświetlania na żywo zacznij od 100–250 ms i rozmiaru kolejki 1. Aby uzyskać najszybszą dostępną aktualizację, ustaw OUI na 10 ms, po zapisaniu połącz się ponownie i zażądaj próbkowania/publikacji 10 ms. W logice klienta używaj skorygowanych interwałów serwera.

Próbkowanie szybsze niż fizyczna częstotliwość akwizycji nie tworzy nowych pomiarów. Opóźnienie sieci, szyfrowanie, obciążenie klienta i ustawienia publikacji wpływają na obserwowany czas odpowiedzi. Server Status / Response Time w UAExpert nie jest interwałem próbkowania ani publikacji subskrypcji.

9.2 Wydajność i limity na żądanie

Tabela 20

Zasób

Limit

SecureChannels

Łącznie 4, w tym nakładanie się połączeń przy ponownym łączeniu

Sesje

2 jednocześnie

Limit czasu sesji

Maksymalny wynegocjowany limit czasu 30 sekund

Subskrypcje

Łącznie 4; 2 na sesję

Monitorowane elementy

Łącznie 64; 32 na subskrypcję

Kolejka monitorowanego elementu

1–16 wartości na element

Oczekujące żądania Publish

4 na sesję

Kolejka retransmisji

16 komunikatów na subskrypcję

Punkty kontynuacji przeglądania

5 na sesję

Minimalne próbkowanie/publikowanie

OUI, 10–5000 ms; domyślnie 100 ms

Operacje Read / Write / Browse

32 na żądanie

Operacje RegisterNodes / TranslateBrowsePaths

32 na żądanie

Operacje wywołania metod Call

8 na żądanie

Operacje monitorowanych elementów

32 na żądanie

Są to limity łączne dla całego serwera, chyba że wskazano zakres sesji/subskrypcji. Jeśli kolejka żądań Publish jest pełna, najstarsze oczekujące żądanie otrzymuje BadTooManyPublishRequests, aby nowe żądanie mogło trafić do kolejki. Potwierdzenia i Republish działają na ograniczonej kolejce retransmisji. Limit operacji Write nie czyni zmiennych tylko do odczytu zapisywalnymi.

Zamykaj sesje prawidłowo. Rozłączony klient może pozostawić poprzednią sesję zajmującą miejsce aż do jej wygaśnięcia. Jeśli to obsługiwane, ponownie wykorzystaj/aktywuj istniejącą sesję; w przeciwnym razie poczekaj na wygaśnięcie. Nowa instancja serwera nie może reaktywować sesji sprzed restartu usługi: utwórz sesję, odszukaj przestrzenie nazw i odtwórz subskrypcje. Klienci TCP nieodbierający danych mogą zostać rozłączeni po jednosekundowym limicie wysyłania.

10. Przykłady integracji

10.1 UAExpert: przechwytywanie stabilnego pomiaru

  1. Obejrzyj instruktaż Neutron NS OPC UA na YouTube

    Przejdź do CS-NEUTRON Scale, kliknij prawym przyciskiem CaptureStableWeight i wybierz Call.

  2. Wprowadź TimeoutMs 5000 i kliknij Call. Zanotuj zwrócony RequestId.

  3. Otwórz GetCapturedMeasurement i wprowadź ten sam RequestId.

  4. Kliknij Call. Jeśli żądanie oczekuje, ponownie wywołaj GetCapturedMeasurement z tym samym identyfikatorem.

  5. Odczytaj Gross, Net, Tare, HR, Stable, Status, ErrorCode, Unit i Timestamp ze zwróconego wyniku. Podczas oczekiwania pozostaw istniejące żądanie przechwytywania aktywne; nie uruchamiaj wielokrotnie nowych przechwytywań.

10.2 Python: bezpieczne połączenie, spójny odczyt i opcjonalne przechwytywanie

Zainstaluj pakiet klienta w środowisku wirtualnym Python:

python -m pip install asyncua

Przygotuj certyfikat aplikacji klienta OPC UA i klucz prywatny. Jego URI aplikacji w SAN musi odpowiadać poniższemu CLIENT_URI. Zatwierdź certyfikat w Neutron i pobierz certyfikat Neutron jako neutron.der. Zastąp punkt końcowy, nazwę użytkownika i URI klienta swoimi wartościami. Plik klucza prywatnego w tym przykładzie jest dostępny dla klienta Python; nie jest to klucz prywatny Neutron.

import asyncio
import getpass

from asyncua import Client, ua
from asyncua.crypto.security_policies import SecurityPolicyBasic256Sha256
from asyncua.ua.uaerrors import UaStatusCodeError

URL = "opc.tcp://192.168.50.73:4840"
NS_URI = "urn:preciz:cs-neutron:weighing:1"
CLIENT_URI = "urn:example:neutron-client"
FIELDS = ("MeasurementId", "Gross", "Net", "Tare", "HR", "Stable",
          "Status", "ErrorCode", "Unit", "Timestamp", "TimeSynchronized")
CAPTURE = False  # Set True when logged in with command permission.


async def main():
    client = Client(URL, timeout=10)
    client.application_uri = CLIENT_URI
    await client.set_security(
        SecurityPolicyBasic256Sha256,
        certificate="client.der",
        private_key="client-key.pem",
        server_certificate="neutron.der",
        mode=ua.MessageSecurityMode.SignAndEncrypt,
    )
    client.set_user(input("Username: "))
    client.set_password(getpass.getpass("Password: "))

    async with client:
        ns = await client.get_namespace_index(NS_URI)
        scale = client.get_node(ua.NodeId("Scale", ns))

        def method(name):
            return ua.NodeId("Scale." + name, ns)

        values = await scale.call_method(method("ReadMeasurement"))
        result = dict(zip(FIELDS, values))
        print("Current snapshot:", result)

        if CAPTURE:
            request_id = await scale.call_method(
                method("CaptureStableWeight"),
                ua.Variant(5000, ua.VariantType.UInt32),
            )
            deadline = asyncio.get_running_loop().time() + 7
            while True:
                try:
                    values = await scale.call_method(
                        method("GetCapturedMeasurement"),
                        ua.Variant(request_id, ua.VariantType.UInt32),
                    )
                    print("Capture", request_id, dict(zip(FIELDS, values)))
                    break
                except UaStatusCodeError as exc:
                    if exc.code != ua.StatusCodes.BadWaitingForInitialData:
                        raise
                    if asyncio.get_running_loop().time() >= deadline:
                        raise TimeoutError("Client capture wait expired") from exc
                    await asyncio.sleep(0.1)


asyncio.run(main())

ReadMeasurement wymaga prawidłowych bieżących danych. Wyjątki takie jak BadSensorFailure lub BadOutOfRange muszą być obsługiwane przez aplikację wywołującą. BadTimeout z GetCapturedMeasurement oznacza upływ limitu czasu przechwytywania na serwerze; nie jest to powód do ponownego użycia starego zapisanego pomiaru jako nowego pomyślnego przechwycenia.

10.3 Python: subskrypcja bieżącej masy

Poniższy kod działa w ramach nawiązanego połączenia async with client. Procedura obsługi sprawdza jakość przed użyciem wartości.

class WeightHandler:
    def datachange_notification(self, node, value, data):
        status = data.monitored_item.Value.StatusCode
        if status.is_good():
            print(node.nodeid.to_string(), value)
        else:
            print("Invalid measurement:", status)


ns = await client.get_namespace_index(NS_URI)
gross = client.get_node(ua.NodeId("Scale.Gross", ns))
subscription = await client.create_subscription(100, WeightHandler())
try:
    await subscription.subscribe_data_change(gross, queuesize=1)
    await asyncio.sleep(30)
finally:
    await subscription.delete()

Żądany interwał publikacji wynosi 100 ms. W razie potrzeby skonfiguruj próbkowanie monitorowanych elementów przez bibliotekę klienta i uwzględniaj skorygowane wartości serwera.

10.4 Sekwencja integracji z PLC

Używaj bloków klienta OPC UA dostarczonych przez producenta PLC. Rozwiązuj łańcuchowe NodeId według URI przestrzeni nazw producenta. Poniżej przedstawiono sekwencję niezależną od producenta, a nie implementację w konkretnym języku programowania PLC:

CONNECT -> TRUST / AUTHENTICATE -> RESOLVE NAMESPACE URI
        -> RESOLVE Scale object and required variable/method NodeIds
        -> CREATE SUBSCRIPTION -> MONITOR LIVE DATA

On a stable-result request:
  Call Scale.CaptureStableWeight(TimeoutMs := UInt32(5000))
  Save returned RequestId
  Call Scale.GetCapturedMeasurement(RequestId)
    BadWaitingForInitialData -> wait 100 ms and repeat retrieval
    Good                    -> store the eleven fields as one record
    BadTimeout              -> report no stable result
    Other failure           -> handle the error; do not use old data

On tare request:
  Call Scale.TareCurrent()
  Save returned command RequestId
  Wait for matching LastCommandId and LastCommandState 3 or 4
  On success read Gross / Net / Tare; on failure read LastCommandResult

Odwzoruj UInt64 MeasurementId na odpowiedni typ całkowitoliczbowy PLC. Nie wysyłaj liczbowego zamiennika Boolean do SetHRFilter. W PLC/aplikacji uszereguj polecenia i własność przechwytywania stabilnego pomiaru, gdy wielu klientów ma uprawnienia do poleceń.

11. Rozwiązywanie problemów, pliki do pobrania i zgodność

11.1 Błędy połączeń i metod

Tabela 21

Objaw / stan

Znaczenie i działanie

BadCommunicationError / odmowa połączenia

Sprawdź, czy OPC UA jest włączony, adres IP/port punktu końcowego, wybraną trasę sieciową i zaporę. Dziennik uruchomienia musi zawierać OPC UA listening on port ...

BadCertificateUntrusted

Oznacz Neutron jako zaufany w kliencie i zatwierdź certyfikat klienta w Neutron lub zainstaluj odpowiedni łańcuch CA

Błędy czasu/URI certyfikatu

Zsynchronizuj zegary i użyj certyfikatu z prawidłowymi datami oraz skonfigurowanym URI aplikacji klienta

BadIdentityTokenRejected / BadUserAccessDenied

Użyj prawidłowej nazwy użytkownika/hasła i wymaganego uprawnienia do poleceń; po powtarzających się nieudanych logowaniach odczekaj 30-sekundową blokadę

BadTooManySessions / osiągnięty limit sesji

Dwa miejsca są zajęte; rozłącz innego klienta lub poczekaj na wygaśnięcie porzuconej sesji

BadNodeIdUnknown

Ponownie odszukaj URI przestrzeni nazw producenta, sprawdź łańcuchowy NodeId rozróżniający wielkość liter i zgodność oprogramowania układowego/modelu

BadTypeMismatch

Użyj dokładnego typu argumentu skalarnego z sekcji 7.1

BadOutOfRange przy CaptureStableWeight

Limit czasu musi mieć typ UInt32 i wartość 100–60000; zero jest nieprawidłowe

BadOutOfRange przy SetFilter / SetTare

Użyj FT 1–1023 lub skończonej nieujemnej tary nieprzekraczającej nośności i 1e9

BadResourceUnavailable

Miejsce na polecenie lub przechwytywanie jest zajęte; poczekaj na bieżącą operację

Wywołanie polecenia Call ma stan Good, ale operacja kończy się niepowodzeniem

Sprawdź zgodne LastCommandState i LastCommandResult; Good potwierdziło tylko dodanie do kolejki

BadNotWritable przy zapisie zmiennych

Zmienne procesowe są tylko do odczytu; użyj obsługiwanej metody

Przechwytywanie BadWaitingForInitialData

Kontynuuj pobieranie tego samego identyfikatora przechwytywania; serwer czeka na prawidłową stabilną próbkę

Przechwytywanie BadTimeout

Żadna odpowiednia stabilna próbka nie nadeszła przed upływem limitu czasu

Przechwytywanie BadNotFound

Użyj zwróconego RequestId przechwytywania; nowsze przechwytywanie lub restart usługi unieważniły stary identyfikator

Brak ServerCapabilities po zmianie oprogramowania układowego

Odśwież przestrzeń adresową lub połącz się ponownie z nowym projektem klienta, aby usunąć zapisane w pamięci podręcznej wyniki przeglądania

Puste/nieaktualne pomiary

Pozostaw akwizycję wagi włączoną, sprawdź ErrorCode i stan natywny oraz jakość DataValue

11.2 Pliki do pobrania i powiązane instrukcje

NodeSet2 opisuje przestrzeń adresową producenta, argumenty metod, referencje i typy na potrzeby narzędzi modelowych offline. Indeksy przestrzeni nazw są lokalne dla tego pliku XML; odszukaj URI przestrzeni nazw w działającym urządzeniu. XML zawiera definicje modelu, a nie bieżące pomiary ani kopię zapasową użytkowników/certyfikatów/ustawień. Interwały w czasie działania i uprawnienia do wykonywania wynikają z aktywnej konfiguracji urządzenia.

11.3 Zgodność wersji

Tabela 22

Model informacyjny

Rozszerzenia interfejsu

1.0

Podstawowe wartości wagowe i metody tarowania/zerowania

1.1.0

Metadane pomiaru, identyfikacja, spójny pomiar i przechwytywanie stabilnego pomiaru

1.2.0

ADC, wartości FT/FC i SetFilter/SetHRFilter

1.3.0

ActiveChannel i SetChannel do odczytu aktywnego kanału i wyboru kanału 1–4.

URI przestrzeni nazw pozostaje urn:preciz:cs-neutron:weighing:1. Istniejące sygnatury metod zostają zachowane; ReadMeasurement/GetCapturedMeasurement zwracają jedenaście pól. Wybierz oprogramowanie układowe zawierające OPC UA i funkcje wymagane przez integrację. Kompilacja oprogramowania układowego bez OPC UA nie może udostępniać punktu końcowego.

Często zadawane pytania

Czy Neutron obsługuje szyfrowany OPC UA?

Tak. Wybierz Basic256Sha256 / SignAndEncrypt, używaj nazwy użytkownika i hasła oraz ustanów wzajemne zaufanie do certyfikatów aplikacji. Dostępny jest również niezabezpieczony tryb None/Anonymous.

Jak uzyskać jeden spójny stabilny pomiar?

Wywołaj CaptureStableWeight z limitem czasu UInt32 100–60000 ms, zachowaj RequestId i pobierz jedenastopolowy wynik przez GetCapturedMeasurement z tym samym identyfikatorem. Podczas oczekiwania ponawiaj pobieranie zamiast rozpoczynać kolejne przechwytywanie.

Czy wywołanie metody ze stanem Good oznacza zakończenie polecenia?

Dla poleceń tarowania, zerowania i filtrów Good potwierdza przyjęcie. Dopasuj LastCommandId do zwróconego RequestId i czekaj na LastCommandState 3 (powodzenie) lub 4 (niepowodzenie).

Jakiego URI przestrzeni nazw i wersji modelu używać?

Przy każdym połączeniu odszukaj urn:preciz:cs-neutron:weighing:1 w NamespaceArray. Model informacyjny do pobrania ma wersję 1.3.0; liczbowy indeks przestrzeni nazw, taki jak 2, jest tylko przykładem.

Potrzebujesz pomocy?

Potrzebujesz pomocy z oprogramowaniem, łącznością lub obsługą rozwiązania? Opisz problem, abyśmy mogli pomóc w następnym kroku.

Przygotuj zgłoszenie →