Unreality
03.12.2024, 07:22
Добрый день,
При работе в Siemens часто приходилось использовать тактовые меркеры/биты (отдельная аппаратная настройка в ПЛК)
Я попробовал сделать аналогичную задачу в СПК110
Так как задача циклична - установил цикл на 25мс
Написал простой код
***
// 100ms
IF iCount_100ms = 4 THEN
bTakt_100ms:= TRUE;
iCount_100ms := 0;
ELSE
iCount_100ms := iCount_100ms +1;
bTakt_100ms:= FALSE;
END_IF
// 500ms
IF iCount_500ms = 20 THEN
bTakt_500ms:= TRUE;
iCount_500ms := 0;
ELSE
iCount_500ms := iCount_500ms +1;
bTakt_500ms:= FALSE;
END_IF
// 1000ms
IF iCount_1000ms = 40 THEN
bTakt_1sec:= TRUE;
iCount_1000ms := 0;
ELSE
iCount_1000ms := iCount_1000ms +1;
bTakt_1sec:= FALSE;
END_IF
***
По логике работы такта, он существует ровно 1 цикл в заданный период
каждые 100мс появляется 1 такт, который существует 1 цикл.
***
Проверил на симуляторе - похоже на правду.
Залил в ПЛК, и увидел, что так в 1 секунду превратился в 10 секунд, такт в 500мс, превратился в 2-3 секунды.
Попытки понять, что не так не увенчались успехом.
Использование встроенной функции Blink, мои задачи не решает, поэтому решил написать что то свое.
Но почему - на симуляторе, это работает, а в реальном ПЛК нет?
Возможно это "говнокод" - и работать не будет тут, готов выслушать замечания.
Либо в настройках ПЛК какой то косяк.
При работе в Siemens часто приходилось использовать тактовые меркеры/биты (отдельная аппаратная настройка в ПЛК)
Я попробовал сделать аналогичную задачу в СПК110
Так как задача циклична - установил цикл на 25мс
Написал простой код
***
// 100ms
IF iCount_100ms = 4 THEN
bTakt_100ms:= TRUE;
iCount_100ms := 0;
ELSE
iCount_100ms := iCount_100ms +1;
bTakt_100ms:= FALSE;
END_IF
// 500ms
IF iCount_500ms = 20 THEN
bTakt_500ms:= TRUE;
iCount_500ms := 0;
ELSE
iCount_500ms := iCount_500ms +1;
bTakt_500ms:= FALSE;
END_IF
// 1000ms
IF iCount_1000ms = 40 THEN
bTakt_1sec:= TRUE;
iCount_1000ms := 0;
ELSE
iCount_1000ms := iCount_1000ms +1;
bTakt_1sec:= FALSE;
END_IF
***
По логике работы такта, он существует ровно 1 цикл в заданный период
каждые 100мс появляется 1 такт, который существует 1 цикл.
***
Проверил на симуляторе - похоже на правду.
Залил в ПЛК, и увидел, что так в 1 секунду превратился в 10 секунд, такт в 500мс, превратился в 2-3 секунды.
Попытки понять, что не так не увенчались успехом.
Использование встроенной функции Blink, мои задачи не решает, поэтому решил написать что то свое.
Но почему - на симуляторе, это работает, а в реальном ПЛК нет?
Возможно это "говнокод" - и работать не будет тут, готов выслушать замечания.
Либо в настройках ПЛК какой то косяк.