PDA

Просмотр полной версии : плк-63+мдвв



kolyan
31.10.2010, 16:19
Добрый день! Что-то никак не получается считать состояние входов МДВВ и записать что-либо на его выходы с помощью ПЛК-63 по протоколу Modbus.
У кого имеется, выложите, пожалуйста, РАБОЧИЙ вариант программы (желательно, на FBD или CFC). За полезные ссылки буду благодарен!

Алексей Дмитриев
31.10.2010, 19:32
На диске ПЛК63 есть рабочие примеры чтения и записи регистров контроллером ПЛК63 Модбас Мастер. На базе их написал процедуру обмена с МДВВ в режиме Modbus RTU. Если надо, могу выслать по электронной почте, давайте адрес.

kolyan
31.10.2010, 19:37
kolyan_bk@mail.ru.
Заранее благодарен!

kolyan
01.11.2010, 09:50
пока что ответа нив почте, ни на форуме не увидел... :-(

Алексей Дмитриев
01.11.2010, 19:08
экий вы, батенька нетерпеливый, сейчас вышлю. :) :)

kolyan
01.11.2010, 20:32
спасибо большое!
завтра попробую!

kolyan
02.11.2010, 11:25
всё запустилось; с выходами проблем нет-реле щёлкают. а вот со входами проблема: постоянно на разных входах мдвв ложные сигналы о якобы замкнувшихся контактах. и на счетчиках то же самое... включил на входах фильтры дребезга контактов, пробовал уменьшить скорость опроса да 4800 - не помогает!

ASo
02.11.2010, 15:16
а вот со входами проблема: постоянно на разных входах мдвв ложные сигналы о якобы замкнувшихся контактах. и на счетчиках то же самое... включил на входах фильтры дребезга контактов, пробовал уменьшить скорость опроса да 4800 - не помогает!А при чем тут скорость? У Вас что не в порядке с МДВВ.

kolyan
02.11.2010, 18:15
Я тоже подумал про неисправность МДВВ! Но с помощью OPC сервера Lectus входы опрашиваются без проблем и никаких ошибочных значений не выскакивает.... Да и при работе с прилагающейся к МДВВ программой никаких проблем!

lara197a
02.11.2010, 18:27
попробуй подтянуть входы через резистор к плюсу.

kolyan
02.11.2010, 18:59
спасибо за совет! завтра попробую! а резистор примерно какого сопротивления взять?

Алексей Дмитриев
02.11.2010, 21:59
Не надо резисторов, добавь в код :

IF CMPL AND ERR=0 THEN
INP_WORD:=BYTE_TO_WORD(RD_BUFFER[1]) OR SHL(BYTE_TO_WORD(RD_BUFFER[0]),8);

И еще можно изменить timeout примерно до 30 ms.

В принципе так и надо было изначально, но я покоцал, так как иначе другие устройства, которые в этой процедуре опрашиваются не работают, а МДВВ не было тогда. Назад вставить забыл.

kolyan
03.11.2010, 09:43
спасибо всем,кто откликнулся! обязательно попробую все варианты!

kolyan
03.11.2010, 12:02
ну и мой пример. несколько тяжеловесно, зато, на мой взгляд, универсально. надеюсь достаточно понятно.

уважаемый валенок! по-моему, ваш пример не для плк-63...

kolyan
03.11.2010, 12:58
Не надо резисторов, добавь в код :

IF CMPL AND ERR=0 THEN
INP_WORD:=BYTE_TO_WORD(RD_BUFFER[1]) OR SHL(BYTE_TO_WORD(RD_BUFFER[0]),8);

И еще можно изменить timeout примерно до 30 ms.

В принципе так и надо было изначально, но я покоцал, так как иначе другие устройства, которые в этой процедуре опрашиваются не работают, а МДВВ не было тогда. Назад вставить забыл.

Ур-раа! Заработало! Даже тайм-аут не менял! И скорость 115200.
На готовом-то мне,конечно удобно... А вот где бы почитать по какому принципу из буффера извлекают данные? Я новичек, поэтому не пойму зачем все эти побитные сдвиги... И сам принцип извлечения данных из буффера не понятен. А в РЭ про это ни слова, кстати, нет!

kolyan
03.11.2010, 15:08
спасибо ещё раз всем откликнувшимся!!!

Алексей Дмитриев
03.11.2010, 23:49
Вот тут, как раз все просто:
библиотечная функция работает с буфером типа массив байт (хз почему?:confused: )
Это выражение преобразует два соседних элемента массива в 16-ти разрядное слово:
INP_WORD:=BYTE_TO_WORD(RD_BUFFER[1]) OR SHL(BYTE_TO_WORD(RD_BUFFER[0]),8);
только и всего.:D

kolyan
05.11.2010, 17:30
понятно! только странно, почему в руководстве по программированию про это не пишут...