Tworzenie aplikacji – integracja Siemens S7 z czytnikiem Inveo BoxID

Lista zmiennych

Po skonfigurowaniu obydwu urządzeń nadszedł czas na stworzenie pierwszej aplikacji wykorzystując pełną moc możliwości czytnika BoxID. 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 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_soundSet – sygnały dźwiękowe (0-brak, 1-sygnał A, 2-sygnał B)

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

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.

Jak przyjrzymy się blokowi “control” zobaczymy, że numer karty odczytywany przez czytnik jest w postaci tablicy bajtów. Aby odczytać numer karty w docelowym formacie, który umożliwi stworzenie systemu do zarządzania użytkownikami należy dokonać konwersji poszczególnych elementów tablicy do zmiennej typu string. W zależności od typu kart RFID ilość elementów tablicy może się różnić, dlatego należy dokonać konwersji tych danych w zależności od indywidualnych potrzeb.

Plik konfiguracyjny

Poniżej zaprezentujemy blok funkcyjny, który ułatwia kontrolę czytnika BoxID. Pozwala na łatwy odczyt i zapis użytkowników oraz rozwiązuje wyżej wymieniony problem związany z długością naszego kodu. Poniżej zawartość bloku “user administration”, który można pobrać z naszej strony internetowej. Do bloku funkcyjnego dołączona jest też funkcja pomocnicza “hexToString”.

Aby dodać blok funkcyjny do projektu należy dołączyć plik “usersLibrary” pobrany z naszej strony internetowej do zakładki “Extrenal source files” w TiaPortal.

Po wykonaniu powyższych instrukcji możemy wywołać blok “User administration” w dowolnym miejscu w naszym projekcie. W naszym przypadku będzie to blok Main OB1. Funkcji “hexToString” nie ruszamy ponieważ jest ona już wywołana w bloku “User administration”. Do bloku funkcyjnego należy teraz przypisać poszczególne zmienne z bloku “control” oraz “user_editor”.

Zarządzanie użytkownikami

W poniższym przykładzie zostały zastosowane również zmienne pomocnicze takie jak “userBlock.read”, “userBlock.write” oraz “userBlock.lenCut”.

Jak widać na załączonym obok obrazku ustawienie wartości 4 dla zmiennej “codeLenCut” skróci długość naszego stringa do bajtu numer 4. Każdy z elementów tablicy jest wejściem bloku funkcyjnego. Ostatnią zmienną na samym dole jest kod po konwersji.

Zmienna “uid_in” to numer karty z bloku “user_editor”. Widnieje tam ostatnio odczytany/zapisany kod. Aby dokonać operacji odczytu bądź zapisu należy podać stan wysoki odpowiednio na zmienne wejściowe: readUserIdBut/writeUserIdBut.

Możemy dla przykładu wprowadzić nowego użytkownika korzystając z kodu, który właśnie został odczytany. Przed dodaniem użytkownika ustawiamy stan miennej “addNewUser” na 1 co ustawi indeks na najbliższy wolny obszar w pamięci czytnika – pominięcie tego kroku będzie skutkowało nadpisaniem danych w pamięci.

Po zrealizowaniu tego kroku ustawiamy pozostałe parametry według uznania, takie jak “name1”, “name2”, “group” oraz “active”.

Oto przykładowe dane, które właśnie zostały zapisane w pamięci czytnika:

Aby zweryfikować czy zapis danych w pamięci się powiódł należy wejść na web server czytnika w celu sprawdzenia czy baza użytkowników została zaktualizowana. Jak widać poniżej w naszej bazie pojawił się Paweł Zieliński:

Biorąc pod uwagę obecny stan bazy użytkowników spróbujmy odczytać użytkownika numer 2. Aby dokonać tej operacji musimy tylko zmodyfikować jedną zmienną: “currentUserId” należy nadać jej wartość odpowiadającą numerowi użytkownika, którego chcemy odczytać z bazy.

Po wprowadzeniu powyższego parametru oraz zatwierdzeniu go stanem wysokim zmiennej “readUserIdBut” pojawiły się dane odczytanego użytkownika.

Poznaliśmy właśnie praktyczne sposoby na zarządzanie użytkownikami wewnątrz pamięci czytnika BoxID. Nadszedł czas na kluczową funkcję czyli sprawdzanie czy dany użytkownik jest zapisany w bazie.

Wejdźmy w takim razie w blok “control” i zwróćmy uwagę na zmienną “I_userId”. W przypadku odbicia karty, która była już wcześniej zapisana w bazie zmienna przyjmie wartość id użytkownika czyli np. w przypadku Adama Nowaka będzie to wartość 2. Natomiast w przypadku nie rozpoznania karty będzie to zawsze 65535.


Naszą aplikację możemy wzbogacić o sygnał dźwiękowy, który zabrzmi w momencie kiedy nastąpi poprawne zalogowanie się od systemu. Sygnał dźwiękowy zostanie uruchomiony zawsze kiedy odbita zostanie wcześniej zapisana karta. Dodana została zmienna pomocnicza “lastId” w celu zapisywania ostatniej odbitej karty.

Poznaliśmy już podstawy zarządzania użytkownikami korzystając z wbudowanej pamięci czytnika BoxID. Czas na zapoznanie się z wbudowanym wyświetlaczem czytnika. Jego obsługa jest na tyle prosta, że nie powstał do niej nawet żaden blok funkcyjny.

Wyświetlacz LCD

Domyślnie na wyświetlaczu powinny wyświetlać się takie dane jak data, godzina oraz adres IP:

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

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

Od teraz możemy wyświetlać dowolne informacje na wyświetlaczu. Mamy też możliwość skorzystania z gotowej funkcji “showTime”, która wyświetli czas z wbudowanego zegara czasu rzeczywistego czytnika. Może w ramach przykładu spróbujmy wyświetlić na ekranie powitanie dla użytkownika, który właśnie zalogował się do systemu. Napiszemy program, który po odbiciu karty wyświetli w pierwszym wierszu datę i godzinę, w drugim “hello”, w 3 i 4 imię i nazwisko użytkownika. Dane wyświetlane będą na czas 2s od odbicia karty, następnie wyświetlacz zostanie wyczyszczony.

W ten sposób może wyglądać realizacja takiej aplikacji:

Przykładowy program – kontrola dostępu LAD

Przykład realizacji programu w języku LAD:

Aplikację można rozbudowywać na różne sposoby. Gdybyśmy chcieli dodać elektrozamek, który miałby się otworzyć w przypadku zbliżenia zapisanej wcześniej karty mogłoby to wyglądać tak jak poniżej. Dodaliśmy obsługę jednego z wbudowanych wyjść czytnika, oraz zwiększyliśmy timer do 5s tak aby Paweł miał więcej czasu na reakcję po zalogowaniu się do systemu aby pchnąć furtkę nawet w najcięższy poniedziałek.

Poniżej program z dodaną obsługą wyjścia przekaźnikowego, które wyzwala się na 5s po odczycie karty:

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 potrzebować blok funkcyjny, który również pobrać można z naszej strony internetowej.

Ponownie wchodzimy w zakładkę “External source files” w Tia Portal, dodajemy plik i generujemy blok funkcyjny.

Po wygenerowaniu bloku funkcyjnego “KeypadFunction” możemy go wywołać oraz wprowadzić zawartość bloku “keypad” do jego wejść. W przykładzie poniżej zarówno wciśnięcie przycisku “ESC” oraz “ENTER” spowoduje wyzerowanie zmiennej “number”.

W moim przypadku wyjściem będzie pierwsza linia wyświetlacza lcd.

Po wywołaniu powyższego bloku oraz przypisaniu odpowiednich zmiennych w pierwszym wierszu powinien wyświetlać się numer wpisany z poziomu klawiatury:

Zakończenie

Dziękujemy, że poświęciliście czas na zapoznanie się z naszym manualem dotyczącym integracji czytników BoxID ze sterownikami Siemens S7! 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