Объясните плиз, как у Вас на второй картинке, в разделе элементов отображается состояние битов? По мануалу надо использовать директиву pragma, но как, не пойму...
Вид для печати
Объясните плиз, как у Вас на второй картинке, в разделе элементов отображается состояние битов? По мануалу надо использовать директиву pragma, но как, не пойму...
Да вроде так и делал, а что то не получалось.
Мануал то читал, но ясность при большом объеме входной информации в мозг, параметр относительный. :)
1) Галочку замены констант сделал сразу.
2) В глобальные константы пробовал добавлять (по мануалу), но т.к.. результата не нашел, то убрал сначала.
3) Сейчас все в кучу свел и получилось. Я просто структуру объявил в глобальных. Поэтому и не мог понять скрины, где в PLC_PRG отображаются биты... Устал уже видать за день :)
4) Без объявления констант действительно выдает "Некорректное выражение".
Еще вопросы.
1) Правильно ли я понимаю, что bitaccess мне дает только (по мануалу) возможность мониторить побитно переменную?
Сейчас ПЛК рядом нет, попробовать заново не могу(ведь как я понял SysLibMem.lib выполняется в ПЛК), но все же.
2) Почему у меня при копировании SysMemCpy(ADR(MDVV),ADR(MV110_32DN),4);
все копировалось в первую переменную?
3) Как пользоваться директивой "pragma"?Цитата:
(*Создал структуру MV110DN*)
TYPE MV110DN
STRUCT
Motor0: BOOL ;
Motor1: BOOL ;
-------//------------
Motor31: BOOL ;
END_STRUCT
END_TYPE
(*Объявил*)
VAR_GLOBAL
MDVV:MV110DN;
END_VAR
(*Копирую из MV110_32DN в MDVV - 4 байта (DWORD)*)
SysMemCpy(ADR(MDVV),ADR(MV110_32DN),4);
(* Запускаю исполнение *)
(* Изменяю данные в MV110_32DN, они копируются почему то в mdvv.Motor0 *)
(* и при значении выше 7 (т.к. bool занимает byte без прямой адресации, естественно выдает ошибку INVALID:16#*)
mdvv.Motor0;
mdvv.Motor1;
mdvv.Motor2;
mdvv.Motor3;
4) Ну и напоследок: А Вы, как работаете с именами переменных?
Думаю, что вряд-ли с помощью Pack-Unpack... :rolleyes:
Прошу прощения за настойчивость.
Спасибо всем за помощь.
Ну есть чуть чуть...
Наверное речь идет о самой железяке?Цитата:
1.А где тип MDVV ? (100 пудов - это все и объяснит)
MV110_32DN - 32bit input module. Объявлена в конфигурации.
А если MDVV структуре, то я ее объявил так:
MDVV:MV110DN;
Задумывался о типе структуры, но посчитал, что ее тип, это сумма переменных которые она включает в себя...
Пока еще не понимаю, к сожалению. Но мы идем вперед :)Цитата:
2.для syslibmem в эмуляции не сложно сделать подставку. Главное понимать - что оно делает
Не знаю. Суть вопроса, как рациональней передать данные полученные (отправляемые) с модулей ввода-вывода (и не только) в переменные с названиями имеющими более доступный логический смысл.Цитата:
3.И на кой вооще здесь syslibmem ?
Но данная тема ускорила мое понимание смысла syslibmem и структур в целом. :) За что не устаю говорить спасибо!
Сорри, названия были от балды..
Примерно рядом мысли и кружили, но как же быть?Цитата:
Ну и так попорядку :
Что есть тип МДВВ у Вас - тоже что и array[0..31] of bool (byte)
А тип MV110_32DN ? - dwоrd, ну или array[0..3] of byte;
В 32 стакана положили 4 ведра.
Ведь входное значение DWORD, а в структуре вроде как 32 bool.
Но на практике выходит, что 32 byte. А прямые адреса в структурах использовать нельзя.
Ок. Но со структурами то надо разобраться? ;)Цитата:
Совет-на время забудте про syslibmem.
МДВВ-тоже образное название - Модуль В/В (отголосок прошлых проектов). А железка МВ110-32ДН - 32 входа, как я понимаю DWORD.Цитата:
ЗЫ
Или я что-то пропустил, но у МДВВ 12 входов. (маска - word)
Новый вопрос :)
Возможно ли организовать связь ПЛК с OPC сервером и CodeSys через один GSM/GPRS модем-порт? Если можно, то подсказку в студию пожалуйста. Собственно экспериментально пробовал через CSD - не получилось. Если в конфигурации присутствует модем и тот же порт указан в CoDeSys.cfg, то КДС выдает сообщение, что модуль не будет инициализирован. Но уверенности нет, т.к. соединение через CSD CodeSys у меня и так проходило через раз. Поиск ответов не дал..
По связи через модем есть отдельные слова в РП и РЭ на ПЛК (На ПЛК110 точно есть).
Надо понимать, что Gateway очень тяжелый, и полезной информации несет в 5-10 раз меньше, чем сопутствующей.
СОответственно время...
Если OPC Gateway, то не стоит - CoDeSys не рекомендует обращение несколькими устройствами к одному контроллеру по Gateway одновременно.
Пролистал РЭ ПЛК110. Упоминания о использовании одного порта для подключения средой CodeSys и для связи с внешним миром - OPC сервером там нет (как и в других РП и РЭ по ПЛК и ПМ01).
Есть OPC Lectus и ПЛК100.. Имелось ввиду не одновременное обращение несколькими устройствами, а в разное время: периодический опрос OPC сервером, а при необходимости корректировки программы соединиться средой CodeSys.Цитата:
Если OPC Gateway, то не стоит - CoDeSys не рекомендует обращение несколькими устройствами к одному контроллеру по Gateway одновременно.
Подсознательно я понимаю, что указав порт в codesys.cfg, ПЛК наверняка зарезервирует его для связи по протоколу Gateway и поэтому проигнорирует модуль Modem в конфигурации, настроенный на этот же порт... Но может есть варианты?
Чего то не пойму.
В http://www.owen.ru/uploads/rie_plk110.pdf
7.2 Технический осмотр контроллера проводится обслуживающим персоналом не реже........
Далее....
7.3 Проверку функционирования аккумулятора необходимо производить
В РЭ общие слова о том, что подключение возможно так то и так. Причем согласно таблице 2.2 этого документа, протокол Gatewey поддерживается только RS-232 Debug и Ethernet, а как же загрузка проекта CodeSys по модему через порт RS-232 и RS-485? Ну это лирика.
В общем все щиты управления которые мы устанавливаем, разбросаны по Волгоградской области, а это более 400 км в разные стороны. Вот и хотелось бы иметь возможность удаленного обновления программы. А модем ПМ-01 уже в комплекте стоит, но задействован для связи с OPC сервером Lectus.
Можно конечно поставить второй модем на другой порт и использовать для загрузки проекта... но во первых второй модем, а во вторых не всегда есть свободный порт в ПЛК.
PS Еще мысль есть попробовать GSM модем с интерфейсом Ethernet...
1. Обновление программы только через 232 Debug или Ethrenet.
Если с Ethernet все понятно, то через Debug надо пробовать - вопрос в скорости связи, но опыт такой был. Естественно, что порт Debug должен быть занят только этой задачей (вставлен соответствующий кабель).
:)
По этому я и говорю, что этот порт должен использоваться ТОЛЬКО для программирования...
А как же:
http://www.owen.ru/uploads/inctrukci...erez_modem.pdf
Загрузка через порт RS-232 (ПЛК100)
Если для подключения к модему используется порт RS-232 ПЛК100 (а не Debug RS-232), то для
подключения к нему модема в режиме CoDeSys необходимо воспользоваться прямым кабелем.
Загрузка через порт RS-485
Для загрузки проекта через интерфейс RS-485 подключите модем к ПК витой парой, соблюдая
полярность А-А, В-В. Для ПМ01 положение переключателей: 1 - on, 2- off.
Я опробовал через каждый порт и загрузку проекта CodeSys и связь с OPC Lectus, но только одну из задач предварительно настроенную: или в конфигурации модуль Модем или залив в ПЛК файлы CodeSys.cfg и modem.cfg.Цитата:
Если с Ethernet все понятно, то через Debug надо пробовать - вопрос в скорости связи, но опыт такой был. Естественно, что порт Debug должен быть занят только этой задачей (вставлен соответствующий кабель).
А вот мысль про Ethernet связана с тем, что Ethernet не требует предварительной настройки в ПЛК, для загрузки проекта CodeSys, как и не требует никаких физических переключений...
Только через RS-232 Debug как в руководстве не вышло, а получилось как здесь, в последнем посте.
http://www.owen.ru/forum/showthread.php?t=11232
Подскажите, как передавать/принимать с ПЛК160 на СП270 дробные отрицательные числа? Modbus, панель - мастер.
capzap, похоже я запутался в адресации.
Последний адрес регистра Modbus - 62, тип 2 byte, а вот если добавить ещё четыре регистра для двух REAL то адреса для них будут 63 и 65?
Я бы сделал по другому. Пример есть на форуме, где ТРМ1.
Передавайте Word или DWord умноженный на 10 в степени количества знаков после запятой.
А в панели выставляйте количество знаков после запятой.
capzap, извиняюсь, забыл сказать нумерация регистров с 0, т.е. 62 регистр по порядку будет (63), а 63 и 65 будут (64) и (66). Так вот, поле ввода в панели с адресом 65(66), записывается в ПЛК по адресу 63(64). А поле ввода с адресом 63(64) вообще никуда не записывается. Если бы оно перекрывалсь с другими регистрами ПЛК там бы значения менялись, но нет.
как использовать эти долбаные функциональные блоки? Где и как их объявлять, как использовать переменные? Ни в одном источнике толком подробно ни***на не написано
с горем пополам ФБ добавил, разобрался вроде, но все равно как сделать чтоб системное время отображалось типа TIME_OF_DAY, иначе дальше больно много гемора если часы и минуты будут 2 разными переменными
capzap
огромное спасибо вам!!! Вы спасли меня от полной переделки программы)))
Все преобразовал, но при попытке запустить программу на контроллере возникла проблема: в ФБ не отображаются системное время и дата... Т.е. все параметры остаются по нулям после запуска контроллера. Его надо как-то стыковать с контроллером этот ФБ? Порылся в документации, в кодесисе но не нашел. Подскажите плиз где надо связать ФБ со временем в контроллере?
http://www.owen.ru/forum/showpost.ph...8&postcount=46 попробуйте пример, может он чем поможет, системное время появляется, если предварительно во все поля записать нули
спасибо за пример - помогло))) теперь вроде все работает, выходные потестю и попробую применять)))
немного настораживает что часы в контроллере отстают....или мне показалось...
Привет всем!
Помогите, подскажите) у меня на руках плк100 и мдвв. пытаюсь их подключить, сделал все как сказано в инструкцыи, связь между плк100 и ПК вижу, между мдвв и ПК через com вижу. Как увидить связь между плк 100 и мдвв в codesyse? каким модулем это сделать?
Только пожалуйста обясните популярно, а то я совсем зеленый в контролерах:)
сделали же на форуме специально ветку с примерами, в которой есть Примеры использования модулей расширения, в частности пример программ подключения модулей МВА8/МВУ8/МДВВ к ПЛК
берете в руки РЭ к МДВВ, находите раздел про подключение плк, находите номера регистров маски входов и выходов, в конфигурации плк добавляете modbus master, делаете интерфейс rs485, настраиваете параметры связи (скорость, четность...), добавляете register input, в нем прописываете адрес регистра с маской входов из РЭ, добавляете register output, далее аналогично.
Здравствуйте.
У меня вопрос по организации памяти в модуле Modbus slave. Скрин конфигурации: http://imglink.ru/thumbnails/23-11-1...9c2f0532f6.jpg
Интересует, в частности, учитываются ли при выравнивании адресации каналы "Last address", "Last error", "Command". Если да, то по каким адресам будут расположены переменные N_l10S, Tn10S, Tpr10S?
Извиняюсь, если вопрос совсем детский, или где-то уже обсуждался, но чтение документации и метод тыка результатов не дали :( а сроки горят.
Я думаю надо вернуться к чтению РП по программированию. Раздел ModBus Slave.
Адресация начинается с адреса 0.
Регистр (2 байта) занимают один адрес.
Real (4 байта, 2 регистра) занимают 2 адреса, и всегда с четной цифры.
Например:
Регистр 1 - адрес 0
Регистр 2 - адрес 1
Регистр 3 - адрес 2
Real 1 - адрес 4 (адрес 3 останется пустым) - это и есть выравнивание.
По этому всегда рекомендую добавлять переменные начинаться самых маленьких: 8 bit, registr,Float.
Спасибо за оперативность. Просто на ночь глядя уже туго соображаю. Все же считать адреса нужно начинать с "Last address", или с "N_l10S"? Просто контроллеров сейчас под рукой нет, чтобы проверить, а хотелось бы этот момент для себя прояснить.
Читаем мат. часть...
LastAdress и Last Error - это сервисные сообщения, ВЫДАВАЕМЫЕ контроллером, чтобы Вы могли анализировать качество и стабильность обмена.
все никак не пойму, зачем люди пихают master в slave либо slave в master:confused:
Ясно, будем пробовать.
А мастер в слейве - попытка организации шлюза, т.к. контроллер с этой конфигурацией должен одновременно работать с другим ПЛК и СП270, при этом не хотелось "вручную" копировать переменные.
Да, и как там ... "я не волшебник, я только учусь" :)
Может быть, может быть. Но является ли такой прием вкорне неправильным? Мне кажется, с точки зрения быстродействия он более эффективен. Нет?
К сожалению, только в процессе отладки и ни в чем не уверен. Проблемы есть. Не знаю... Может сделать по-другому? Просто опыта нет, вот экспериментирую.
Проще это создать отдельный мастер и отдельный слейв и в программе копировать переменные из одного в другой? Бум пробовать :)
Понял, попробую. Спасибо.