Nazwa zmiennej ma dokładnie jedno zadanie: pozwolić każdemu przejść z programu do szafy i z powrotem, bez zadawania ani jednego pytania.
Wyobraź sobie sytuację. Silnik nie chce ruszyć. Otwierasz program i czytasz cewkę: xContactor_Cmd_K1. Idziesz do schematu, strona 10, znajdujesz -K1. Mierzysz napięcie na zaciskach A1 i A2. Trzy kroki, zero zgadywania.
Nazwij tę samą zmienną Motor albo Out1, a ścieżka urywa się na drugim kroku. W tym artykule opisuję konwencję nazewnictwa, której używamy na naszym stanowisku z Micro850 i falownikiem PowerFlex 525, wraz z uzasadnieniem każdego elementu. Dotyczy Connected Components Workbench, ale sposób myślenia przenosi się na dowolną platformę.

Budowa nazwy
Każda nazwa ma cztery części, zawsze w tej samej kolejności:
x Contactor _ Cmd _ K1
│ │ │ │
│ │ │ └── tag ze schematu
│ │ └──────────── rola sygnalu
│ └──────────────────────── obiekt
└──────────────────────────────── typ danych
Czytaj od prawej: na schemacie to K1, to jest komenda, steruje stycznikiem, jest typu BOOL.
Część 1: prefiks typu
Jedna mała litera, dzięki której nigdy nie musisz otwierać tabeli zmiennych, żeby sprawdzić, z czym masz do czynienia.
| Prefiks | Typ danych | Przykład |
|---|---|---|
x | BOOL | xPushButton_Start_S1 |
i | INT | iPotentiometer_Value_R1 |
ui | UINT | uiPotentiometer_Setpoint_R1 |
di | DINT | diCounter_Parts_Total |
udi | UDINT | udiTotal_Cycles |
r | REAL | rMotor_Speed_Actual |
w | WORD | wStatus_VFD_T10 |
s | STRING | sRecipe_Name_Active |
t | TIME | tDelay_Start_Ramp |
Tylko x może trafić do styku albo cewki. Każdy inny prefiks to ostrzeżenie, że patrzysz na wartość, a nie na bit.
Część 2: obiekt
Czym rzecz fizycznie jest, a nie co robi: PushButton, Selector, EStop, LimitSwitch, Contactor, Motor, MotorProtection, VFD, Potentiometer, SafetyRelay, Lamp.
Część 3: rola sygnału
Co niesie ten konkretny sygnał. Cztery role wracają nieustannie:
| Rola | Znaczenie | Kierunek |
|---|---|---|
Cmd | komenda ze sterownika, czego chcemy | wyjście |
State | stan wewnętrzny pamiętany przez program | pamięć |
OK | potwierdzenie, że warunek jest spełniony | wejście |
Ready | urządzenie jest gotowe do pracy | wejście |
Część 4: tag ze schematu
Ostatnia część to dokładnie to oznaczenie, które widnieje na rysunku, bez myślnika: S1, K1, Q1, T10, R1.
Myślnik na schemacie (-S1) wynika z normy IEC 81346 i oznacza produkt, czyli element fizyczny. W nazwie zmiennej go pomijamy wyłącznie dlatego, że Connected Components Workbench nie akceptuje myślnika w identyfikatorze.
Sama litera urządzenia też nie jest dowolna – ustala ją IEC 81346-2:
| Litera | Klasa | Przykład na naszym stanowisku |
|---|---|---|
| A | zespół, moduł | -A1 sterownik Micro850 |
| F | zabezpieczenie | -F1, -F2, -F10 |
| G | zasilanie | -GB1 |
| K | przekaźnik, stycznik | -K0, -K1, -K2, -K3 |
| M | silnik | -M1, -M2, -M3 |
| Q | łączenie obwodów mocy | -Q1 wyłącznik silnikowy |
| R | rezystancja | -R1 potencjometr 10 kOhm |
| S | aparat sterowniczy | -S1 do -S7 |
| T | przekształtnik | -T10 falownik PowerFlex 525 |
| X | zacisk, złącze | -X1, -X4, -X5 |
Wielkie litery i podkreślniki
Te dwa pytania wracają częściej niż wszystkie inne.
Wielkie litery
- prefiks typu zostaje małą literą:
x,i,ui,di,udi,r,w,s,t - każda kolejna część zaczyna się wielką literą
- wewnątrz jednej części słowa piszemy łącznie, każde wielką literą:
PushButton,MotorProtection,RunFwdCmd - nigdy SAME WIELKIE, nigdy same małe
Podkreślniki
- jeden podkreślnik pomiędzy częściami, nigdy wewnątrz części
xPushButton_Start_S1ma trzy części: obiekt, rola, tagxPush_Button_Start_S1jest błędne, rozbija obiekt na dwojexpushbuttonstartS1jest błędne, nie ma tam żadnych części
Jeden wyjątek: _IO_EM_DI_00 to własna nazwa systemowa Rockwella, z podkreślnikiem na początku i samymi wielkimi literami. CCW nie pozwala jej zmienić i nie ma po co – twoja nazwa trafia do kolumny Alias obok.
Numery zacisków same mówią, jaki to styk
Komentarz przy zmiennej brzmi -S1 13/14 (NO). Ta numeracja wynika z EN 50005 i IEC 60947-5-1 i jest dwucyfrowa:
- pierwsza cyfra – numer bloku styków wewnątrz aparatu
- druga cyfra – funkcja: 1 i 2 tworzą styk rozwierny (NC), 3 i 4 tworzą styk zwierny (NO)
| Zaciski | Typ | Typowe aparaty |
|---|---|---|
| 13/14 | NO | przycisk start, przycisk reset, styk pomocniczy |
| 11/12 | NC | przycisk stop, e-stop, krańcówki bezpieczeństwa |
| 21/22 | NC | e-stop, drugi kanał |
Same zaciski w zupełności wystarczą. Dopisek (NO) albo (NC) w komentarzu to uprzejmość, a nie źródło prawdy.
Konwencja w praktyce: mapa wejść i wyjść
Tak to wygląda na realnym stanowisku.
Wejścia cyfrowe
| Kanał | Opis | Aparat | Styk | Zmienna |
|---|---|---|---|---|
| I-00 | Start | -S1 | 13/14 NO | xPushButton_Start_S1 |
| I-01 | Stop | -S2 | 11/12 NC | xPushButton_Stop_S2 |
| I-02 | Auto / ręczny | -S3 | 11/12, 14 | xSelector_AutoManual_S3 |
| I-03 | Reset | -S5 | 13/14 NO | xPushButton_Reset_S5 |
| I-04 | Gotowość falownika | -T10 | – | xVFD_Ready_T10 |
| I-05 | Zabezpieczenie silnika | -Q1 | 13/14 NO | xMotorProtection_OK_Q1 |
| I-06 | Safety OK | -CR30 | – | xSafety_OK_CR30 |

Wyjścia cyfrowe
| Kanał | Opis | Aparat | Zmienna |
|---|---|---|---|
| O-00 | Załączenie silnika | -K1 A1/A2 | xContactor_Cmd_K1 |
| O-01 | Lampka przycisku start | -S1_H | xPushButtonLamp_Start_S1 |
| O-04 | Stop falownika | -T10 | xVFD_StopCmd_T10 |
| O-05 | Falownik w przód | -T10 | xVFD_RunFwdCmd_T10 |
| O-06 | Falownik w tył | -T10 | xVFD_RunRevCmd_T10 |

Sygnały analogowe
| Kanał | Opis | Aparat | Zmienna |
|---|---|---|---|
_IO_P1_AI_00 | Potencjometr 0-10 V | -R1 | uiPotentiometer_Setpoint_R1 |
_IO_P2_AO_00 | Zadawanie prędkości 0-10 V | -T10 | uiVFD_SpeedRef_T10 |
Kanały analogowe są w CCW typu UINT, a nie BOOL. Właśnie dlatego prefiks to ui, nigdy x.
Aparaty bezpieczeństwa nie występują w tabeli zmiennych
Na tym stanowisku e-stop -S4 oraz krańcówki bezpieczeństwa -S6 i -S7 w ogóle nie docierają do Micro850. Są wpięte w konfigurowalny przekaźnik bezpieczeństwa, a sterownik dostaje jeden zbiorczy sygnał Safety OK na wejściu I-06.

Warto powiedzieć to głośno podczas szkolenia. Kursant szuka e-stopu w tabeli zmiennych, nie znajduje go i zakłada, że czegoś brakuje. Nie brakuje niczego – funkcja bezpieczeństwa celowo żyje poza logiką programu.
Komenda, potwierdzenie, stan
Trzy różne rzeczy, które początkujący sprowadzają do jednej:
| Zmienna | Co naprawdę mówi |
|---|---|
xContactor_Cmd_K1 | sterownik prosi o załączenie stycznika |
xMotorProtection_OK_Q1 | zabezpieczenie potwierdza, że jest sprawne |
xMotor_1_AlarmState | program pamięta, że wystąpił alarm |
Komenda nie jest dowodem wykonania. Cewka xContactor_Cmd_K1 może mieć stan TRUE, podczas gdy silnik stoi: spalona cewka stycznika, zgrzane styki, urwany przewód. Dlatego na realnych maszynach odczytuje się styk pomocniczy i porównuje go z komendą, a rozbieżność zgłasza jako alarm. Gdyby styk pomocniczy K1 wpiąć na wolne wejście, ta zmienna nazywałaby się xContactor_Fb_K1, od feedback.
Sześć zasad
1. Nigdy nie koduj NO ani NC w nazwie. Źle: xPushButton_Stop_NC_S2. Przepnij przycisk na inny blok styków, a nazwa zacznie kłamać.

Powyższy zrzut jest tego najlepszym dowodem. xPushButton_Stop_S2 pochodzi ze styku NC w szafie, a mimo to w szynie stoi jako styk normalnie otwarty – dlatego świeci na zielono, choć nikt go nie naciska. Dwa różne fakty i żaden z nich nie należy do nazwy. Typ styku zapisujemy w komentarzu i na schemacie.
2. Nigdy nie umieszczaj adresu w nazwie. xStart_DI00 wygląda pomocnie do momentu, gdy ktoś przełoży przycisk na inny kanał. Wtedy nazwa kłamie. Adres jest w kolumnie Name i tylko tam.
3. Rezerwy zostaw puste. Nieużywane kanały dostają alias w dniu, w którym coś do nich podepniesz, a nie wcześniej.
4. Jeden aparat, jeden tag. Jeśli rysunek mówi -S1, program mówi _S1. Bez _S01, bez _PB1, bez wariantów.
5. Nazywaj po angielsku. Angielski to wspólny język automatyki – dokumentacja, fora i wsparcie techniczne działają po angielsku. Wyjątek tylko wtedy, gdy klient ma własny standard.
6. Podkreślnik oddziela części, nie słowa. xPushButton_Start_S1, a nie xPush_Button_Start_S1.
Lista kontrolna przed programowaniem
- każdy używany kanał ma alias
- każdy alias kończy się tagiem ze schematu
- każdy komentarz ma postać
-Xn zaciski (typ) - kanały rezerwowe nadal są puste
- żaden alias nie zawiera adresu
- żaden alias nie zawiera NO ani NC
- prefiks zgadza się z typem danych
Najczęstsze pytania (FAQ)
Po co w ogóle umieszczać typ danych w nazwie zmiennej?
Bo od razu mówi, czy zmienna może trafić do styku albo cewki. Może tylko BOOL (x). Widok uiVFD_SpeedRef_T10 w szynie to natychmiastowy sygnał, że coś jest nie tak.
Dlaczego nie zapisywać NO albo NC w nazwie?
Bo typ styku to cecha okablowania, a nie sygnału. Przełóż przewód na inny blok styków, a nazwa staje się nieprawdziwa. Tę informację niesie komentarz i schemat.
Czy nazwy mają być po angielsku nawet w lokalnym projekcie?
Tak, o ile klient nie ma własnego standardu. Dokumentacja, wsparcie i fora działają po angielsku, a tabele z wymieszanymi językami są uciążliwe w utrzymaniu.
Co, jeśli schemat nie ma taga dla urządzenia?
Wtedy najpierw trzeba poprawić schemat. Cała konwencja opiera się na tym, że jeden tag wskazuje dokładnie jedno urządzenie – jeśli tag się dubluje albo go brakuje, ustal to na rysunku, zanim zaczniesz cokolwiek nazywać w programie.
Podsumowanie
Dobra nazwa zmiennej to nie ozdobnik, tylko łącznik między programem a szafą. Cztery części – typ, obiekt, rola, tag ze schematu – w zupełności wystarczą, żeby ten łącznik trzymał: xContactor_Cmd_K1 mówi, czym jest, co robi i gdzie znaleźć to miernikiem.
Żeby zobaczyć tę konwencję w działaniu na realnej szynie, przeczytaj wpis o styku normalnie otwartym i cewce w ladder logic, a także o PLC Trainerze ControlByte, z którego pochodzą wszystkie te przykłady. Jeśli szukasz uporządkowanej ścieżki przez programowanie PLC, sprawdź nasz kurs programowania PLC w języku LAD/FBD.









