Просмотр полной версии : плк-63+мдвв
Добрый день! Что-то никак не получается считать состояние входов МДВВ и записать что-либо на его выходы с помощью ПЛК-63 по протоколу Modbus.
У кого имеется, выложите, пожалуйста, РАБОЧИЙ вариант программы (желательно, на FBD или CFC). За полезные ссылки буду благодарен!
Алексей Дмитриев
31.10.2010, 19:32
На диске ПЛК63 есть рабочие примеры чтения и записи регистров контроллером ПЛК63 Модбас Мастер. На базе их написал процедуру обмена с МДВВ в режиме Modbus RTU. Если надо, могу выслать по электронной почте, давайте адрес.
kolyan_bk@mail.ru.
Заранее благодарен!
пока что ответа нив почте, ни на форуме не увидел... :-(
Алексей Дмитриев
01.11.2010, 19:08
экий вы, батенька нетерпеливый, сейчас вышлю. :) :)
спасибо большое!
завтра попробую!
всё запустилось; с выходами проблем нет-реле щёлкают. а вот со входами проблема: постоянно на разных входах мдвв ложные сигналы о якобы замкнувшихся контактах. и на счетчиках то же самое... включил на входах фильтры дребезга контактов, пробовал уменьшить скорость опроса да 4800 - не помогает!
а вот со входами проблема: постоянно на разных входах мдвв ложные сигналы о якобы замкнувшихся контактах. и на счетчиках то же самое... включил на входах фильтры дребезга контактов, пробовал уменьшить скорость опроса да 4800 - не помогает!А при чем тут скорость? У Вас что не в порядке с МДВВ.
Я тоже подумал про неисправность МДВВ! Но с помощью OPC сервера Lectus входы опрашиваются без проблем и никаких ошибочных значений не выскакивает.... Да и при работе с прилагающейся к МДВВ программой никаких проблем!
lara197a
02.11.2010, 18:27
попробуй подтянуть входы через резистор к плюсу.
спасибо за совет! завтра попробую! а резистор примерно какого сопротивления взять?
Алексей Дмитриев
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.
В принципе так и надо было изначально, но я покоцал, так как иначе другие устройства, которые в этой процедуре опрашиваются не работают, а МДВВ не было тогда. Назад вставить забыл.
спасибо всем,кто откликнулся! обязательно попробую все варианты!
ну и мой пример. несколько тяжеловесно, зато, на мой взгляд, универсально. надеюсь достаточно понятно.
уважаемый валенок! по-моему, ваш пример не для плк-63...
Не надо резисторов, добавь в код :
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.
На готовом-то мне,конечно удобно... А вот где бы почитать по какому принципу из буффера извлекают данные? Я новичек, поэтому не пойму зачем все эти побитные сдвиги... И сам принцип извлечения данных из буффера не понятен. А в РЭ про это ни слова, кстати, нет!
спасибо ещё раз всем откликнувшимся!!!
Алексей Дмитриев
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
понятно! только странно, почему в руководстве по программированию про это не пишут...
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot