CSCP – CloudScale Communication Protocol: navodila
Referenčni priročnik CSCP za Neutron: zgradba sporočil, tehtanje, konfiguracija, štetje, kontrolno tehtanje ter digitalni vhodi in izhodi.
PRECIZ · NEUTRON OPC UA
Integracija Neutrona prek OPC UA: varna povezava, sprotni tehtalni podatki, stabilni zajem ter povezovanje s PLC in SCADA.
Revizija navodil: 1.0 · Datum: 17. oktober 2026
Velja za: Neutron s strojno programsko opremo 2.5.0 in podporo OPC UA · Informacijski model proizvajalca 1.2.0
Neutron proizvajalca PRECIZ vključuje strežnik OPC UA za povezovanje s PLC-ji, sistemi SCADA, MES in računalniškimi aplikacijami. Vmesnik uporablja komunikacijo OPC UA Client/Server prek UA-TCP s kodiranjem UA Binary.
Strežnik omogoča:
Sprotno branje bruto, neto in tara mase, bruto mase visoke ločljivosti, surove vrednosti ADC, stabilnosti, statusa tehtnice, kode napake in enote.
Metapodatke meritve: razdelek, decimalna mesta, zmogljivost, mersko enoto in merilno območje.
Identifikacijo naprave in standardne podatke strežnika OPC UA.
Naročnine na spremembe sprotnih vrednosti.
Usklajeno branje enajstih merilnih polj iz istega posnetka.
Asinhroni zajem sveže stabilne meritve in prevzem rezultata.
Tariranje, nastavljeno taro, ničlenje in brisanje tare.
Nastavitev filtra FT in funkcije izmeničnega preklapljanja ADC (chopping) FC.
Dve sočasni seji odjemalcev.
Izbirno šifriranje, zaupanje aplikacijskim certifikatom ter pravice za branje ali branje in izvajanje ukazov.
Vse procesne spremenljivke so samo za branje. Operacije se izvajajo z metodami. Vmesnik ne omogoča poljubnih izvornih ukazov, kalibracije, krmiljenja izhodov, izbire aplikacije, rezultatov štetja, zgodovine, dogodkov ali OPC UA PubSub. Informacijski model je model proizvajalca PRECIZ in ni spremljevalni model OPC UA Weighing ali Device Integration.
Trije načini pridobivanja meritve imajo različne namene:
Vmesnik | Uporaba |
|---|---|
Sprotne spremenljivke in naročnine | Prikaz ali stalno spremljanje posameznih vrednosti |
| Branje vseh enajstih merilnih polj iz enega trenutnega posnetka |
| Zamrznitev sveže veljavne stabilne meritve in prevzem z ID-jem zahteve |
Odprite lokalno konfiguracijsko stran Neutrona ali konfiguracijsko orodje Bluetooth. Za upravljanje uporabnikov in certifikatov uporabite HTTPS ali overjeno povezavo Bluetooth.
Izberite omrežni vmesnik in pridobite dodeljeni naslov IP.
V nastavitvah Scale pustite zajem tehtnice vključen.
Odprite zavihek OPC UA. Strojna programska oprema mora prikazovati razpoložljivo podporo OPC UA.
Za šifriran dostop najprej ustvarite uporabnika v Users & permissions.
V Settings vključite strežnik in izberite varnostni način. Za začetno povezavo ohranite vrata 4840 in najmanjši interval 100 ms.
Kliknite Save. Naslov povezave kopirajte z Copy endpoint.
Primer končne točke:
opc.tcp://192.168.50.73:4840Dodajte končno točko kot strežnik v UAExpert.
V šifriranem načinu izberite Basic256Sha256 / SignAndEncrypt in overjanje Username/Password. V nezaščitenem načinu izberite None in Anonymous.
Za šifriran dostop primerjajte certifikat Neutrona in mu zaupajte. Če Neutron še ne zaupa certifikatu odjemalca, sledite poglavju 4.2 in se povežite znova.
Povežite se in odprite Objects → CS-NEUTRON Scale. NodeId objekta je Scale, prikazano ime pa CS-NEUTRON Scale.
Povlecite Gross, Net, Tare, Stable, Status, ErrorCode in Unit v Data Access View.
V priročnem meniju Data Access View nastavite interval objavljanja naročnine in interval vzorčenja spremljanih elementov; za začetek oba na 100 ms.
Vrednost uporabite le, ko je njen OPC UA StatusCode Good. ErrorCode=1 pomeni, da tehtnica nima izvorne napake. Status=1 ali Status=3 označuje stabilen prikaz.
Končna točka ima obliko opc.tcp://<assigned-device-IP>:<port>. Uporabite naslov izbranega vmesnika Wi-Fi, Ethernet ali LTE. Zavihek OPC UA prikaže naslov in omogoča kopiranje. Stalen naslov IP poenostavi integracijo.
V napravi ni treba nastaviti naslova IP krmilnika PLC. Dovolite dohodni promet TCP na izbrana vrata. Odjemalec potrebuje omrežno pot do Neutrona; naslov LTE za operaterjevim NAT ni samodejno dostopen od zunaj. Uporabite ustrezno usmerjeno omrežje, zasebni APN ali VPN.
Nastavitev | Ključ | Privzeto | Vrednosti / učinek |
|---|---|---|---|
Razpoložljivost OPC UA | OUB | Odvisno od strojne programske opreme | Samo branje: 0 ni na voljo, 1 na voljo |
Varnostna podpora | OUS | Odvisno od strojne programske opreme | Samo branje: 0 ni na voljo, 1 na voljo |
Strežnik OPC UA | OUE | Izključen | 0 izključen, 1 vključen |
Vrata TCP | OUP | 4840 | 1024–65535; izberite nezasedena vrata storitve |
Najmanjši interval posodabljanja | OUI | 100 ms | 10–5000 ms; najmanjši interval vzorčenja in objavljanja, ki ga strežnik sprejme |
Varnost povezave | OUM | Nezaščitena | 0 None/anonymous; 1 Basic256Sha256/SignAndEncrypt z uporabniškim imenom in geslom |
Anonimni dostop do ukazov | OUC | Izključen | Samo v nezaščitenem načinu: 0 samo branje; 1 dovoljeni vsi podprti ukazi |
Shranjevanje nastavitev OPC UA ponovno zažene storitev in prekine povezave odjemalcev. Tudi spremembe uporabnikov in zaupanja ponovno zaženejo storitev. Nato se povežite znova. Uporabljajo se obstoječe nastavitve naslova IP, tehtnice in ure.
Najmanjši interval je spodnja meja, ne fiksna perioda prenosa ali zagotovilo zakasnitve celotne povezave. Odjemalci zahtevajo svoje intervale in morajo upoštevati popravljene vrednosti, ki jih vrne strežnik.
Način | Politika / varnost sporočil | Overjanje | Pravica za ukaze |
|---|---|---|---|
Nezaščiten | None / None | Anonymous | Določa nastavitev Anonymous command access |
Šifriran | Basic256Sha256 / SignAndEncrypt | Uporabniško ime in geslo ter zaupan aplikacijski certifikat odjemalca | Določa pravica uporabnika |
V šifriranem načinu anonimne seje in prijava uporabnika s certifikatom niso podprte. Aplikacijski certifikat odjemalca identificira programsko opremo in ne nadomesti uporabniškega imena ter gesla. PIN spletne konfiguracije in certifikat HTTPS sta ločena od poverilnic in certifikatov OPC UA.
Nezaščiten način uporabljajte v zaupanja vrednem, izoliranem omrežju. Ne šifrira podatkov in ne overja posameznih uporabnikov.
Odprite nastavitve OPC UA prek HTTPS ali overjene povezave Bluetooth.
Dodajte uporabnika. Uporabniška imena imajo 1–64 znakov ASCII: črke, številke, podčrtaje ali vezaje. Velikost črk je pomembna. Gesla imajo 12–128 znakov. Podprtih je največ osem uporabnikov; privzetega računa OPC UA ni.
Izberite Read only ali Read and execute commands.
Vključite šifrirani OPC UA in shranite. Ura naprave mora biti sinhronizirana in obstajati mora vsaj en uporabnik. Varni zagon počaka na sinhronizacijo ure.
Ob prvem varnem zagonu Neutron ustvari zasebni ključ in samopodpisani aplikacijski certifikat RSA-2048 z veljavnostjo pet let.
V odjemalcu primerjajte prstni odtis SHA-256 certifikata Neutrona s prikazom v konfiguracijskem vmesniku in nato certifikatu zaupajte.
Poskusite vzpostaviti šifrirano povezavo. Neutron neznani aplikacijski certifikat odjemalca zavrne in ga v Certificates prikaže kot rejected.
Kliknite Refresh certificates and users, primerjajte prstni odtis odjemalca in kliknite Approve pri tem certifikatu.
Znova se povežite z uporabniškim imenom in geslom.
Odjemalec mora zaupati Neutronu, da lahko postopek nadaljuje do pošiljanja lastnega certifikata. Odobritev ne izključi preverjanja veljavnosti, podpisa, uporabe ključa ali aplikacijskega URI-ja.
Operacija | Samo branje | Branje in izvajanje ukazov |
|---|---|---|
Branje spremenljivk / naročnine | Da | Da |
ReadMeasurement | Da | Da |
GetCapturedMeasurement | Da | Da |
CaptureStableWeight | Ne | Da |
TareCurrent, SetTare, Zero, ClearTare | Ne | Da |
SetFilter, SetHRFilter | Ne | Da |
Pisanje spremenljivk / upravljanje uporabnikov ali certifikatov prek OPC UA | Ne | Ne |
Shranjeni vlogi Reader in Operator ustrezata tema pravicama. Ločenih ravni pravic za posamezne ukaze ni. Pri šifriranju veljajo pravice uporabnika, OUC se ne upošteva. V nezaščitenem načinu OUC dovoli vse podprte ukaze ali nobenega.
Pet neuspešnih prijav povzroči 30-sekundno blokado prijav za celoten strežnik, kar lahko začasno vpliva tudi na druge uporabnike. Gesla se hranijo kot zgoščene vrednosti PBKDF2-HMAC-SHA256 s soljo; administracija ne izvaža gesel ali zasebnih ključev.
Aplikacijski URI Neutrona:
urn:preciz:cs-neutron:<MID>Ustvarjeni certifikat vključuje ta URI, ime gostitelja <MID>.local z malimi črkami in naslov IP ob ustvarjanju. Ohranite stalen naslov ali izdajte nadomestni certifikat z naslovi, ki jih uporabljajo odjemalci.
Za izrecno zaupane samopodpisane aplikacijske certifikate certifikat CA ni potreben. Za PKI podjetja:
Izberite Create and download CSR. Zahteva CSR uporabi obstoječi ključ naprave.
CA naj izda aplikacijski certifikat OPC UA z ohranjenim aplikacijskim URI-jem v SAN, ustrezno razširjeno uporabo ključa za strežnik/odjemalca ter uporabo za digitalni podpis in šifriranje ključa.
Uvozite ga kot CA-signed device certificate. Zasebni ključ se mora ujemati z obstoječim ključem Neutrona. V odjemalca namestite potrebno verigo CA.
Za zaupanje odjemalcem s certifikati CA uvozite korenski CA kot Trusted client certificate or CA, vmesne CA pa kot Intermediate issuer CA. Sam vnos vmesnega izdajatelja ne podeli zaupanja.
Če uporabljate preverjanje preklica, uvozite sezname CRL s podpisom CA kot Certificate revocation list in jih posodobite pred iztekom. Najprej uvozite njihove izdajatelje CA.
Podprt je uvoz PEM ali DER do 8192 bajtov na datoteko. Vsaka shramba zaupanih, zavrnjenih, izdajateljskih certifikatov in CRL hrani največ 12 vnosov. Ko je shramba zavrnjenih polna, odstranite zastarele vnose. Preverjajo se datumi in podpis izdajatelja nameščenih CRL; pretečeni CRL zavrnejo zadevne nove povezave. Brez nameščenih CRL se preklic ne preverja. Samodejnega prenosa CRL, OCSP ali upravljanja GDS ni.
Za obnovo ustvarite CSR in uvozite obnovljeni certifikat. Pretečeni certifikat naprave prepreči varen zagon. Replace device identity odstrani trenutni ključ/certifikat/CSR in ob naslednjem varnem zagonu ustvari novo identiteto; odjemalci ji morajo znova zaupati. Uporabniki in zaupani odjemalci se ohranijo.
Uporabniki in shrambe certifikatov se ohranijo pri običajnih ponovnih zagonih in posodobitvah OTA. Brisanje datotečnega sistema naprave jih odstrani. Pred predajo naprave drugemu lastniku izrecno odstranite stare uporabnike in vnose zaupanja.
URI imenskega prostora proizvajalca:
urn:preciz:cs-neutron:weighing:1Ob vsaki povezavi razrešite URI v Server/NamespaceArray. Ne zapišite indeksa 1 ali 2 trajno v program. Pripona :1 pripada stalnemu URI-ju imenskega prostora; različica prenosljivega modela je 1.2.0.
Primer dveh zapisov iste spremenljivke:
nsu=urn:preciz:cs-neutron:weighing:1;s=Scale.Gross
ns=2;s=Scale.GrossŠtevilski zapis velja samo, ko strežnik temu URI-ju trenutno dodeli indeks 2. Če odjemalec ne podpira sintakse nsu=, razrešite URI in sestavite NodeId s številskim indeksom. Identifikatorji proizvajalca so nizi, občutljivi na velikost črk, vključno s pikami v Scale.Gross.
Mesto v naslovnem prostoru | Nizovni NodeId objekta |
|---|---|
Objects / CS-NEUTRON Scale |
|
Objects / Device |
|
Objects / Server | Standardni imenski prostor 0, številski NodeId |
Metode kličite z Scale kot nadrejenim ObjectId in z NodeId metode kot MethodId.
Gross, Net in Tare so vrednosti Double, normalizirane na nastavljeno število decimalnih mest. HR je bruto masa visoke ločljivosti pred zaokroževanjem prikaza, ne neto masa ali surovi ADC. Vse mase uporabljajo trenutno Scale.Unit; OPC UA ne pretvarja enot. Prenosni tip Double ne izboljša točnosti senzorja.
Binarna plavajoča vejica ne predstavi vsake decimalne vrednosti natančno. Prikaz oblikujte s Scale.Decimals, za tehtalni korak pa uporabite Scale.Division. HR se lahko prikaže v znanstvenem zapisu: 9.31e-5 kg pomeni 0.0000931 kg.
Neutron prekopira zadnje tehtalne vrednosti v posnetek OPC UA približno vsakih min(OUI, 50) milisekund, odvisno od razpoložljivosti zajema. Branje ali naročnina ne sprožita dodatne pretvorbe ADC.
SourceTimestamp označuje čas merilnega posnetka pri sinhronizirani uri naprave. Pred sinhronizacijo ga ni. ServerTimestamp je strežnikov časovni žig DataValue in ni nujno enak SourceTimestamp. Časovni žigi OPC UA uporabljajo UTC.
Posamezna branja ali obvestila naročnin lahko pripadajo različnim posnetkom. Kadar morajo polja pripadati isti meritvi, uporabite ReadMeasurement ali zajeti rezultat. Nespremenjena spremljana vrednost ne povzroči nujno novega obvestila ob vsakem intervalu.
DataValue StatusCode | Pomen / ukrep odjemalca |
|---|---|
Good | Vrednost je uporabna; po potrebi preverite Stable in izvorni status |
BadNoCommunication | Ni posnetka ali več kot dve sekundi ni novega posnetka; sprotno meritev zavrzite |
BadSensorFailure | Izvorna napaka tehtnice; preverite ErrorCode |
BadOutOfRange | Podobremenitev ali preobremenitev; meritev zavrzite |
Kakovost velja za mase, ADC in Stable. Status, ErrorCode in Unit ostanejo berljivi med izvornimi napakami tehtnice, a postanejo zastareli, če se posnetki nehajo posodabljati. Diagnostika ukazov/zajema ostane berljiva neodvisno od kakovosti sprotne tehtnice. Metapodatki opisujejo konfiguracijo; njihov status Good ne dokazuje veljavnosti sprotnega rezultata tehtanja.
Vsi spodnji vnosi so samo za branje. NodeId so nizovni identifikatorji proizvajalca, razen označenih v standardnem imenskem prostoru 0. Vsi skalarni vnosi imajo ValueRank −1.
Nizovni NodeId | Tip | Enota | Opis |
|---|---|---|---|
| Double | Scale.Unit | Zaokrožena bruto masa |
| Double | Scale.Unit | Zaokrožena neto masa |
| Double | Scale.Unit | Uveljavljena tara |
| Double | Scale.Unit | Nezaokrožena bruto masa visoke ločljivosti |
| Int32 | Enote ADC | Obstoječa vrednost ADC tehtnice, prekopirana s posnetkom; brez dodatnega branja strojne opreme |
| Boolean | — | Zastavica stabilnosti tehtnice |
| UInt16 | — | Status prikaza; spodnja tabela |
| UInt16 | — | Izvorna napaka; 1 pomeni brez napake |
| String | — | Nastavljena enota, npr. kg ali g |
| UInt16 | Decimalna mesta | Število decimalnih mest prikazane mase |
| Double | Scale.Unit | Aktivni tehtalni razdelek |
| Double | Scale.Unit | Zmogljivost aktivnega območja |
| UInt16 | — | Aktivna nastavitev FT, 1–1023 |
| Boolean | — | Nastavitev FC: false izključeno, true vključeno; krmili ADC chopping |
ADC ni ločeno odčitavanje posameznih merilnih celic. Spremenljivka mV ni na voljo. Kljub imenu HRFilter krmili obstoječo funkcijo FC/ADC chopping, ne programskega filtra samo za spremenljivko OPC UA HR.
Scale.Status | Pomen |
|---|---|
0 | Podobremenitev |
1 | V območju ničle |
2 | Nestabilno |
3 | Stabilno |
4 | Preobremenitev |
255 | Posnetek ni inicializiran |
Za zastavico stabilnosti uporabite Scale.Stable. Scale.Status in OPC UA StatusCode sta ločena pojma; izvorni status 3 ni koda kakovosti OPC UA.
Scale.ErrorCode | Pomen |
|---|---|
1 | Brez napake |
99 | Časovna omejitev ukaza |
98 | Neznan ukaz |
97 | Tehtnica izključena |
96 | Manjka kalibracija |
95 | Manjkajo meroslovni podatki |
94 | Napaka statusnega registra ADC |
93 | Napaka reference ADC |
92 | Napaka načina pretvorbe ADC |
91 | Napaka konfiguracije ure ADC |
90 | Napaka konfiguracije enega cikla ADC |
89 | Napaka konfiguracije izločitvenega filtra ADC |
88 | Neujemanje filtra ADC |
87 | Napaka konfiguracije kanala ADC |
86 | Neujemanje nastavitve ADC chopping |
85 | Napaka bipolarnega načina ADC |
84 | Napaka konfiguracije zunanje reference ADC |
83 | Neujemanje ojačenja ADC |
82 | Napaka filtra povprečenja ADC |
Lastnosti imajo spodnje nizovne NodeId proizvajalca. Njihovi BrowseName so v imenskem prostoru 0, na primer 0:EngineeringUnits.
Vzorec nizovnega NodeId | Tip | Pomen |
|---|---|---|
| EUInformation | Metapodatki enote |
| Range | Spodnja/zgornja meja merilnega območja |
| Double | Izvoženo število decimalnih mest, enako Decimals |
EURange je [0, Capacity], pri Net pa [-Capacity, Capacity]. Merilno območje je metapodatek, ne navodilo za omejevanje vrednosti. ValuePrecision je število decimalnih mest, ne razdelek ali specifikacija točnosti. HR nima lastnosti ValuePrecision.
EngineeringUnits uporablja kode UN/CEFACT za kg (4933453), g (4674125), lb (4997714) in oz (5197402). Drugi simboli enot imajo UnitId −1 in prazen standardni imenski prostor. Po spremembi enote, območja ali konfiguracije tehtnice osvežite metapodatke.
Nizovni NodeId | Tip | Opis |
|---|---|---|
| UInt32 | ID zadnjega sprejetega ukaza tare/ničlenja/filtra |
| UInt16 | 0 mirovanje; 1 v vrsti; 2 izvajanje; 3 uspešno; 4 neuspešno |
| String | Izvorni odgovor ali razlog zavrnitve |
| UInt32 | ID zadnje sprejete zahteve za stabilni zajem |
| UInt16 | 0 mirovanje; 1 čakanje; 2 zaključeno; 3 časovna omejitev |
ID-ji ukazov in zajemov so ločeni zaporedji. Obe si delijo vsi odjemalci, veljata samo med delovanjem storitve in se ob njenem ponovnem zagonu ponastavita.
Nizovni NodeId | Tip | Opis |
|---|---|---|
| String | PRECIZ |
| String | Model naprave |
| String | MID |
| String | Različica strojne programske opreme |
| String | Različica strojne opreme |
| String | Nastavljeno ime naprave |
Identifikacijske vrednosti se naložijo ob zagonu OPC UA. Po spremembi imena naprave ponovno zaženite storitev, da osvežite DeviceName.
Naslednje poti so relativne glede na Objects / Server in uporabljajo imenski prostor 0.
Pot za brskanje | Tip / vrednost |
|---|---|
ServerArray | String[]; indeks 0 je aplikacijski URI naprave |
NamespaceArray | String[]; indeks 0 je imenski prostor OPC UA, indeks 1 je aplikacijski URI naprave; v tem polju razrešite URI proizvajalca |
ServerStatus | ServerStatusDataType |
ServerStatus/StartTime, CurrentTime | DateTime, deklariran UtcTime |
ServerStatus/State | ServerState; 0 Running pri običajnem delovanju |
ServerStatus/SecondsTillShutdown | UInt32; 0, kadar zaustavitev ni načrtovana |
ServerStatus/ShutdownReason | LocalizedText |
ServerStatus/BuildInfo | BuildInfo: ProductUri, ManufacturerName, ProductName, SoftwareVersion, BuildNumber, BuildDate |
ServiceLevel | Byte; 255 pri običajnem delovanju |
Auditing | Boolean; false |
VendorServerInfo | Objekt s podatki proizvajalca |
ServerRedundancy/RedundancySupport | RedundancySupport; 0 None |
ServerCapabilities/ServerProfileArray | String[]; URI-ji izvedbenega profila in funkcijskih sklopov |
ServerCapabilities/LocaleIdArray | LocaleId[]; en |
ServerCapabilities/MinSupportedSampleRate | Duration v ms; aktivni minimum OUI |
ServerCapabilities/MaxBrowseContinuationPoints | UInt16; 5 na sejo |
ServerCapabilities/SoftwareCertificates | SignedSoftwareCertificate[]; prazno |
ServerCapabilities/ModellingRules, AggregateFunctions | Mape |
ServerCapabilities/OperationLimits | Omejitve na zahtevo iz poglavja 9 |
Standardne spremenljivke polj imajo ValueRank 1 in ArrayDimensions [0]; ničla pomeni nedoločeno največjo dolžino. ServerProfileArray označuje izvedbeni cilj Micro Embedded Device 2017 in aktivne sklope prenosa/metod/varnosti. Identifikator profila ni certifikacijska oznaka OPC Foundation.
Vsako metodo kličite na nadrejenem objektu Scale. Podajte skalarne argumente s točno prikazanimi tipi OPC UA; za argument UInt32 ali Boolean ne uporabite String, Int32 ali Double.
Nizovni NodeId metode | Vhodni argumenti | Izhod | Pravica |
|---|---|---|---|
| Brez | Enajst merilnih polj, poglavje 8.1 | Branje |
| TimeoutMs: UInt32 | RequestId: UInt32 | Izvajanje |
| RequestId: UInt32 | Enajst merilnih polj, poglavje 8.1 | Branje |
| Brez | RequestId: UInt32 | Izvajanje |
| Value: Double | RequestId: UInt32 | Izvajanje |
| Brez | RequestId: UInt32 | Izvajanje |
| Brez | RequestId: UInt32 | Izvajanje |
| Value: UInt16 | RequestId: UInt32 | Izvajanje |
| Enabled: Boolean | RequestId: UInt32 | Izvajanje |
Tarira trenutno stabilno bruto maso z izvorno operacijo T. Taro nastavi na bruto maso, neto pa postane nič; ničelne točke bruto mase ne spremeni. Tehtnica mora operacijo stabilnega tariranja sprejeti znotraj časovne omejitve ukaza.
Primer z 1,11 kg na tehtnici: Gross ostane 1,11 kg, Tare postane 1,11 kg, Net pa 0,00 kg. Izvorni uspešni odgovor je oblike T S 1.11 kg.
Nastavi prednastavljeno taro v Scale.Unit z izvorno operacijo TA. Value mora biti končen, nenegativen, največ 1.000.000.000 in največ enak zmogljivosti tehtnice. Uveljavljena tara se zaokroži na razdelek tehtnice. Po zaključku preberite Scale.Tare za dejansko uveljavljeno vrednost. Primer vhoda: Double 0.250, kadar je Unit kg.
Izvede izvorni Z ob upoštevanju stabilnosti in nastavljenega območja ničlenja. Ob uspehu prilagodi ničelno točko in izbriše obstoječo uveljavljeno/prednastavljeno taro. Izvorni uspešni odgovor je Z A. To se razlikuje od TareCurrent.
Izvede izvorni TAC in odstrani uveljavljeno ter prednastavljeno taro. Gross se ohrani, Net pa postane enak Gross. Vhodnih argumentov ni.
Value je UInt16, 1–1023 vključno. S tem prek obstoječe konfiguracijske funkcije filtra nastavite FT za aktivni kanal tehtnice. Nič in vrednosti nad 1023 vrnejo BadOutOfRange. Primer: UInt16 512.
Enabled je Boolean: true vključi FC/ADC chopping, false ga izključi. Številska vrednost, poslana s številskim tipom OPC UA, ni Boolean in se zavrne.
FT in FC se aktivirata in shranita za aktivni kanal prek izvornih konfiguracijskih funkcij. Neuspešno preverjanje strojne opreme pomeni neuspešen rezultat ukaza. Zajem se med uveljavljanjem nastavitve lahko ustavi. Po zaključku preberite Scale.Filter ali Scale.HRFilter za aktivno nastavitev.
Za TareCurrent, SetTare, Zero, ClearTare, SetFilter in SetHRFilter:
Pokličite metodo in shranite vrnjeni RequestId.
Berite ali naročite se na LastCommandId, LastCommandState in LastCommandResult.
Rezultat povežite samo z ujemajočim se LastCommandId.
Stanje 3 pomeni uspeh, 4 neuspeh. Stanji 1 in 2 pomenita čakanje oziroma izvajanje.
Po uspešnem zaključku preberite spremenjene procesne/konfiguracijske vrednosti.
Rezultat klica Good potrjuje sprejem, ne zaključka. V vrsti ali izvajanju je lahko samo en tak ukaz; naslednji prejme BadResourceUnavailable. Še vedno veljajo obstoječi pogoji stabilnosti, razpoložljivosti, zasedenosti in blokade aplikacije.
Mesto za ukaz in diagnostika zadnjega rezultata sta skupna celotni napravi. Če ukaze pošiljata dva odjemalca, uskladite pisce: poznejši ukaz lahko zamenja zadnjo zaključeno diagnostiko, preden jo drugi prebere. Diagnostika ni zgodovina ukazov.
ID-ji zahtev niso trajni identifikatorji operacij. Po izgubi povezave pred ponovitvijo ukaza z neznanim izidom preverite dejansko stanje tehtnice. Ponovni zagon storitve izbriše diagnostiko in prekliče nedokončane ukaze tehtnice v lasti OPC UA; že izvedenega tariranja, ničlenja ali spremembe nastavitve ne razveljavi.
ReadMeasurement() takoj vrne zadnji veljavni posnetek. Ne čaka na stabilnost in ne zahteva novega odčitka ADC. GetCapturedMeasurement vrne enak izhodni podpis za zamrznjen stabilni rezultat.
Položaj (od nič) | Argument | Tip OPC UA | Pomen |
|---|---|---|---|
0 | MeasurementId | UInt64 | Zaporedna številka posnetka |
1 | Gross | Double | Bruto masa |
2 | Net | Double | Neto masa |
3 | Tare | Double | Uveljavljena tara |
4 | HR | Double | Bruto masa visoke ločljivosti |
5 | Stable | Boolean | Stabilnost tega posnetka |
6 | Status | UInt16 | Izvorni status tehtnice |
7 | ErrorCode | UInt16 | Izvorna koda napake tehtnice |
8 | Unit | String | Enota tega rezultata |
9 | Timestamp | DateTime | UTC čas posnetka ali nič, če ura ni sinhronizirana |
10 | TimeSynchronized | Boolean | Ali je Timestamp uporaben kot koledarski čas |
Vsa polja pripadajo istemu posnetku. MeasurementId narašča za vsak posnetek OPC UA, ne za vsako fizično pretvorbo ADC, in se ponastavi s storitvijo. Pri shranjevanju ohranite natančnost UInt64. ADC, metapodatki in filtri so ločena sprotna vozlišča in niso vključeni v ta enajstpoljni rezultat metode.
Če je TimeSynchronized false, Timestamp ne razlagajte kot koledarski datum. ReadMeasurement vrne BadNoCommunication, BadSensorFailure ali BadOutOfRange, kadar sprotni posnetek manjka/je zastarel, ima izvorno napako ali je izven območja.
Pokličite CaptureStableWeight(TimeoutMs) z UInt32 100–60000 ms. Na primer 5000 omogoči do pet sekund čakanja na veljavno stabilno meritev. Nič ni veljavna vrednost.
Shranite vrnjeni UInt32 RequestId.
Pokličite GetCapturedMeasurement(RequestId) s tem ID-jem. Med čakanjem vrne BadWaitingForInitialData. Prevzem ponavljajte z zmernim intervalom, na primer 100 ms.
Ob uspehu shranite vseh enajst polj skupaj z RequestId zajema.
Lahko se naročite tudi na LastCaptureId in LastCaptureState ter rezultat prevzamete, ko ujemajoča se zahteva doseže stanje 2.
LastCaptureState | Pomen |
|---|---|
0 | Mirovanje |
1 | Čakanje |
2 | Zaključeno; rezultat je na voljo |
3 | Časovna omejitev |
Zajeti posnetek mora biti objavljen po začetku zahteve ter biti stabilen, svež, brez izvornih napak in znotraj območja. Neveljavni posnetki se preskakujejo do primernega posnetka ali izteka časa. Če je tehtnica že stabilna, lahko naslednji veljavni posnetek zajem zaključi takoj; prehod iz nestabilnega v stabilno stanje ali dodatno obdobje zadrževanja nista potrebna.
Operacija ne tarira ali ničli tehtnice in ne blokira drugih odjemalcev. Čaka lahko samo en zajem. Celotna naprava hrani en zamrznjen rezultat, skupen vsem odjemalcem. Ostane nespremenjen tudi ob spremembi ali nedostopnosti sprotne mase. Nov zajem nadomesti prejšnjo zahtevo/rezultat. Zgodovine zajemov ni.
Rezultat GetCapturedMeasurement | Pomen |
|---|---|
Good | Vrne zamrznjeni rezultat |
BadWaitingForInitialData | Ujemajoči se zajem še čaka |
BadTimeout | Čas ujemajočega se zajema je potekel brez veljavne stabilne meritve |
BadNotFound | ID je nič, neznan, nadomeščen ali po ponovnem zagonu ni več na voljo |
BadNoData | Za ujemajoče se stanje zajema ni zaključenega rezultata |
Za vhod v GetCapturedMeasurement uporabite RequestId zajema, ne MeasurementId rezultata. Zajem se lahko zaključi po odklopu začetnega odjemalca. Po ponovni povezavi ga lahko prevzamete z istim ID-jem, če je storitev OPC UA ves čas delovala. Ponovni zagon izbriše čakajoče zajeme, rezultate in ID-je; uskladite zahteve za zajem med odjemalci.
Parameter | Pomen |
|---|---|
OUI | Nastavljena spodnja meja vzorčenja in objavljanja |
Interval vzorčenja | Kako pogosto se vzorči spremljani element |
Interval objavljanja | Kako pogosto naročnina lahko objavi čakajoča obvestila |
Velikost vrste | Število shranjenih obvestil na spremljani element |
Keepalive | Potrditev aktivne naročnine, kadar ni obvestil |
Za sprotni prikaz začnite s 100–250 ms in vrsto velikosti 1. Za najhitrejšo razpoložljivo posodobitev nastavite OUI na 10 ms, se po shranjevanju znova povežite in zahtevajte vzorčenje/objavljanje 10 ms. V logiki odjemalca uporabite popravljene intervale strežnika.
Hitrejše vzorčenje od fizičnega zajema ne ustvari novih meritev. Omrežna zakasnitev, šifriranje, obremenitev odjemalca in nastavitve objavljanja vplivajo na opažen odziv. UAExpert Server Status / Response Time ni interval vzorčenja ali objavljanja naročnine.
Vir | Omejitev |
|---|---|
SecureChannels | Skupaj 4, vključno s prekrivanjem ob ponovni povezavi |
Seje | 2 sočasni |
Časovna omejitev seje | Največji dogovorjeni čas 30 sekund |
Naročnine | Skupaj 4; 2 na sejo |
Spremljani elementi | Skupaj 64; 32 na naročnino |
Vrsta spremljanega elementa | 1–16 vrednosti na element |
Čakajoče zahteve Publish | 4 na sejo |
Vrsta za ponovni prenos | 16 sporočil na naročnino |
Nadaljevalne točke brskanja | 5 na sejo |
Najmanjši interval vzorčenja/objavljanja | OUI, 10–5000 ms; privzeto 100 ms |
Operacije Read / Write / Browse | 32 na zahtevo |
Operacije RegisterNodes / TranslateBrowsePaths | 32 na zahtevo |
Operacije Method Call | 8 na zahtevo |
Operacije spremljanih elementov | 32 na zahtevo |
Če ni navedena omejitev na sejo/naročnino, gre za skupne omejitve strežnika. Ko je vrsta Publish polna, najstarejša čakajoča zahteva prejme BadTooManyPublishRequests, da lahko strežnik uvrsti novo. Potrjevanje in Republish uporabljata omejeno vrsto za ponovni prenos. Omejitev operacij Write ne omogoči pisanja v spremenljivke samo za branje.
Seje pravilno zaprite. Odklopljeni odjemalec lahko do izteka še zaseda mesto s prejšnjo sejo. Kjer je podprto, ponovno uporabite/aktivirajte obstoječo sejo, sicer počakajte na iztek. Nova instanca strežnika ne more ponovno aktivirati seje iz časa pred ponovnim zagonom: ustvarite sejo, razrešite imenske prostore in obnovite naročnine. Odjemalci TCP, ki ne prevzemajo podatkov, se lahko odklopijo po enosekundnem roku za pošiljanje.
Odprite CS-NEUTRON Scale, z desno tipko izberite CaptureStableWeight in nato Call.
Vnesite TimeoutMs 5000 in kliknite Call. Zapišite vrnjeni RequestId.
Odprite GetCapturedMeasurement in vnesite isti RequestId.
Kliknite Call. Če zajem še čaka, ponovite GetCapturedMeasurement z istim ID-jem.
Iz rezultata preberite Gross, Net, Tare, HR, Stable, Status, ErrorCode, Unit in Timestamp. Med čakanjem pustite obstoječi zajem delovati; ne začenjajte vedno novih zajemov.
Odjemalski paket namestite v virtualno okolje Python:
python -m pip install asyncuaPripravite aplikacijski certifikat odjemalca OPC UA in zasebni ključ. Aplikacijski URI v SAN mora ustrezati CLIENT_URI spodaj. Na Neutronu odobrite certifikat in prenesite certifikat Neutrona kot neutron.der. Zamenjajte končno točko, uporabniško ime in URI odjemalca s svojimi vrednostmi. Zasebni ključ v tem primeru pripada odjemalcu Python; ni zasebni ključ Neutrona.
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 zahteva veljavne sprotne podatke. Klicna aplikacija mora obravnavati izjeme, kot sta BadSensorFailure in BadOutOfRange. BadTimeout iz GetCapturedMeasurement pomeni iztek časa zajema na strežniku; ni razlog, da bi star shranjeni rezultat uporabili kot nov uspešen zajem.
Naslednja koda deluje znotraj že vzpostavljene povezave async with client. Obravnavalnik pred uporabo vrednosti preveri kakovost.
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()Zahtevani interval objavljanja je 100 ms. Po potrebi prek odjemalske knjižnice nastavite vzorčenje spremljanih elementov in upoštevajte popravljene vrednosti strežnika.
Uporabite odjemalske bloke OPC UA proizvajalca PLC. Nizovne NodeId razrešite prek URI-ja imenskega prostora proizvajalca. Naslednji primer je zaporedje, neodvisno od proizvajalca, ne izvedba v konkretnem programskem jeziku 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 LastCommandResultUInt64 MeasurementId preslikajte v ustrezen celoštevilski tip PLC. Metodi SetHRFilter ne pošiljajte številskega nadomestka za Boolean. Če ima več odjemalcev pravico za ukaze, v PLC/aplikaciji zaporedno uskladite ukaze in lastništvo stabilnega zajema.
Simptom / status | Pomen in ukrep |
|---|---|
BadCommunicationError / zavrnjena povezava | Preverite vklop OPC UA, IP/vrata končne točke, omrežno pot in požarni zid. Zagonski dnevnik mora vsebovati |
BadCertificateUntrusted | V odjemalcu zaupajte Neutronu in v Neutronu odobrite certifikat odjemalca ali namestite ustrezno verigo CA |
Napake časa/URI-ja certifikata | Sinhronizirajte uri ter uporabite certifikat z veljavnimi datumi in nastavljenim aplikacijskim URI-jem odjemalca |
BadIdentityTokenRejected / BadUserAccessDenied | Uporabite pravilno ime/geslo in potrebno pravico za ukaze; po ponavljajočih se neuspehih počakajte na iztek 30-sekundne blokade |
BadTooManySessions / dosežena omejitev sej | Dve mesti sta zasedeni; odklopite drugega odjemalca ali počakajte na iztek opuščene seje |
BadNodeIdUnknown | Znova razrešite URI proizvajalca, preverite velikost črk v nizovnem NodeId in združljivost strojne programske opreme/modela |
BadTypeMismatch | Uporabite točen skalarni tip argumenta iz poglavja 7.1 |
BadOutOfRange pri CaptureStableWeight | Čas mora biti UInt32 100–60000; nič ni veljavna |
BadOutOfRange pri SetFilter / SetTare | Uporabite FT 1–1023 ali končno nenegativno taro znotraj zmogljivosti in 1e9 |
BadResourceUnavailable | Mesto za ukaz ali zajem je zasedeno; počakajte na trenutno operacijo |
Klic ukaza vrne Good, operacija pa ne uspe | Preverite ujemajoča se LastCommandState in LastCommandResult; Good potrjuje le uvrstitev |
BadNotWritable pri pisanju spremenljivk | Procesne spremenljivke so samo za branje; uporabite podprto metodo |
Zajem BadWaitingForInitialData | Nadaljujte prevzem istega ID-ja; strežnik čaka na veljaven stabilen vzorec |
Zajem BadTimeout | Do roka ni prispel ustrezen stabilen vzorec |
Zajem BadNotFound | Uporabite vrnjeni RequestId zajema; novejši zajem ali ponovni zagon je razveljavil stari ID |
Po spremembi strojne programske opreme manjka ServerCapabilities | Osvežite naslovni prostor ali se povežite s svežim projektom odjemalca, da odstranite predpomnjene rezultate brskanja |
Prazne/zastarele meritve | Zajem tehtnice naj ostane vključen; preverite ErrorCode, izvorni status in kakovost DataValue |
NodeSet2 opisuje naslovni prostor proizvajalca, argumente metod, reference in tipe za orodja za modeliranje brez povezave. Indeksi imenskih prostorov veljajo samo znotraj XML; na živi napravi razrešite URI imenskega prostora. XML vsebuje definicije modela, ne trenutnih meritev ali varnostne kopije uporabnikov/certifikatov/nastavitev. Dejanski intervali in pravice izvajanja sledijo aktivni konfiguraciji naprave.
Informacijski model | Dodane funkcije vmesnika |
|---|---|
1.0 | Osnovne tehtalne vrednosti in metode tare/ničlenja |
1.1.0 | Metapodatki meritve, identifikacija, usklajena meritev in stabilni zajem |
1.2.0 | ADC, vrednosti FT/FC in SetFilter/SetHRFilter |
URI ostane urn:preciz:cs-neutron:weighing:1. Obstoječi podpisi metod se ohranijo; ReadMeasurement/GetCapturedMeasurement vrneta enajst polj. Izberite strojno programsko opremo s podporo OPC UA in funkcijami, ki jih integracija potrebuje. Različica brez OPC UA ne more ponuditi končne točke.
Da. Izberite Basic256Sha256 / SignAndEncrypt, uporabite uporabniško ime in geslo ter uredite obojestransko zaupanje aplikacijskim certifikatom. Na voljo je tudi nezaščiten način None/Anonymous.
Pokličite CaptureStableWeight z omejitvijo UInt32 100–60000 ms, shranite RequestId in z istim ID-jem prek GetCapturedMeasurement prevzemite enajstpoljni rezultat. Med čakanjem ponavljajte prevzem, ne začenjajte novega zajema.
Pri ukazih tare, ničlenja in filtrov Good potrjuje sprejem. LastCommandId povežite z vrnjenim RequestId in počakajte na LastCommandState 3 (uspeh) ali 4 (neuspeh).
Ob vsaki povezavi razrešite urn:preciz:cs-neutron:weighing:1 v NamespaceArray. Prenosljivi informacijski model ima različico 1.2.0; številski indeks imenskega prostora, na primer 2, je samo primer.
Referenčni priročnik CSCP za Neutron: zgradba sporočil, tehtanje, konfiguracija, štetje, kontrolno tehtanje ter digitalni vhodi in izhodi.
Referenčna navodila Neutron Modbus RTU/TCP za integracijo s PLC, SCADA in HMI: povezava, naslavljanje, registri, kalibracija in krmiljenje avtomatske kontrolne tehtnice.