Skip to main content

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ę.

Tabela zmiennych w Connected Components Workbench z aliasami zgodnymi z konwencją
Tabela zmiennych w Connected Components Workbench z aliasami zgodnymi z konwencją

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.

PrefiksTyp danychPrzykład
xBOOLxPushButton_Start_S1
iINTiPotentiometer_Value_R1
uiUINTuiPotentiometer_Setpoint_R1
diDINTdiCounter_Parts_Total
udiUDINTudiTotal_Cycles
rREALrMotor_Speed_Actual
wWORDwStatus_VFD_T10
sSTRINGsRecipe_Name_Active
tTIMEtDelay_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:

RolaZnaczenieKierunek
Cmdkomenda ze sterownika, czego chcemywyjście
Statestan wewnętrzny pamiętany przez programpamięć
OKpotwierdzenie, że warunek jest spełnionywejście
Readyurządzenie jest gotowe do pracywejś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:

LiteraKlasaPrzykład na naszym stanowisku
Azespół, moduł-A1 sterownik Micro850
Fzabezpieczenie-F1, -F2, -F10
Gzasilanie-GB1
Kprzekaźnik, stycznik-K0, -K1, -K2, -K3
Msilnik-M1, -M2, -M3
Qłączenie obwodów mocy-Q1 wyłącznik silnikowy
Rrezystancja-R1 potencjometr 10 kOhm
Saparat sterowniczy-S1 do -S7
Tprzekształtnik-T10 falownik PowerFlex 525
Xzacisk, 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_S1 ma trzy części: obiekt, rola, tag
  • xPush_Button_Start_S1 jest błędne, rozbija obiekt na dwoje
  • xpushbuttonstartS1 jest 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)
ZaciskiTypTypowe aparaty
13/14NOprzycisk start, przycisk reset, styk pomocniczy
11/12NCprzycisk stop, e-stop, krańcówki bezpieczeństwa
21/22NCe-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łOpisAparatStykZmienna
I-00Start-S113/14 NOxPushButton_Start_S1
I-01Stop-S211/12 NCxPushButton_Stop_S2
I-02Auto / ręczny-S311/12, 14xSelector_AutoManual_S3
I-03Reset-S513/14 NOxPushButton_Reset_S5
I-04Gotowość falownika-T10xVFD_Ready_T10
I-05Zabezpieczenie silnika-Q113/14 NOxMotorProtection_OK_Q1
I-06Safety OK-CR30xSafety_OK_CR30
Schemat CB-M850-001, str. 8: -S1, -S2, -S3, -Q1 i sygnal Safety OK podlaczone do wejsc I-00 do I-06 - dokladnie te tagi koncza nazwy zmiennych
Schemat CB-M850-001, str. 8: -S1, -S2, -S3, -Q1 i sygnal Safety OK podlaczone do wejsc I-00 do I-06 – dokladnie te tagi koncza nazwy zmiennych

Wyjścia cyfrowe

KanałOpisAparatZmienna
O-00Załączenie silnika-K1 A1/A2xContactor_Cmd_K1
O-01Lampka przycisku start-S1_HxPushButtonLamp_Start_S1
O-04Stop falownika-T10xVFD_StopCmd_T10
O-05Falownik w przód-T10xVFD_RunFwdCmd_T10
O-06Falownik w tył-T10xVFD_RunRevCmd_T10
Schemat CB-M850-001, str. 10: stycznik -K1 (A1/A2) na O-00 i lampki -S1_H, -S2_H, -S3_H na O-01 do O-03
Schemat CB-M850-001, str. 10: stycznik -K1 (A1/A2) na O-00 i lampki -S1_H, -S2_H, -S3_H na O-01 do O-03

Sygnały analogowe

KanałOpisAparatZmienna
_IO_P1_AI_00Potencjometr 0-10 V-R1uiPotentiometer_Setpoint_R1
_IO_P2_AO_00Zadawanie prędkości 0-10 V-T10uiVFD_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.

Schemat CB-M850-001, str. 15: e-stop -S4, reset -S5 i krancowki -S6/-S7 ida do przekaznika bezpieczenstwa, nie do wejsc Micro850
Schemat CB-M850-001, str. 15: e-stop -S4, reset -S5 i krancowki -S6/-S7 ida do przekaznika bezpieczenstwa, nie do wejsc Micro850

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:

ZmiennaCo naprawdę mówi
xContactor_Cmd_K1sterownik prosi o załączenie stycznika
xMotorProtection_OK_Q1zabezpieczenie potwierdza, że jest sprawne
xMotor_1_AlarmStateprogram 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ć.

Monitorowanie online: styk stopu zielony od przycisku NC, styk startu niebieski
Monitorowanie online: styk stopu zielony od przycisku NC, styk startu niebieski

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.

O autorze

Maciej Kurantowicz

Author Maciej Kurantowicz

Automatyk i programista, CEO & Founder w ControlByte

Więcej postów tego autora Maciej Kurantowicz