1

Temat: PLC,ec4p-200 - Zadanie w Codesys

Witam Kolegów

Postanowiłem napisac na forum z zapytaniem o pewne zadanie. Może ktoś bardziej doświadczony podpowie rozwiązanie. Zadanie daje się zrobić z użyciem o wiele większej liczby bloków czasowych niż zakłada treść zad. ale nie wygląda to tez za dobrze.

Zastanawiam się czy w tym przypadku nie należałoby zrobić najpierw na papierze automat Moore'a czy Meale'go i dopiero to przerzucić do drabinki w Codesys, ale może ktoś mógłby ocenić ten pomysł.

Treść zadania jest następująca:

Napisac program, który zrealizuje następujące sekwencje sygnałów i zobrazuje na załączonej wizualizacji stany wejść i wyjść, a w trybie symulacji umożliwi zadawanie sygnałów wejściowych:

w odpowiedzi na sygnał "i1" pojawią się takie sygnały "q1", "q2"

("0" oznacza stan niski trwający 1 sekundę,
"1" oznacza stan wysoki trwający 1 sekundę,
"xx" oznacza brak zmiany sygnału przez dowolny czas)

(inaczej: po podaniu sygnału i1 zaczyna się coś dziać na wyjściach q1 i q2,
a wyłączenie i1 też powoduje impulsy na wyjściach q1 i q2)

i1:001111111xx1110000000000000
q1:000001110xx0001110000000000
q2:001101100xx0000001100110000

w odpowiedzi na sygnał "i2" pojawią się takie sygnały "q3", "q4"
(dodatkowy warunek - można użyć do tego tylko dwa bloki czasowe)

i2:00111111111xx11110000000000
q3:00001100110xx00001100110000
q4:00111000000xx00000011000000

Post's attachments

skanowanie0001.jpg 58.89 kb,  

Nie masz uprawnień do pobrania załącznika z tego postu.

2 (edytowany przez mark03 2014-06-09 18:48:31)

Odp: PLC,ec4p-200 - Zadanie w Codesys

Witam

Nie wiem czy koledzy z forum będą chcieli rozwiązywać za Ciebie zadania abyś Ty miał gotowiec do zaliczenia.

Zastanów się jak mają wyglądać wyniki działania przy różnej postaci sygnałów wejściowych i1 i i2 bo rysunek nie przedstawia wszystkich przypadków. (co się ma stać gdy np i1 zniknie w połowie czasu trwania pierwszego impulsu Q2 lub Q1?)

Możesz jedna czasówkę wyzwalać tak aby uzyskać odmierzyć czas od załączenia I1. Z czasówki t1 odczytaj aktualną wartość czasu np w ms i dalej używając funkcji if .. then else .. end_if lub operatorów porównania kreślić przedziały  czasu w których wyzwalasz q1 q2. Drugą czasówkę użyj do odmierzenia czasu t2 od wyłączenia sygnału I2 Na podstawie wartości tego czasu możesz ustalić progi przy których załączysz q1 i q2 przy zaniku sygnału I1 czyli jego opadającym zboczu.

Podobnie zrobisz dla I2 i Q3 i Q4
To wszystko razem będzie działać gdy sygnały i1 i i2 zostaną podane w jednej chwili czasowej. Zobacz co się stanie gdy podasz i2 np 2s po i1?

Możesz pomyśleć o innym rozwiązaniu czas t1 związać z I1 a czas T2 związać z I2 ale musisz rozróżnić i wykrywać zbocze narastające oraz opadające sygnałów I1 i I2.  Idea jest taka, że zawsze musisz zerować układ czasowy zarówno w chwili podania sygnału jak i w chwili jego zaniku tak aby odmierzać czas od początku.
Mając informacje o sygnale oraz odmierzany czas wypisujesz przedziały kiedy mają być załączone dane wyjścia Q.

w codesysie są funkcje R_Trig oraz R_Trig do wykrywania zboczy oraz układy czasu np TON albo TP z których musisz odczytać aktualną wartość czasu odmierzanego na wyjściach ET podpinając zmienna czas1 typu time. Jeśli użyjesz języka ST to operatory porównania piszesz tak jak w matematyce czas1>T#1000ms  itp
Na stronie głównej w dziale "elementy programu"  oraz biblioteki,  masz opisy poszczególnych funkcji wystarczy tylko przeczytać i użyć w programie.

Myślę że jak zamieścisz swój program to koledzy pomogą skorygować ewentualne błędy czy też coś podpowiedzą - ale pisać całego gotowca na zaliczenie za Ciebie nie będą.