Tworzenie aplikacji – integracja Mitsubishi FX z czytnikiem Inveo BoxID/Clocker

Wprowadzenie

W tym artykule skupimy się na praktycznym wykorzystaniu czytnika BoxID/Clocker. Artykuł przeznaczony jest dla osób, które już zapoznały się z integracją czytnika ze sterownikiem PLC Mitsubishi, jeżeli jeszcze tego nie zrobiłeś zapraszamy do pierwszej części artykułu.
Projekt PLC z tego artykułu w GX Works3 jest dostępny do pobrania na naszym githubie:

https://github.com/Inveo-spzoo/BoxID-Clocker—Mitsubishi-GxWorks3—Sample-Poroject-

Lista zmiennych

Po skonfigurowaniu obydwu urządzeń nadszedł czas na stworzenie pierwszej aplikacji wykorzystując pełną moc możliwości czytnika. Pamiętaj, że ilość bloków zależy od modelu czytnika.

Zanim jednak przejdziemy do programowania musimy zapoznać się z poszczególnymi blokami danych oraz ich funkcjonalnościami. Jednym z podstawowych bloków do obsługi czytników BoxID/Clocker jest blok “control” – umożliwia on sterowanie wyjściami, odczyt wejść, generowanie sygnałów dźwiękowych oraz podgląd danych logowania. Zmienne z prefiksem “Q” są danymi wyjściowymi sterownika PLC, a zmienne z prefiksem “I” jego danymi wejściowymi.

Opis funkcji poszczególnych zmiennych:

Q_resetNewIdFlag – ta flaga służy do potwierdzenia odbicia nowej karty użytkownika, ustawienie stanu wysokiego jest wymagane aby nastąpił reset flagi I_newIdFlag

I_newIdFlag – ta flaga przyjmuje stan wysoki po odbiciu nowej karty, flaga zostanie zresetowana poprzez ustawienie stanu wysokiego na Q_resetNewIdFlag
I_in1 – stan wejścia 1

I_in2 – stan wejścia 2

I_out1 – stan wyjścia 1

I_out2 – stan wyjścia 2

I_liveBit – bit sygnalizujący poprawną konfigurację obydwu urządzeń

I_uidLen – długość userID


I_uid – tablica danych userID

I_userId – zmienna informująca o tym czy użytkownik jest zarejestrowany w bazie jeżeli ID karty jest rozpoznane to wyświetli się id użytkownika w przeciwnym wypadku pojawi się wartość 64535.

I_group – grupa użytkownika

I_name1 – pierwszy człon nazwy użytkownika

I_name2 – drugi człon nazwy użytkownika

Q_out1_ctrl – wyjście przekaźnikowe 1 (sterowanie cewką)

Q_out2_ctrl – wyjście przekaźnikowe 2 (sterowanie cewką)

Q_soundAccept– sygnał dźwiękowy “accept”

Q_soundReject – sygnał dźwiękowy “reject”

Aby umożliwić zapis danych z poziomu PLC do czytnika należy wykonać poniższy handshake. Jest to potwierdzenie wprowadzenia nowego użytkownika.

Kolejnym podstawowym blokiem jest “User_editor”, który służy zarówno do odczytywania użytkowników oraz ich zapisu w pamięci czytnika. Każdy użytkownik ma swoją grupę oraz ID.

Istnieją dwa sposoby na dodawanie użytkowników. Możemy dodawać ich z poziomu wbudowanego web serwera czytnika lub z poziomu PLC wykonując odpowiednie operacje na data bloku.

Uwaga! Zmienne bloku “user_editor” służą zarówno do odczytu jak i do zapisu, nie ma tutaj podziału na parametry wejściowe oraz wyjściowe.

Opis funkcji poszczególnych zmiennych:
readUserid – numer użytkownika, którego dane chcemy odczytać

writeUserId – numer użytkownika, którego dane chcemy zapisać

addNewUser – musimy ustawić wartość na 1 za każdym razem przed dodaniem nowego użytkownika, ustawi to indeks w najbliższym wolnym miejscu – wartość automatycznie zostanie ustawiona na 0 przez czytnik więc nie trzeba jej kasować

currentUserId – indeks id użytkownika, którego chcemy zapisać bądź odczytać

uid – numer id karty użytkownika

name1 – pierwszy człon nazwy użytkownika

name2 – drugi człon nazwy użytkownika

group – grupa/poziom dostępu danego użytkownika

active – bit, który umożliwia dezaktywację dostępu danego użytkownika bez usuwania go z pamięci

Następnym istotnym blokiem jest “lcd”. Blok pozwala na pełną kontrolę nad wbudowanym wyświetlaczem, mamy do dyspozycji 4 wiersze po 20 znaków. Co umożliwia nam stworzenie prostego menu oraz wyświetlania rezultatu logowania.

Opis funkcji poszczególnych zmiennych:
useLcd – ustawienie stanu wysokiego pozwala na przejęcie kontroli nad wyświetlaczem, stan niski wyświetli adres IP czytnika

showTime – ustawienie stanu wysokiego wyświetli aktualną datę i godzinę w pierwszym wierszu

clearLcd – czyszczenie wyświetlacza

backlight – podświetlenie wyświetlacza ON/OFF

line1 – pierwszy wiersz

line2 – drugi wiersz

line3 – trzeci wiersz

line4 – czwarty wiersz

Ostatnim blokiem jest keypad, używamy go tylko w czytnikach z klawiaturą.

character – znak wciśnięty na klawiaturze

Po zapoznaniu się z blokami danych oraz ich zawartością czas na stworzenie pierwszej praktycznej aplikacji. Będzie to prosty system do zarządzania użytkownikami. Tak naprawdę czytnik BoxID ma wbudowany system do zarządzania użytkownikami – naszym zadaniem będzie obsłużenie go przy użyciu kilku prostych instrukcji.

Kontrola dostępu

Jak już wspomniałem na początku, do poprawnej pracy czytnika wymagany jest tak zwany handshake czyli reset flagi newID:

Możemy zacząć od ręcznego prowadzenia dwóch użytkowników do systemu, następnie przejdziemy do stworzenia prostego programu, który będzie wyzwalał wbudowane wyjście przekaźnikowe czytnika na czas 3s w przypadku poprawnej autoryzacji.

Jak widać dodałem dwóch użytkowników. Po zbliżeniu karty do czytnika oraz po naciśnięciu “Get last read UID” do pola Card UID zostanie wprowadzony ostatni odczytany kod.
Poniżej realizacja prostego programu kontroli dostępu w języku ST:

Działanie programu:

Jeśli identyfikator jest nieprawidłowy, użytkownik nie zostaje zalogowany. W przypadku pozytywnej weryfikacji system aktywuje wyjście przekaźnikowe na 3 sekundy.

Po upływie zadanego czasu wyjście zostaje automatycznie zresetowane, a system wraca do stanu oczekiwania na kolejnego użytkownika.

Poprawne logowanie:

Niepoprawne logowanie:

W przypadku poprawnego logowania wartość I_userId przyjmuje wartość indeksu użytkownika, w przeciwnym wypadku przyjmuje wartość 65535.

Zarządzanie użytkownikami

Zanim przejdziemy do zarzadzania użytkownikami stworzymy blok zmiennych pomocniczych User_help_var:

Wiemy już w jaki sposób weryfikować użytkowników, następnym krokiem jest opanowanie odczytywania istniejących użytkowników z wbudowanej bazy czytnika.
Obecnie nasza baza użytkowników wygląda w ten sposób:

Spróbujmy w takim razie odczytać użytkownika z indeksem 1:

Powyższy kod pozwala zarówno na odczyt jak i zapis użytkowników. Został tak przygotowany aby przy użyciu wpisywania wartości do zmiennych pomocniczych z postfiksami “Button” oraz “Set” można było zarządzać bazą np. z poziomu HMI. Aby odczytać użytkownika o indeksie 1 należy ustawić na 1 zmienną “currentUserId” oraz ustawić zmienną pomocniczą “readUserIDButton” na 1. Jak widać na podglądzie powyżej ukazały się dane użytkownika o indeksie 1.

Opanowaliśmy już odczyt użytkownika, następnym i ostatnim krokiem jest opanowanie zapisu nowych użytkowników z poziomu PLC. Podobnie jak w przypadku ręcznego dodawania użytkownika należy wprowadzić imię i nazwisko oraz zbliżyć nową kartę do czytnika.

Po prowadzeniu tych danych należy tylko zbliżyć do czytnika kartę, którą chcemy przypisać do tego użytkownika, następnie ustawić stan wysoki zmiennej “writeUserIDButton”.

Użytkownik zostanie wprowadzony na najbliższy wolny indeks w pamięci. W ten właśnie sposób pomyślenie wprowadziliśmy Adama Nowaka do bazy użytkowników.

Wyświetlacz LCD

Domyślnie na wyświetlaczu powinien wyświetlać się adres IP

Poniżej widzimy zawartość bloku “lcd”:

Ustawienie zmiennej “useLcd” na stan “true” pozwala na przejęcie pełnej kontroli nad wyświetlaczem.

Zmienna “showTime” pozwala na wyświetlenie aktualnego czasu w pierwszym wierszu, a “backlight” na podświetlenie wyświetlacza.

Efekt:

Spróbujmy teraz połączyć program z kontrolą dostępu, który napisaliśmy wcześniej z obsługą wyświetlacza. Poza wysterowaniem wyjścia przekaźnikowego na 3 sekundy przywitamy naszego użytkownika i wyświetlimy na ekranie jego imię i nazwisko:

Na sam koniec może wzbogacić nasz system o sygnał dźwiękowy w przypadku pomyślnej autoryzacji dodając obsługę stanu zmiennej “Q_soundAccept”.

Klawiatura

Ostatnim programowalnym elementem czytnika w zależności od wersji może być również klawiatura i właśnie na jej obsługę nadszedł czas. W przypadku czytników z klawiaturą poza blokami: “Control”“User_editor” oraz “Lcd” mamy jeszcze blok “Keypad” lecz do wygodnej obsługi klawiatury będziemy nam potrzebny blok funkcyjny “Keypad”.

W projekcie należy dodać nowy blok funkcyjny w języku ST oraz nazwać go “Keypad”

Blok zmiennych należy zaimportować z pliku Local Label -> “Keypad.csv”, a kod źródłowy bloku funkcyjnego przekopiować z pliku tekstowego Local Label -> “Keypad_script”.

Po wykonaniu powyższych czynności można wywołać blok funkcyjny w pliku głównym przypisując w odpowiednie miejsca zmienne: “clearLcd”, “line1” oraz “character”.

Zmienna “character” pochodzi z bloku “Keypad”, zmienna “number” to string wyjściowy z klawiatury, w tym wypadku przypisaliśmy pierwszy wiersz wyświetlacza Lcd jako miejsce do wyświetlania treści wpisywanej z klawiatury.

Po wywołaniu funkcji i przypisaniu stringa do pierwszego wiersza wyświetlacza możemy wprowadzić dowolny ciąg cyfr:

Zakończenie

Dziękujemy, że poświęciliście czas na zapoznanie się z naszym manualem dotyczącym integracji czytników BoxID/Clocker ze sterownikami PLC Mitsubishi! Mamy nadzieję, że informacje zawarte w manualu ułatwią Wam wdrożenie tego rozwiązania w Waszych projektach. Jeśli będziecie mieli jakiekolwiek pytania, nie wahajcie się skontaktować z naszym zespołem wsparcia.

Powodzenia w integracji!

Nasza strona korzysta z plików Cookie zgodnie z Polityką Prywatności.

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close