Praktyczne zastosowanie bloków danych ARRAY w programach użytkownika

Share
Praktyczne zastosowanie bloków danych ARRAY w programach użytkownika

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.

AD 4nXdA3rDiC1rDm1jOskwD WlbRRGiL1a73zXBN q9bXirXYIq3IYWBare QPaIflSXZUCLLvwQJUFh oX2yjDmd6HPgThJwh 3FDQi

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.

  1. Kliknij dwukrotnie polecenie „Dodaj nowy typ danych” w folderze „PLC data types” w drzewie projektu.
  2. Nowa tabela deklaracji do tworzenia typu danych PLC zostanie utworzona i otwarta.
  3. 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
AD 4nXfJ6hRLMTb2lN1biyIiw2tLfxy8abTTfc30EW3BHs5nIiPckZ3GU as3bnatcPuhJbHvcFwNgzFFtXPGKQXhYxQU7MTLvllKn Adb61l1e02uE8MFAPoOV05WF86CYrMuZ51Ql4LAU6h8h18dgnpA?key=hkFTKVId7Q 8A6lWMJ2s0IXA

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.

  1. Utwórz funkcję SCL i nazwij ją „FC_Enqueue”.
  2. Zadeklaruj interfejs bloku w następujący sposób:
AD 4nXc8S30NDnJl6QtHaneB1tkQyIfwQMuEn3uOwkSIkUk0es c7rb OHbTab3MnTE0jJ8SJWODnfGdOdRUONiFaw vhHxm5m05B4XyVBLBf8lSF iOIpVU3DL8J55smrHmPa6yzPM
  1. Napisz następujący kod programu:
AD 4nXfPS8JrqhkajBfk6
  1. 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:

  1. Utwórz funkcję SCL i nazwij ją „FC_Dequeue”.
  2. Zadeklaruj interfejs bloku w następujący sposób:
AD 4nXdbQG0OvsdJN240o5 IGx0F6pSHfXLTHwRJ3cXN3TMyduoMBufhzZr7lrnanmeLnXQ8
  1. Napisz następujący kod programu:
AD 4nXfw8EMf6KiYj5ZfmzkbFmqygDV6wBscsCPfTW1YI0NtqYjnzXg0uwiWz9FBHhQvkWdb WCLSa y4tT4YQOHTB7bBaeohkNsFtuFuGMrr2Fb2zvmeceSNVVqVvxIIaDiuUXi5v8KqNWzHnbj 7IwAPM?key=hkFTKVId7Q 8A6lWMJ2s0IXA
  1. 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.

  1. Kliknij dwukrotnie polecenie „Dodaj nowy typ danych” w folderze „PLC data types” w drzewie projektu.
  2. Nowa tabela deklaracji do tworzenia typu danych PLC zostanie utworzona i otwarta.
  3. 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
AD 4nXfS

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

  1. Kliknij dwukrotnie polecenie „Dodaj nowy blok„.
  2. Otwiera się okno dialogowe „Dodaj nowy blok„.
  3. Kliknij „Blok danych (DB)„.
  4. Wprowadź nazwę „DB_MaterialBuffer„.
  5. Wybierz typ bloku danych „ARRAY DB„.
  6. Wybierz typ danych PLC „UDT_Material” jako typ danych ARRAY.
  7. Określ „1000” jako górny limit ARRAY.
  8. Kliknij „OK”.
AD 4nXeEBLxzVC5J6EhnqEvHPIQiO7MSQ uuf0KFEu1wjqCJVNLYI9XRBWOHTavBWWTtiD20looNAyGP4KXon 9olV8KcVijeGSU1Bh8

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

  1. Kliknij dwukrotnie polecenie „Dodaj nowy blok„.
  2. Otwiera się okno dialogowe „Dodaj nowy blok„.
  3. Kliknij „Blok danych (DB)„.
  4. Wprowadź nazwę „DB_MaterialQueue„.
  5. Wybierz typ danych PLC „UDT_Queue” jako typ danych.
  6. Kliknij „OK”.
AD 4nXfKj jQyJ79S8DS3VMyOS9 4rvrAu6Cf25aaC6AkeIy2dkn9zFX5Nw n4c0BFJXvdonGElfAf1mm5R m1grSbqKNkDgOGgpnJbvPH37na97Yw4EqFNJEehHMcLpV1O

Utwórz blok organizacyjny startowy (OB) „OB_MaterialQueue”. W tym bloku organizacyjnym inicjalizujesz tagi DB i Size.

  1. Kliknij dwukrotnie polecenie „Dodaj nowy blok„.
  2. Otwiera się okno dialogowe „Dodaj nowy blok„.
  3. Kliknij przycisk „Blok organizacyjny (OB)„.
  4. Wprowadź nazwę „OB_MaterialQueue„.
  5. Wybierz typ „Startup„.
  6. Wybierz SCL jako język bloku organizacyjnego.
  7. Kliknij „OK”.
  8. Napisz następujący kod programu:
AD 4nXcxP4aqbxsQRwy 8225WghipH2 8 EGWcmD2yP6UBoh7q88a V6eqpKi5PzoWby90ujPhVD5FZPaHwFZ5PNn8SBSBBQypOEpHvS1oMfXuAGy67sbiIBYMLLXoZD94gSjlZt4IJU84W48rBn LyLmsk?key=hkFTKVId7Q 8A6lWMJ2s0IXA

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

  1. Zadeklaruj następujące tagi w „Domyślnej tabeli tagów”:
AD 4nXeVo7PCVjtcSx gcoQzyi6k6Mmhn5qa xS0kHK 3umywZptetuYoW8Eg7qjbo gT24KJ0Ng zXtxH3Yf8VvTNBUFoJ F2zTiJxEV5YP1RvOBn cFv3X9fElWIwaoMTmJStUzuXjz66FVUEv2yA eg?key=hkFTKVId7Q 8A6lWMJ2s0IXA
  1. Wywołaj funkcję SCL „FC_Enqueue” w bloku funkcyjnym, w którym skaner odczytuje informacje o materiale.
  2. W sekcji „Temp” interfejsu bloku zadeklaruj tagi „ConnectionToUDT” (typ danych „UDT_Material”) i „Error” (typ danych INT):
AD 4nXfIZPRf5YLcAu828fl1CvdCqa85DzwapH7xQMlU rWb wvPr pmbCNm2PkGa3lavt3Nc37q0J PfqUJLSRwLa
  1. 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:
AD 4nXeSnziCvwRovhUTtwLeZb4gXz9iA15ciOor89NP8cNeAm9qTgxPAT G 08ewfIRoHXiqpZCG3OXFkSTbt NaFBoQAwpWuFJuX9s2awRh zCBq8DiYDZ3fCP
  1. Wywołaj funkcję SCL „FC_Dequeue”.
  2. 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:
AD 4nXdX8ScywER bT 9lMIvXKA15i L 3YXGm3 yjbpXX2fBj4xMFQIg4C Q 9jOHFNocPsgK26HwBEoADxx8enjFGn57H v IDkVlXUhTBCUHb2n8
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?

Share
Recommended course!
Until 20.09.2022 rebate -15% on:

SIMATIC S7 in action

Sign up for the newsletter!
Author of entries
Tomasz Gilewski

Hello, my name is Tomasz Gilewski. I am the author of books on the S7-1200 controller and HMI panels (i.e. Siemens hardware). I have been programming exclusively on Siemens hardware and engineering tools for several years.

Leave a Comment

Select currency
Scroll to Top

Search on