CSCP — CloudScale Communication Protocol
Polecenia CSCP dla Neutron: struktura komunikatów, ważenie, konfiguracja, liczenie, ważenie kontrolne oraz cyfrowe I/O.
NEUTRON · PROTOKÓŁ KOMUNIKACYJNY
Dokumentacja Neutron Modbus RTU/TCP do integracji z PLC, SCADA i HMI: połączenie, adresowanie, rejestry, kalibracja i sterowanie automatyczną wagą kontrolną.
Wersja | Data | Opis zmiany |
|---|---|---|
| Czerwiec 2026 | Pierwsze wydanie instrukcji Neutron Modbus. |
CloudScale Neutron NS i Neutron NT udostępniają interfejs Modbus do odczytu danych ważenia, informacji o stanie, cyfrowych I/O i danych kalibracji oraz wykonywania wybranych poleceń wagi. Interfejs jest przeznaczony do integracji z PLC, SCADA, HMI, MES i własnym oprogramowaniem.
Neutron obsługuje następujące warianty transportu Modbus:
Modbus RTU przez interfejs RS-232 lub RS-485. Domyślny identyfikator urządzenia podrzędnego / jednostki Modbus to 1.
Modbus TCP przez Wi-Fi lub Ethernet. Domyślny port TCP to 502.
Dostępne funkcje i obszary rejestrów tworzą ten sam interfejs logiczny dla Modbus TCP i Modbus RTU, z wyjątkiem tego, że TCP używa Unit Identifier tylko tam, gdzie wymaga go klient lub brama.
Ważne: parametry komunikacji, takie jak ustawienia portu szeregowego i sieci, należy skonfigurować w Neutron przed podłączeniem urządzenia nadrzędnego Modbus. Urządzenie używa adresu Modbus skonfigurowanego parametrem MBA.
Modbus TCP jest dostępny przez połączenie sieciowe Neutron. Użyj adresu IP przypisanego do urządzenia i portu TCP 502. Komunikacja TCP nie wymaga konfiguracji linii szeregowej.
Aby korzystać z Modbus TCP, wybierz Modbus TCP w interfejsach komunikacji wagi (parametr SCI). Modbus TCP może działać równocześnie z innymi interfejsami, na przykład nadal można używać RS-232 do komunikacji z komputerem przez protokół CSCP.
Konfiguracja | Wynik |
|---|---|
SCI = 10 | Włącza tylko Modbus TCP. |
SCI = 5,10 | Włącza zwykłą komunikację wagi RS-232 równocześnie z Modbus TCP. |
SCI = 6,10 | Włącza zwykłą komunikację wagi RS-485 równocześnie z Modbus TCP. |
| Ustawia adres urządzenia podrzędnego / jednostki Modbus. Domyślnie: 1. |
Port TCP | |
Jeśli pokazano kilka wartości SCI, skonfiguruj interfejsy zgodnie z wybraną konfiguracją komunikacji Neutron. Po zastosowaniu zmian konfiguracji uruchom ponownie komunikację lub urządzenie, jeśli wymaga tego menu konfiguracji.
Pozycja | Przykład |
|---|---|
Urządzenie nadrzędne Modbus | |
Transport | Ethernet lub Wi-Fi TCP/IP |
Adres docelowy | Adres IP Neutron |
Port usługi | |
Unit ID | Wartość MBA; domyślnie 1 |
Dla stabilnej instalacji przemysłowej zalecany jest Ethernet, gdy dostępna jest sieć przewodowa. Wi-Fi wprowadza opóźnienie zależne od sieci i wymaga oceny w środowisku zastosowania.
Modbus RTU może działać przez RS-232 lub RS-485. Ustawienia komunikacji szeregowej urządzenia nadrzędnego Modbus muszą odpowiadać ustawieniom interfejsu szeregowego skonfigurowanym w Neutron. Identyfikator urządzenia podrzędnego Modbus ustawia parametr MBA; domyślnie wynosi 1.
Aby korzystać z Modbus RTU, wybierz Modbus RS-232 lub Modbus RS-485 w interfejsach komunikacji wagi (parametr SCI).
Interfejs | Typowa zasada okablowania | Ważna uwaga |
|---|---|---|
RS-232 | Połącz TX, RX i GND między Neutron a urządzeniem nadrzędnym Modbus. Może być wymagane skrzyżowanie TX/RX, zależnie od tego, czy podłączone porty są DTE czy DCE. | Stosuj krótkie połączenia punkt-punkt i wspólną masę sygnałową. |
RS-485 | Połącz A z A i B z B zgodnie z oznaczeniami zacisków obu urządzeń; podłącz odniesienie sygnału / GND, jeśli wymaga tego instalacja. | Stosuj topologię łańcuchową. Nie stosuj połączeń w gwiazdę. Terminację linii umieszczaj tylko na obu fizycznych końcach, tam gdzie jest wymagana. |
Zawsze przestrzegaj oznaczeń zacisków Neutron i schematu okablowania dostarczonego z urządzeniem. Producenci nie zawsze oznaczają polaryzację RS-485 tak samo; jeśli komunikacja nie zostanie nawiązana, sprawdź polaryzację A/B i konfigurację urządzenia nadrzędnego.
Instrukcja używa konwencjonalnej notacji referencyjnej Modbus (na przykład 40101). Wiele narzędzi klientów Modbus używa adresów początkowych liczonych od zera. W takich narzędziach usuń pierwszą cyfrę określającą obszar rejestrów i odejmij 1 od adresu referencyjnego.
Notacja referencyjna | Adres początkowy liczony od zera | Przykład |
|---|---|---|
| | Rejestr holding 40001 |
| | Rejestr holding 40101 |
| | Rejestr holding 40232 |
| | Rejestr holding 40380 |
Przed uruchomieniem sprawdź konwencję adresowania urządzenia nadrzędnego Modbus. Przesunięcie o jeden rejestr jest najczęstszą przyczyną nieprawidłowej interpretacji danych.
Wartości brutto, netto i tary są 32-bitowymi liczbami całkowitymi ze znakiem zapisanymi w dwóch kolejnych 16-bitowych rejestrach.
Starsze słowo jest przesyłane jako pierwsze (kolejność rejestrów big-endian).
Pozycja przecinka jest podawana w rejestrze konfiguracji wyjść / stanu, bity 14..13.
Rejestry masy brutto i netto o wysokiej rozdzielczości 40109–40112 używają dwóch dodatkowych miejsc dziesiętnych, gdy wartość wysokiej rozdzielczości jest dostępna.
Przykład: gdy pole pozycji przecinka wskazuje 2 miejsca dziesiętne, 32-bitowa wartość ze znakiem 12345 reprezentuje 123.45 w aktywnej jednostce. Jednostka jest dostępna w rejestrze 40113 i jest też zakodowana w rejestrze konfiguracji wyjść/stanu.
Funkcja | Nazwa | Zastosowanie w Neutron |
|---|---|---|
| Read Coils | Odczyt stanów wyjść cyfrowych (cewki 1..6 odpowiadają DO1..DO6). |
| Read Holding Registers | Odczyt rejestrów zapisywalnych i związanych z poleceniami. |
| Read Input Registers | Odczyt danych procesowych, mas i rejestrów stanu. |
| Write Single Coil | Ustawianie jednego wyjścia cyfrowego, gdy jego funkcja jest wyłączona. |
| Write Single Register | Zapis jednego rejestru holding, w tym pól związanych z poleceniami. |
| Write Multiple Coils | Ustawianie wielu wyjść cyfrowych, gdy funkcje są wyłączone. |
| Write Multiple Registers | Zapis polecenia, parametrów i danych kalibracji jako bloku. |
Operacje zapisu do wyjść sterowanych skonfigurowaną funkcją wyjścia są odrzucane. Typowe wyjścia sterowane funkcją obejmują wyjścia tolerancji i dozowania.
Adres referencyjny Input / Holding | Opis | Typ danych / uwagi |
|---|---|---|
| Masa brutto | INT32 ze znakiem, kolejność rejestrów big-endian. |
| Masa netto | INT32 ze znakiem, kolejność rejestrów big-endian. |
| Stan wagi | Pole bitowe; patrz sekcja 6.3. |
| Stan polecenia | Stan przetwarzania polecenia. |
| Konfiguracja wyjść / stanu | Pole bitowe: wyjścia, jednostka i pozycja przecinka. |
Mapa główna umożliwia prostym urządzeniom nadrzędnym pobieranie masy netto lub brutto i najważniejszych danych stanu z niewielkiego ciągłego zakresu rejestrów.
Rejestr holding | Opis | Typ danych / uwagi |
|---|---|---|
| Masa brutto | INT32 ze znakiem. |
| Masa netto | INT32 ze znakiem. |
| Masa tary | INT32 ze znakiem. |
| Stan wagi | Pole bitowe; patrz sekcja 6.3. |
| Konfiguracja wyjść / stanu | Pole bitowe; patrz sekcja 6.3. |
| Masa brutto o wysokiej rozdzielczości | INT32 ze znakiem; dwa dodatkowe miejsca dziesiętne, jeśli dostępne. |
| Masa netto o wysokiej rozdzielczości | INT32 ze znakiem; dwa dodatkowe miejsca dziesiętne, jeśli dostępne. |
| Jednostka | 0 = g; 1 = kg; 2 = t; 3 = lb. |
| Maska wejść cyfrowych | Bity 0..5 = DI1..DI6. |
| Maska wyjść cyfrowych | Bity 0..5 = DO1..DO6. |
| Maska funkcji wyjść | Ustawiony bit oznacza, że odpowiednie wyjście jest sterowane funkcją. |
| Punkty ADC | Surowa wartość ADC. |
| Miliwolty | Sygnał czujnika tensometrycznego w mV. |
| Stan polecenia | Stan przetwarzania polecenia. |
| Polecenie | Tutaj zapisz kod polecenia. |
| Parametr polecenia 1 | Opcjonalny parametr polecenia w 40232. |
Bit | Znaczenie (jeśli wartość bitu=1) |
|---|---|
| Masa netto jest ujemna. |
| Masa brutto jest ujemna. |
| Masa jest stabilna. |
| Stan niedociążenia. |
| Stan przeciążenia. |
| Tara jest aktywna. |
| Zadana / ręczna tara jest aktywna. |
| Masa brutto wynosi zero. |
| Wejście cyfrowe 1 jest aktywne. |
| Wejście cyfrowe 2 jest aktywne. |
| Błąd wagi / ADC jest aktywny. |
Bit(y) | Znaczenie |
|---|---|
| Stan wyjść cyfrowych: DO1..DO6. |
| Kod aktywnej jednostki: 0 = g; 1 = kg; 2 = t; 3 = lb. |
| Błąd wagi / czujnika tensometrycznego. |
| Kod pozycji przecinka dla standardowych wartości masy. |
W aplikacjach wymagających stanów wszystkich wyjść używaj rejestru 40115. Rejestr 40116 pozwala ustalić, które wyjścia są obecnie zarezerwowane przez aktywną funkcję.
Zapisz kod polecenia w rejestrze holding 40232. Przed wydaniem polecenia zapisz opcjonalny parametr w 40233. Stan polecenia można odczytać z 40231. Kod polecenia 0 kasuje zabezpieczenie przed powtórzeniem i pozwala ponownie wykonać to samo polecenie.
Kod polecenia | Parametr 40233 | Działanie |
|---|---|---|
| | Brak polecenia; reset zabezpieczenia przed powtórzeniem. |
| | Zerowanie po sprawdzeniu stabilności. |
| | Zerowanie natychmiastowe. |
| | Tarowanie po sprawdzeniu stabilności. |
| | Tarowanie natychmiastowe. |
| | Kasowanie tary. |
| Maska bitowa wyjść | Ustawienie wyjść cyfrowych zgodnie z maską bitową. |
Skrót: zapis kodu polecenia w rejestrze holding 40001 również wykonuje polecenie. Dla przewidywalnej integracji zalecane są rozszerzone rejestry poleceń 40232 i 40233, szczególnie gdy wymagany jest parametr.
Cewki 1..6 odpowiadają DO1..DO6.
Używaj funkcji 01, 05 i 15 do odczytu lub zapisu cewek.
Wyjście można zmienić przez Modbus tylko wtedy, gdy jego funkcja wyjścia jest wyłączona.
Jeśli wyjściem steruje tolerancja, dozowanie lub inna aktywna funkcja, urządzenie odrzuca zapis Modbus do tego wyjścia.
Przykład: aby aktywować DO1 i DO3 kodem polecenia 25, zapisz maskę bitową 000101 w zapisie binarnym (dziesiętnie 5) w 40233, a następnie zapisz 25 w 40232. Sprawdź wynik przez rejestr 40115 lub cewki 1..6.
Kalibracja jest wykonywana przez rejestry holding. Prawidłowe dane kalibracji są zapisywane w pamięci flash. Jeśli kalibracja się nie powiedzie, zmienione dane nie zostają zapisane.
Adres referencyjny holding | Początek liczony od zera | Opis |
|---|---|---|
| | Pole bitowe stanu kalibracji. |
| | Kanał wagowy. |
| | Liczba miejsc dziesiętnych używana dla mas kalibracyjnych. |
| | Liczba prawidłowych punktów kalibracji. |
| | Punkt zerowy ADC, INT32 ze znakiem. |
Bit stanu kalibracji | Znaczenie |
|---|---|
| Punkt zerowy istnieje. |
| Pierwszy punkt masy kalibracyjnej istnieje. |
| Waga ma minimalną prawidłową kalibrację. |
| Błąd wagi / ADC jest aktywny. |
Punkt 1 zaczyna się od 40310 (adres początkowy liczony od zera 309). Każdy punkt kalibracji zajmuje osiem rejestrów. Rejestr początkowy punktu N to 40310 + ((N - 1) x 8).
Przesunięcie w bloku punktu | Opis |
|---|---|
| Flaga poprawności: 0 = nieprawidłowy; 1 = prawidłowy. |
| Masa kalibracyjna, INT32 ze znakiem. |
| Punkt ADC, INT32 ze znakiem. |
| Współczynnik x100, INT32 ze znakiem. |
| Zarezerwowane. |
Przykłady: punkt 1 = 40310-40317; punkt 2 = 40318-40325; punkt 3 = 40326-40333; punkt 8 = 40366-40373.
Adres referencyjny holding | Początek liczony od zera | Opis |
|---|---|---|
| | Polecenie. |
| | Numer punktu. |
| | Masa kalibracyjna, INT32 ze znakiem. |
| | Flagi. |
| | Wyzwalacz. |
| | Wynik polecenia. |
| | Ostatnie wykonane polecenie. |
Polecenie | Opis |
|---|---|
| Kalibracja zera. |
| Kalibracja punktu masy. |
| Usunięcie punktu kalibracji. |
| Usunięcie punktu zerowego. |
| Usunięcie całej kalibracji. |
| Ponowne załadowanie / inicjalizacja wagi. |
Rejestr flag 40384: bit 0 określa, czy wymagana jest stabilność. Wartość 0 wykonuje operację natychmiast; wartość 1 wymaga stabilnej średniej ADC. Wszystkie pozostałe bity flag są zarezerwowane.
Wynik 40386 | Znaczenie |
|---|---|
| OK. |
| Nieprawidłowe polecenie. |
| Błędne dane. |
| Niedozwolone. |
| Nieobsługiwane polecenie. |
| Kalibracja nieudana. |
Oprogramowanie układowe przetwarza kalibrację tylko wtedy, gdy rejestr wyzwalający 40385 zmienia się na wartość niezerową. Dla każdego polecenia kalibracji stosuj następującą sekwencję:
Zapisz polecenie i wszystkie wymagane parametry.
Zapisz 40385 = 1, aby wykonać operację.
Poczekaj na zakończenie polecenia i odczytaj 40386.
Zapisz 40385 = 0, aby zresetować wyzwalacz.
Dla następnego polecenia zapisz parametry i ponownie zmień 40385 na 1.
Polecenie | Kalibracja zera |
|---|---|
Cel | Write Multiple Registers, zaczynając od adresu 379 liczonego od zera. |
Odpowiedzi | |
| Polecenie: kalibracja zera. |
| Numer punktu nie jest używany. |
| Masa kalibracyjna nie jest używana. |
| Wymagana stabilna średnia ADC. |
| Wyzwolenie operacji. |
Odczytaj 40386 | Oczekiwany wynik: 0 (OK). |
Polecenie | Kalibracja punktu 1 masą 10.000 kg |
|---|---|
Cel | Dla 40302 = 3 przemnóż masę kalibracyjną przez 1000. |
Odpowiedzi | |
| Polecenie: kalibracja punktu masy. |
| Numer punktu 1. |
| 10.000 kg x 1000. |
| Wymagana stabilna średnia ADC. |
| Wyzwolenie operacji. |
Odczytaj 40386 | Oczekiwany wynik: 0 (OK). |
Polecenie | Usuń punkt 1 |
|---|---|
Cel | Usuń pierwszy punkt kalibracji. |
Odpowiedzi | |
| Polecenie: usunięcie punktu kalibracji. |
| Numer punktu 1. |
| Wyzwolenie operacji. |
Polecenie | Usuń całą kalibrację |
|---|---|
Cel | Usuń wszystkie zapisane dane kalibracji. |
Odpowiedzi | |
| Polecenie: usunięcie całej kalibracji. |
| Wyzwolenie operacji. |
Skonfiguruj SCI dla wymaganej kombinacji interfejsów i ustaw MBA na wymagany identyfikator urządzenia podrzędnego / jednostki Modbus.
Dla Modbus TCP potwierdź adres IP i połącz się z portem TCP 502. Dla Modbus RTU dopasuj parametry szeregowe i sprawdź okablowanie.
Odczytaj znany rejestr, na przykład 40113 (jednostka) lub 40107 (stan wagi), aby sprawdzić adresowanie.
Odczytaj 40101-40106 i zdekoduj 32-bitowe wartości brutto, netto i tary ze znakiem, korzystając z podanej pozycji przecinka.
Sprawdź stan wagi, wejścia i wyjścia cyfrowe przed włączeniem funkcji sterowania.
Używaj rejestrów poleceń i funkcji kalibracji dopiero po potwierdzeniu aktywności właściwego kanału wagowego i stanu aplikacji.
Objaw | Prawdopodobna przyczyna | Działanie |
|---|---|---|
Brak odpowiedzi Modbus | Interfejs komunikacji wagi (SCI) nie jest skonfigurowany dla wybranego interfejsu; błędny IP/port lub ustawienia szeregowe; nieprawidłowe okablowanie. | Sprawdź SCI, port TCP 502, MBA, osiągalność sieciową, parametry szeregowe i fizyczne okablowanie. |
Wartości są przesunięte lub nieprawidłowe | Klient stosuje nieprawidłową konwersję adresu referencyjnego na liczony od zera; słowa 32-bitowe są dekodowane w złej kolejności. | Sprawdź konwencję adresowania klienta i używaj INT32 ze znakiem z kolejnością rejestrów big-endian. |
Masa ma nieprawidłową pozycję przecinka | Klient ignoruje konfigurację pozycji przecinka lub format wysokiej rozdzielczości. | Odczytaj 40108 i zastosuj bity 14..13; rejestrów wysokiej rozdzielczości używaj tylko wtedy, gdy są wymagane. |
Nie można zapisać wyjścia | Wyjście jest sterowane przypisaną funkcją. | Odczytaj 40116 i wyłącz odpowiednią funkcję wyjścia przed sterowaniem wyjściem przez Modbus. |
To samo polecenie nie wykonuje się ponownie | Zabezpieczenie przed powtórzeniem nie zostało zresetowane. | Zapisz polecenie 0 w 40232, a następnie ponownie wydaj polecenie. |
Polecenie kalibracji nie daje efektu | Wyzwalacz nie zmienił się na wartość niezerową lub nie został zresetowany po poprzednim poleceniu. | Ustaw wszystkie parametry, zmień 40385 na 1, odczytaj 40386, a następnie zapisz w 40385 z powrotem 0. |
Uwaga dotycząca bezpieczeństwa: kalibracja, zerowanie, tarowanie i sterowanie wyjściami mogą wpływać na wynik ważenia i podłączone maszyny. Stosuj kontrolę dostępu, sprawdzaj polecenia w aplikacji nadrzędnej i zapewnij zgodność wszystkich operacji z obowiązującymi wymaganiami metrologicznymi i bezpieczeństwa maszyn.
Rozdział opisuje podstawowy interfejs CHECKWEIGHER, wersja mapy rejestrów 1. Obsługuje odczyt stanu procesu i ostatniego zakończonego wyniku, wybór istniejącej receptury, konfigurację autostartu i START / STOP / STOP NOW / RESET. Nie obejmuje edycji receptur, konfiguracji filtrów, wyboru aplikacji, przypisywania I/O ani szczegółowego strumieniowania diagnostycznego. Skonfiguruj je zwykłym interfejsem ustawień przed użyciem tego bloku.
Mapa jest identyczna w Modbus TCP i włączonych interfejsach Modbus RTU. Używaj jednego klienta/urządzenia nadrzędnego sterującego; dodatkowi odbiorcy mogą monitorować dane. Istnieje jedna wspólna skrzynka poleceń dla wszystkich transportów, a nie po jednej dla każdego klienta. Nie używaj żądań rozgłoszeniowych dla tego interfejsu. Przed sterowaniem odczytaj blok i potwierdź application=4 (CHECKWEIGHER), kanał i poprawność migawki.
Poniższe adresy są adresami PDU liczonymi od zera. Dla klientów używających notacji 4xxxx adres referencyjny = 40001 + adres: adres 400 to 40401, a adres 480 to 40481. Do odczytu używaj funkcji 03 (lub 04). Polecenia zapisuj tylko funkcją 16 (0x10), zaczynając od 480 i zapisując dokładnie osiem rejestrów. Funkcja 06 i zapisy częściowe są odrzucane. Rejestry wyniku/stanu są tylko do odczytu. Przerwy między blokami odczytu i zapisu nie można odczytywać.
Odczytaj adres 400 z liczbą 48, aby uzyskać stan, potwierdzenie polecenia i ostatni wynik w jednym żądaniu. Możesz też odczytać 400/liczba 24 dla stanu lub 424/liczba 24 dla wyniku. Wszystkie wartości 32-bitowe używają najpierw starszego słowa; każdy rejestr używa standardowej kolejności Modbus ze starszym bajtem jako pierwszym. Nie dziel wartości 32-bitowej między oddzielne żądania.
PDU / adres referencyjny | Słowa | Nazwa / typ | Opis |
|---|---|---|---|
| | MAP_VERSION / UINT16 | 1 dla tej mapy. |
| | BOOT_ID / UINT32 | Niezerowy losowy token sesji generowany przy uruchomieniu urządzenia. Powtarzaj go w każdym zapisie; nie jest zachowywany po ponownym uruchomieniu. Nie jest to poświadczenie bezpieczeństwa. |
| | CHANNEL / UINT16 | Bieżący kanał wagowy. |
| | APPLICATION / UINT16 | Do sterowania musi wynosić 4. |
| | STATE / UINT16 | 0 IDLE; 1 START_CHECK; 2 RUN; 3 DRAINING; 4 PAUSED; 5 STOPPED; 6 ERROR; 7 CONS_LOST. |
| | ACTIVE_ID / UINT16 | Wybrana receptura; może różnić się od RESULT_ID poprzedniego produktu. |
| | AUTOSTART / UINT16 | Trwałe CWAUTO: 0 wyłączone, 1 włączone. |
| | PROCESS_ERROR / UINT16 | Bieżący błąd procesu blokujący pracę; 0 brak. |
| | BELT / UINT16 | Logiczne żądanie pracy taśmy, 0/1; nie jest to informacja zwrotna silnika. |
| | CONS / INT16 | -1 (0xFFFF) nieprzypisane; 0 nieaktywne; 1 aktywne. |
| | PQ / UINT16 | Oczekujące produkty. |
| | EQ / UINT16 | Oczekujące/aktywne zdarzenia wyjść. |
| | AUTO_STATE / UINT16 | Wynik autostartu: patrz 10.5. |
| | AUTO_ERROR / UINT16 | Błąd autostartu przy uruchomieniu; 0 brak. |
| | SNAPSHOT_VALID / UINT16 | 1 użyteczna migawka; 0 niedostępna. Przed sterowaniem sprawdź też APPLICATION. |
| | REQUEST_ID / UINT32 | Ostatnie przyjęte żądanie; zmienia się natychmiast po przyjęciu. |
| | ACK_ID / UINT32 | Ostatnie zakończone żądanie. 0 oznacza brak od uruchomienia. |
| | COMMAND_STATE / UINT16 | 0 IDLE; 1 BUSY; 2 DONE; 3 ERROR. |
| | COMMAND_ERROR / UINT16 | Błąd aplikacji zakończonego żądania; patrz 10.4. |
| | APPLIED_MASK / UINT16 | Bit 0 wybór receptury zastosowany; bit 1 autostart zastosowany. Może być niezerowy, gdy START kończy się niepowodzeniem. |
| | LAST_COMMAND / UINT16 | Kod polecenia ostatniego przyjętego żądania. |
| | RESULT_SEQ / UINT32 | Sekwencja ostatniego zakończonego produktu; porównuj wraz z BOOT_ID. |
| | RESULT_ID / UINT16 | Receptura użyta dla tego wyniku. |
| | RESULT_FLAGS / UINT16 | Bit 0 wynik istnieje; bit 1 masa prawidłowa/możliwa do przedstawienia; bit 2 granice możliwe do przedstawienia; bit 3 przepełnienie/nieprawidłowa konwersja liczbowa. |
| | DECIMALS / UINT16 | Miejsca dziesiętne W, LO i HI tego wyniku. |
| | UNIT / UINT16 | 0 g; 1 kg; 2 t; 3 lb; 4 oz; 5 N; 65535 inna/nieznana. Nie zakładaj g dla nieznanych jednostek. |
| | W / INT32 | Masa netto z uwzględnieniem tary; podziel przez 10^DECIMALS. Używaj tylko wtedy, gdy ustawiony jest bit 1 RESULT_FLAGS. |
| | LO / INT32 | Dolna granica tolerancji; używaj tylko z bitem flag 2. |
| | HI / INT32 | Górna granica tolerancji; używaj tylko z bitem flag 2. |
| | WS / UINT16 | Klasyfikacja masy: 0 LOW; 1 OK; 2 HIGH; 3 ERROR. |
| | LTS / UINT16 | Długość: 0 OK; 1 LENGTH_LOW; 2 LENGTH_HIGH; 3 DISABLED. |
| | RESULT / UINT16 | 0 LOW; 1 OK; 2 HIGH; 3 ERROR; 4 OVERLAP; 5 ABORTED; 6 ABORTED_CONS. |
| | PRODUCT_ERROR / UINT16 | Błąd tego produktu; niezależny od PROCESS_ERROR. |
| | NS / UINT16 | Przyjęte próbki ostatniego zakończonego wyniku przed odrzuceniem skrajnych; nie jest to liczba próbek bieżącego produktu. |
| | TD / UINT32 | Czas wykrycia w milisekundach od uruchomienia; zawija się po około 49.7 dniach. |
| | ET / UINT32 | Milisekundy od wykrycia do wyniku. |
| | LT / UINT32 | Czas aktywności czujnika produktu ON w milisekundach; 0 w trybie wyzwalania masą. |
| | RESERVED / UINT16 | 0; ignoruj w wersji 1. |
Stan i ostatni wynik są kopiowane pod blokadą procesu. Każda odpowiedź zawiera spójną migawkę; kolejne żądanie może zobaczyć nowsze dane. RESULT_SEQ, RESULT_ID, DECIMALS i UNIT należą do zapisanego wyniku, a nie do aktualnie wybranej receptury. Przed pierwszym wynikiem bit flag 0 jest wyzerowany: nie interpretuj wypełnionych zerami pól wyniku jako rzeczywistego produktu o zerowej masie. Odczyt nigdy nie zużywa ani nie kasuje wyniku.
Przykład: W high=0x0000, low=0x07D1 daje liczbę całkowitą ze znakiem 2001. Przy DECIMALS=1 i UNIT=0 masa wynosi 200.1 g. Wartości ujemne używają 32-bitowego kodu uzupełnień do dwóch. Jeśli konwersja przekracza INT32 lub wartości wagi nie można przedstawić, odpowiedni bit poprawności jest wyzerowany, jej rejestry liczbowe mają wartość zero, a bit flag 3 jest ustawiony. Oryginalny wynik produktu nie zostaje zmieniony.
Adres / adres referencyjny | Nazwa | Wartość |
|---|---|---|
| | 0 tylko ustawienia; 1 START; 2 STOP DRAIN; 3 STOP NOW; 4 RESET. |
| CHANGE_MASK | Bit 0: wybierz RECIPE_ID. Bit 1: ustaw AUTOSTART. Pozostałe bity muszą wynosić 0. |
| RECIPE_ID | 1–500, gdy ustawiony jest bit maski 0. W przeciwnym razie zapisz 0. Receptura musi już istnieć. |
| | 0 lub 1, gdy ustawiony jest bit maski 1. W przeciwnym razie zapisz 0. |
| REQUEST_ID | |
| BOOT_ID | |
Dla COMMAND 2, 3 lub 4 wartości CHANGE_MASK, RECIPE_ID i AUTOSTART muszą wynosić 0. Ustawienia można łączyć z COMMAND 0 lub 1. Wybór receptury i zmiany autostartu wymagają zatrzymanego procesu po opróżnieniu. START bez bitu zmiany receptury uruchamia aktualnie wybraną recepturę. Wybór aplikacji i tworzenie receptur pozostają poza zakresem Modbus.
Cała ramka jest sprawdzana przed przyjęciem. Żaden częściowy zapis bloku sterowania nie odnosi skutku. Normalna odpowiedź funkcji 16 oznacza przyjęcie żądania do skrzynki, a nie powodzenie START. Wykonanie odbywa się z istniejącej pętli głównej. Odpytuj, aż ACK_ID będzie równe wysłanemu identyfikatorowi, a COMMAND_STATE wyniesie DONE lub ERROR. BUSY może trwać zbyt krótko, aby je zaobserwować; nigdy nie wymagaj jego zaobserwowania przed zaakceptowaniem DONE.
Utrzymuj jedno niezakończone żądanie. Jeśli zapis przekroczy limit czasu, ponownie odczytaj BOOT_ID, REQUEST_ID i ACK_ID. Jeśli token uruchomienia jest niezmieniony, w razie potrzeby prześlij ponownie dokładnie te same osiem słów. Powtórzenie ostatnio przyjętego żądania z identycznymi danymi jest potwierdzane bez ponownego wykonania, niezależnie od tego, czy oczekuje czy jest zakończone. Ten sam identyfikator ze zmienionymi danymi, pominięte/stare identyfikatory, inny token uruchomienia lub kolejne żądanie podczas BUSY są odrzucane. Po restarcie zsynchronizuj się z nowym tokenem i bieżącym stanem procesu; nie odtwarzaj automatycznie starego START.
Do wykrywania duplikatów zachowywane jest tylko ostatnie żądanie; nie ma trwałego dziennika poleceń. Restart sieci bez restartu urządzenia nie kasuje skrzynki. Protokół zakłada jeden sterujący PLC; nie rozstrzyga konfliktów między konkurującymi nadawcami. Token uruchomienia i licznik żądań zapobiegają przypadkowemu odtwarzaniu, a nie nieautoryzowanemu dostępowi.
Najpierw stosowany jest wybór receptury, następnie autostart, a na końcu polecenie. Składnia, zakres identyfikatorów i poprawność receptury są sprawdzane przed zmianami ustawień. Błędy pamięci flash mogą mimo to pozostawić wcześniejsze ustawienie zastosowane. APPLIED_MASK dokładnie zgłasza, które żądane ustawienia się powiodły. Na przykład receptura 25 i AUTOSTART=1 mogą zostać zapisane, podczas gdy START zostanie odrzucony z powodu nieaktywnego CONS: COMMAND_STATE=ERROR, COMMAND_ERROR=11, APPLIED_MASK=3. Ustawienia nie są wycofywane. Przed decyzją o ponowieniu odczytaj ACTIVE_ID i AUTOSTART.
Poniższe kody błędów należą do COMMAND_ERROR i nie wolno mylić ich z polami błędów procesu/produktu. Odrzucony zapis na poziomie transportu nie zmienia skrzynki ani ACK_ID. Niedozwolone adresy, zapisy tylko do odczytu, zapisy częściowe i nieobsługiwane zakresy bloków zwracają wyjątek Modbus 02. Prawidłowo zaadresowany ośmiosłowowy zapis sterujący z nieprawidłowymi danymi, tokenem, sekwencją lub stanem skrzynki zwraca wyjątek 03.
Kod | Znaczenie |
|---|---|
| Powodzenie. |
| Wybrana receptura nie istnieje lub jest nieprawidłowa. |
| START odrzucony: masa poza dopuszczalnym zakresem. |
| Wymagana pamięć niedostępna. |
| Skonfigurowany CONS jest nieaktywny. |
| Jednostka receptury nie odpowiada jednostce wagi. |
| Konfiguracja/stan czujnika uniemożliwia operację. |
| Niewłaściwa aplikacja, działający proces, nieusunięta usterka lub kolidująca operacja wagi. |
| Nieprawidłowe argumenty żądania lub system pomiarowy niegotowy. |
| Błąd odczytu lub zapisu ustawień/bazy danych. |
STOP DRAIN nie przyjmuje nowych produktów i kończy przyjęte produkty oraz zdarzenia wyjść. Jego potwierdzenie DONE oznacza zażądanie zatrzymania; STATE=5 potwierdza zakończenie. STOP NOW anuluje otwarte produkty/zdarzenia i dezaktywuje wyjścia procesowe. STOP nie zastępuje RESET przy usterce blokującej. RESET ponownie sprawdza wagę i warunki wstępne i nie uruchamia taśmy; jeśli przyczyna pozostaje, kończy się niepowodzeniem. Wszystkie polecenia używają normalnych blokad wagi kontrolnej. Wynik jest rezultatem pomiaru, a nie potwierdzeniem zadziałania fizycznego mechanizmu odrzucającego.
AUTOSTART to trwałe ustawienie CWAUTO, domyślnie 0. Włączenie go nie powoduje natychmiastowego uruchomienia; połącz z COMMAND=1, aby wykonać natychmiastowy START. Przy następnym uruchomieniu urządzenia musi być wybrana aplikacja CHECKWEIGHER, początkowe zerowanie musi być włączone i zakończone powodzeniem, a prawidłowa ostatnio aktywna trwała receptura musi być dostępna. Nadal obowiązują normalne kontrole START. Nieudana próba przy uruchomieniu nie jest ponawiana, gdy później zmieni się wejście. Ręczny STOP, PAUSE lub usterki nie wyzwalają automatycznego ponownego uruchomienia. Niezmienione wartości nie powodują kolejnego zapisu ustawień.
AUTO_STATE: 0 DISABLED; 1 WAIT_ZERO; 2 ZERO_DISABLED; 3 ZERO_FAILED; 4 NO_PRODUCT; 5 STARTED; 6 START_FAILED; 7 CANCELLED; 8 INACTIVE; 9 INIT_FAILED. AUTO_ERROR to kod odrzuconego START przy uruchomieniu. Jest to wynik próby przy uruchomieniu; STATE i PROCESS_ERROR opisują bieżący proces.
Przykład 1 — odczyt wszystkiego: funkcja 03, początek PDU=400, liczba=48 (adres referencyjny 40401). Sprawdź MAP_VERSION=1, APPLICATION=4 i SNAPSHOT_VALID=1. Zapisz BOOT_ID i ACK_ID. Odczyt danych nie wymaga polecenia.
Przykład 2 — wybór receptury 25, włączenie autostartu i START w jednym zapisie. Załóż BOOT_ID=0x12345678 i ACK_ID=0. Zapisz funkcją 16, początek PDU=480, liczba=8, słowa dziesiętne: [1, 3, 25, 1, 0, 1, 4660, 22136]. Słowa uruchomienia są poglądowe: zawsze kopiuj je z urządzenia. Czekaj na ACK_ID=1 i COMMAND_STATE=2, a następnie sprawdź STATE=2 (RUN). Jeśli COMMAND_STATE=3, sprawdź COMMAND_ERROR i APPLIED_MASK.
Przykład 3 — STOP DRAIN. Zakładając zakończenie poprzedniego żądania, wyślij [2, 0, 0, 0, 0, 2, 4660, 22136]. Czekaj na ACK_ID=2. DONE potwierdza przyjęcie; kontynuuj odpytywanie aż do STATE=5 (STOPPED). Oczekujące produkty mogą nadal generować wyniki podczas DRAINING.
Przykład 4 — zmień tylko recepturę po zatrzymaniu: [0, 1, 26, 0, 0, 3, 4660, 22136]. Nie zmienia to autostartu i nie uruchamia procesu. Uruchom później przez [1, 0, 0, 0, 0, 4, 4660, 22136].
Przykład 5 — reset usuniętej usterki: COMMAND=4 z mask/recipe/autostart=0, następnym identyfikatorem żądania i bieżącym BOOT_ID. Czekaj na pomyślne potwierdzenie; w razie potrzeby wydaj oddzielny START. Nie wysyłaj wielokrotnie RESET bez zdiagnozowania usterki.
Sugerowana cykliczna logika PLC (pseudokod Structured Text; dostosuj nazwy bloków Modbus do swojego PLC):
ReadHoldingRegisters(Start := 400, Count := 48, Data := Rx);
BootId := JoinUInt32(Rx[1], Rx[2]);
AckId := JoinUInt32(Rx[18], Rx[19]);
IF BootId <> SavedBootId THEN
SavedBootId := BootId; HaveSeenResult := FALSE;
(* Resynchronise command handling; do not replay old START. *)
END_IF;
IF (Rx[15] = 1) AND ((Rx[27] AND 1) <> 0) THEN
Seq := JoinUInt32(Rx[24], Rx[25]);
IF NOT HaveSeenResult OR (Seq <> SavedSeq) THEN
SavedSeq := Seq; HaveSeenResult := TRUE;
IF ((Rx[27] AND 2) <> 0) AND (Rx[29] <> 65535) THEN
Mass := SignedInt32(Rx[30], Rx[31]) / Power10(Rx[28]);
END_IF;
Samples := Rx[40]; ProductResult := Rx[38];
(* Process this snapshot once, including invalid/rejected products. *)
END_IF;
END_IF;NS odnosi się do ostatniego zakończonego produktu i nie zmienia się do nadejścia nowego wyniku. Blok rejestrów ostatniego wyniku nie jest kolejką: jeśli między odczytami zakończą się dwa produkty, pośredniego wyniku nie można pobrać przez tę podstawową mapę. Monitoruj zmiany SEQ i wybierz interwał odpytywania krótszy niż najkrótszy odstęp między produktami. Po ponownym połączeniu zdecyduj, czy pierwszy dostępny wynik zapisać jako odzyskaną migawkę, czy użyć go tylko jako początkowej wartości odniesienia. Interfejs ten nie gwarantuje ścieżki audytu każdego produktu.
Sprawdź obie konwencje adresowania, kolejność słów i znane masy dodatnie/ujemne; odczytaj wszystkie 48 słów i oba podbloki 24-słowowe.
Sprawdź flagi braku wyniku przed pierwszym produktem, następnie produkt OK, LOW i nieprawidłowy; potwierdź, że identyfikator/jednostka wyniku pozostają powiązane z zapisanym wynikiem po zmianie wybranej receptury.
Powtórz identyczny przyjęty zapis przed zakończeniem/po zakończeniu: musi wykonać się raz. Wypróbuj zmienioną zawartość z tym samym identyfikatorem, pominięty identyfikator, zapis częściowy i zapis tylko do odczytu: każdy musi zostać odrzucony bez zmiany przyjętych ustawień.
Przetestuj START przy nieaktywnym CONS i sprawdź APPLIED_MASK; przetestuj STOP DRAIN aż do STOPPED, STOP NOW, RESET usterki i kolejny START.
Rozłącz/połącz ponownie i uruchom urządzenie ponownie. Sprawdź ponowną synchronizację żądań i odrzucenie starego tokenu uruchomienia. Przetestuj włączony/wyłączony autostart przy udanym i nieudanym początkowym zerowaniu.
Powtórz na rzeczywistym PLC i obu skonfigurowanych transportach TCP/RTU. Potwierdź, że cykliczna komunikacja nie zakłóca ważenia ani czasowania wyjść.
Tabele rejestrów używają adresów referencyjnych 4xxxx liczonych od jedynki. Dla adresu referencyjnego 40101 adres PDU liczony od zera wynosi 100. Używaj konwencji adresowania wymaganej przez klienta Modbus.
Masy brutto i netto o wysokiej rozdzielczości w rejestrach 40109–40112 używają dwóch dodatkowych miejsc dziesiętnych, gdy są dostępne. Dekoduj je jako 32-bitowe wartości ze znakiem i uwzględniaj konfigurację pozycji przecinka.
Nie. Przechowuje wynik ostatniego zakończonego produktu i pozostaje niezmieniony do nadejścia nowego wyniku. Monitoruj SEQ i wybierz interwał odpytywania krótszy niż najkrótszy odstęp między produktami. Wyników pośrednich nie można pobrać z tej podstawowej mapy.
Ponownie zsynchronizuj obsługę poleceń po zmianie BOOT_ID. Odczytaj bieżące BOOT_ID i ACK_ID, nie odtwarzaj starego START i stosuj sekwencję skrzynki poleceń oraz kontrole opisane w przykładach PLC.
Polecenia CSCP dla Neutron: struktura komunikatów, ważenie, konfiguracja, liczenie, ważenie kontrolne oraz cyfrowe I/O.
Integracja OPC UA z Neutron: bezpieczne połączenia, dane ważenia na żywo, przechwytywanie stabilnego pomiaru i integracja z PLC/SCADA.
Potrzebujesz pomocy z oprogramowaniem, łącznością lub obsługą rozwiązania? Opisz problem, abyśmy mogli pomóc w następnym kroku.