PDA

Просмотр полной версии : Нужна помощь. Нужен контроль связи плк110 - модули расширения



Sibiryak22rus
10.09.2020, 05:27
Здравствуйте, пытаюсь сделать контроль наличия связи ПЛК с модулями расширения 8АС - 2шт. и 8А - 1шт. по протоколу овен.
на форуме толком ничего не нашел, наверное ни у кого нет с этим проблем... но я новичок и буду благодарен если кто подскажет как это реализовать.
согласно РП такой контроль заложен в ПЛК.
50995
пытаюсь выделить текущий адрес и ошибки 0 и 81, и отправлять импульсы на счётчик, если нет ошибок то на увеличение есть ошибка есть то на уменьшение, но в результате у меня адекватно считает только первый (16) адрес прибора. второй (32) считает значения 0-1 иногда 2,3,4... третий прибор (48) вообще ничего не считает.


конфигурация
50996

считываю ошибки, программа в свободном цикле

modul_adr_real := DWORD_TO_WORD (modul_adres /8);

IF modul_err = 81 THEN
IF modul_adr_real = 16 THEN vih_men_1 := TRUE; ELSE vih_men_1 := FALSE; END_IF;
IF modul_adr_real = 32 THEN vih_men_2 := TRUE; ELSE vih_men_2 := FALSE; END_IF;
IF modul_adr_real = 48 THEN vih_men_3 := TRUE; ELSE vih_men_3 := FALSE; END_IF;
ELSE;
IF modul_err = 0 THEN
IF modul_adr_real = 16 THEN vih_bol_1 := TRUE; ELSE vih_bol_1 := FALSE; END_IF;
IF modul_adr_real = 32 THEN vih_bol_2 := TRUE; ELSE vih_bol_2 := FALSE; END_IF;
IF modul_adr_real = 48 THEN vih_bol_3 := TRUE; ELSE vih_bol_3 := FALSE; END_IF;
END_IF;
END_IF;


счётчики
50997

подскажите что я не так делаю?

Sulfur
10.09.2020, 07:11
modul_adres - надо полагать, это физический реальный адрес прибора, назначенный Конфигуратором.
modul_adr_real - какая-то промежуточная переменная.
Допустим приборам назначено 16, 24, 32, 40 итд.
При modul_adr_real=modul_adres/8 получаем следующее:
modul_adr_real=16/8=2,
modul_adr_real=24/8=3,
modul_adr_real=32/8=4,
итд.
Далее идет условие:
иф modul_adr_real=16 тхен "что-нибудь творим";енд_иф;.
Что бы выполнилось "что-нибудь творим" в первом условии, необходимо, что бы modul_adres=128.
Получается, что в вашем алгоритме считаются не ошибки связи, а пролетающие астероиды в Облаке Оорта.

krollcbas
10.09.2020, 08:31
Единственно верное решение - найти изменяющуюся постоянно переменную.
Если изменяться перестало - какая разница Вам что там случилось - АЛЯРЬМ


IF TON.Q THEN
VALUE_REAL:=1.111;(*Считаем что связь пропала*)
ELSE
VALUE_REAL:=VALUE;(*Присваиваем значение с канала в переменную, которая используется в алгоритме*)
END_IF;

TON(IN:=(VALUE=VALUE_OLD), PT:=T#5s);

VALUE_OLD:=VALUE;

Sibiryak22rus
10.09.2020, 09:17
Sulfur, приборам назначено 16, 32 и 48 но этих адресов не бывает в конфигурации lastaddress, все адреса в этой переменной 3-х значные, начиная от 128 до 440 (смотрел через массив)

Sibiryak22rus
10.09.2020, 10:25
krollcbas, сделал по вашему, вроде как бы работает, на столе. вы таким способом пользуетесь? стабильно работает?

хотя вот с модулем 8А и подключенным термопреобразователем сопротивления уже плохо работает, значение меняется редко

Sulfur
10.09.2020, 11:12
Sibiryak22rus

Я обычно работаю с МодбасРТУ, протокол Овен не пользовал. Как делал я:
IF LastError <> 0 THEN
ErrorCounter:=ErrorCounter+1; (*Счетчик количества ошибок*)
ErrorModul:=LastAdres; (*Адрес прибора с ошибкой)
ErrorComm:=TRUE; (*Флаг наличия ошибки связи*)
ELSE
ErrorComm:=FALSE;
END_IF;
Далее по адресу и флагу наличия ошибки можно предпринимать что-либо.

krollcbas
10.09.2020, 13:15
Да пользуюсь. Стабильно, но подбираю таймауты. Считаю правильным опираться на физические принципы

Sibiryak22rus
11.09.2020, 03:57
Стабильно, но подбираю таймауты.
из реальности сколько тайматут ставите? так то в принципе смысл понятен, но оставил на ночь стенд, на 8АС подал 4мА с калибратора с таймаутом 5сек, на 8А повесил дТС с таймаутом 60сек. первый сигнал определился аварийным 217 раз, второй сигнал 197 раз.


Считаю правильным опираться на физические принципы
просто вроде как бы есть встроенная система диагностики, да и с одним модулем работает, жалко что с тремя не работает

Sulfur
11.09.2020, 08:08
Sibiryak22rus
А в самих приборах какой таймаут стоит до определения потери связи?
Я пользовал связку два МВ8А + один МУ16К, опрос по дефолту (PollingTime в ПЛК) 100мс, на МУ стояло 10 сек до перехода в аварийное состояние. Работало сутками годами.

Sibiryak22rus
11.09.2020, 09:52
Sibiryak22rus
А в самих приборах какой таймаут стоит до определения потери связи?

мы наверное про разные таймауты говорим, я писал про код который давал krollcbas, я там менял время таймаута.
а в модулях ввода нету таймаута, только в модулях вывода. и да, меня так же модули вывода работают без проблем и с меньшим временем таймаута.

Sibiryak22rus
11.09.2020, 11:17
хм, переделал программу для работы по модбасу, пока работает отлично, чётко определяет связь с каждым из модулей. в понедельник ещё 2 модуля привезут, добавлю, посмотрю как будет

Sibiryak22rus
14.09.2020, 06:27
простоял стенд с пятницы до понедельника с 3-мя модулями - всё норм, прицепил дополнительно ещё 2 модуля- тоже работает, на последнем модуле иногда ошибки пролетают но в целом чётко реагирует на обрыв интерфейса каждого из модулей, в общем буду использовать в проектах модбас, время покажет.