Bloki danych ARRAY to globalne bloki danych, które składają się wyłącznie z ARRAY. Blok danych z tagiem typu danych ARRAY jest wystarczający dla większości aplikacji, ponieważ dostęp można programować intuicyjnie za pomocą tagu typu danych ARRAY (na przykład, #myArray[#index]) i oferuje lepszą wydajność w czasie wykonywania niż bloki danych ARRAY. W pewnych scenariuszach jednak konieczne jest przetwarzanie ARRAY z różnymi długościami. Blok danych ARRAY jest szczególnie odpowiedni dla tych scenariuszy.
Jak zastosować bloki danych ARRAY w programach użytkownika
W poniższym przykładzie pokazano, jak można użyć bloku danych ARRAY.
Przykład programowania
Poszczególne elementy materiału są transportowane na taśmie transportowej. Te elementy materiału przechodzą przez skaner, który może odczytać informacje, które dany element materiału ze sobą niesie. Informacje są odczytywane i przesyłane do panelu. Ponieważ skaner i panel mają różne cykle zegarowe/szybkości, informacje o materiale muszą być buforowane w każdym przypadku.
W poniższym przykładzie programowania pokazujemy, jak zaprogramować kod programu do przekazywania informacji o materiale. W tym celu używasz bloku danych ARRAY.
Przykład jest skonfigurowany tak, aby był elastyczny, abyś nie musiał wiedzieć w momencie tworzenia kodu programu, który blok danych ARRAY będzie odczytywany lub zapisywany ani jak duży on jest. Możesz zatem używać ARRAY o różnych długościach. Użycie typu danych DB_ANY daje ci tę elastyczność.
Typ danych VARIANT jest używany, abyś miał również elastyczność przy określaniu wartości, która ma być odczytana lub zapisana.
Dopiero w czasie wykonywania blok danych ARRAY jest przenoszony, aby następnie uzyskać dostęp do wartości w bloku programu. Typ danych elementów ARRAY i typ danych wartości, która ma być odczytana lub zapisana, są określane.
Możesz określić liczbę obiektów i poziom napełnienia bloku danych ARRAY za pomocą specjalnych instrukcji.
Procedure
Utwórz typ danych PLC „UDT_Queue”. Ten typ danych PLC jest używany przez obie funkcje („FC_Enqueue” i „FC_Dequeue”). Jest to ważne, na przykład, dla dostępu do tagu #Queue.Used, ponieważ funkcja „FC_Enqueue” zwiększa tag o jeden, a funkcja „FC_Dequeue” zmniejsza tag o jeden.
- Kliknij dwukrotnie polecenie „Dodaj nowy typ danych” w folderze „PLC data types” w drzewie projektu.
- Nowa tabela deklaracji do tworzenia typu danych PLC zostanie utworzona i otwarta.
- Zadeklaruj następujące linie w typie danych PLC:
- DB > Typ danych: DB_ANY
- Rozmiar > Typ danych: DINT
- Używany > Typ danych: DINT
- ReadPos > Typ danych: DINT
- WritePos > Typ danych: DINT
Zaprogramuj funkcję „FC_Enqueue”, która zapisuje wartości informacji o materiale do bloku danych ARRAY. Konkretnego bloku danych ARRAY i typu danych wartości nie trzeba znać w tym momencie, ponieważ interfejsy są programowane z typami danych VARIANT i DB_ANY.
- Utwórz funkcję SCL i nazwij ją „FC_Enqueue”.
- Zadeklaruj interfejs bloku w następujący sposób:
- Napisz następujący kod programu:
- Za pomocą tej funkcji sprawdzasz, czy w bloku danych jest jeszcze wolne miejsce. Jeśli tak, zapisz wartość, która jest określona w parametrze value, do bloku danych w parametrze db. Przy każdym nowym elemencie informacji o materiale, który jest zapisywany, tag #Queue.Used i tag wskaźnika #Queue.WritePos są zwiększane o jeden. Gdy kursor osiągnie koniec bloku danych, jest resetowany do 0. Jeśli blok danych jest pełny, zwracany jest kod błędu #4711.
Zaprogramuj funkcję „FC_Dequeue”, która odczytuje informacje o materiale z bloku danych ARRAY i zapisuje je na panelu. Konkretnego bloku danych ARRAY i typu danych wartości nie trzeba znać w tym momencie, ponieważ interfejsy są programowane z typami danych VARIANT i DB_ANY. Informacje o materiale mogą być następnie wyświetlane na panelu, na przykład:
- Utwórz funkcję SCL i nazwij ją „FC_Dequeue”.
- Zadeklaruj interfejs bloku w następujący sposób:
- Napisz następujący kod programu:
- Za pomocą tej funkcji sprawdzasz, czy w bloku danych są dostępne informacje o materiale. Jeśli tak, odczytaj wartość, do której wskazuje wskaźnik #Queue.ReadPos, i zapisz ją do tagu #Value. Przy każdym elemencie informacji o materiale, który jest odczytywany, tag #Queue.Used jest zmniejszany o jeden, a tag wskaźnika #Queue.ReadPos jest zwiększany o jeden. Gdy kursor osiągnie koniec bloku danych, jest resetowany do 0. Jeśli blok danych jest pusty, zwracany jest kod błędu #4712.
Aby zapisać dane materiałowe, utwórz blok danych ARRAY. Użyj typu danych PLC „UDT_Material” jako typu danych bloku danych ARRAY.
Najpierw utwórz typ danych PLC „UDT_Material”. Ten typ danych PLC zawiera strukturę dla informacji o materiale dostarczonych przez skaner.
- Kliknij dwukrotnie polecenie „Dodaj nowy typ danych” w folderze „PLC data types” w drzewie projektu.
- Nowa tabela deklaracji do tworzenia typu danych PLC zostanie utworzona i otwarta.
- Zadeklaruj następujące linie w typie danych PLC:
- ArticleNumber > Typ danych: DINT
- ArticleName > Typ danych: STRING
- Amount > Typ danych: REAL
- Unit > Typ danych: STRING
Utwórz blok danych ARRAY „DB_MaterialBuffer”. Blok danych ARRAY ma zawierać rekordy danych z informacjami o materiale typu „UDT_Material”. Informacje o materiale są zapisywane do bloku danych ARRAY za pomocą funkcji „FC_Enqueue”.
- Kliknij dwukrotnie polecenie „Dodaj nowy blok„.
- Otwiera się okno dialogowe „Dodaj nowy blok„.
- Kliknij „Blok danych (DB)„.
- Wprowadź nazwę „DB_MaterialBuffer„.
- Wybierz typ bloku danych „ARRAY DB„.
- Wybierz typ danych PLC „UDT_Material” jako typ danych ARRAY.
- Określ „1000” jako górny limit ARRAY.
- Kliknij „OK”.
Utwórz blok danych „DB_MaterialQueue”. Blok danych ma zawierać informacje typu „UDT_Queue” w bloku danych ARRAY. Informacje są zapisywane za pomocą OB „OB_MaterialQueue”.
- Kliknij dwukrotnie polecenie „Dodaj nowy blok„.
- Otwiera się okno dialogowe „Dodaj nowy blok„.
- Kliknij „Blok danych (DB)„.
- Wprowadź nazwę „DB_MaterialQueue„.
- Wybierz typ danych PLC „UDT_Queue” jako typ danych.
- Kliknij „OK”.
Utwórz blok organizacyjny startowy (OB) „OB_MaterialQueue”. W tym bloku organizacyjnym inicjalizujesz tagi DB i Size.
- Kliknij dwukrotnie polecenie „Dodaj nowy blok„.
- Otwiera się okno dialogowe „Dodaj nowy blok„.
- Kliknij przycisk „Blok organizacyjny (OB)„.
- Wprowadź nazwę „OB_MaterialQueue„.
- Wybierz typ „Startup„.
- Wybierz SCL jako język bloku organizacyjnego.
- Kliknij „OK”.
- Napisz następujący kod programu:
Wprowadź rozmiar bloku danych ARRAY w parametrze Size. Wartość początkowa parametru Used wynosi „0”. Pierwszy element informacji o materiale jest zatem zapisywany do elementu ARRAY „0”.
Przypisując blok danych, łączysz blok danych ARRAY „DB_MaterialBuffer” z funkcjami SCL „FC_Enqueue” i „FC_Dequeue”.
- Zadeklaruj następujące tagi w „Domyślnej tabeli tagów”:
- Wywołaj funkcję SCL „FC_Enqueue” w bloku funkcyjnym, w którym skaner odczytuje informacje o materiale.
- W sekcji „Temp” interfejsu bloku zadeklaruj tagi „ConnectionToUDT” (typ danych „UDT_Material”) i „Error” (typ danych INT):
- Połącz wywołanie funkcji z następującymi tagami i w wejściu włączającym EN utwórz zbocze sygnału „P: Odczyt operandu dla dodatniego zbocza sygnału”. Połącz zbocze sygnału z globalnymi tagami z domyślnej tabeli tagów:
- Wywołaj funkcję SCL „FC_Dequeue”.
- Połącz wywołanie funkcji z następującymi tagami i w wejściu włączającym EN utwórz zbocze sygnału „P”: Odczyt operandu dla dodatniego zbocza sygnału”. Połącz zbocze sygnału z globalnymi tagami z domyślnej tabeli tagów:
Result
Gdy tylko wystąpi dodatnie zbocze sygnału, informacje o materiale są zapisywane do bloku danych ARRAY za pomocą instrukcji „WriteToArrayDB” i przesyłane do panelu za pomocą instrukcji „ReadFromArrayDB”.
Jeśli chcesz pogłębić swoją wiedzę i umiejętności w zakresie programowania i konfiguracji systemów automatyki, polecamy zapisanie się na darmowy kurs PLC!
Przeczytaj także: Kiedy stosować bloki danych instancji w programowaniu?