Вы мастеров натыкайте внутри слейва.
PS
Совет имеет о-о-чень ограниченное действие. Я не виноват
Вид для печати
Валенок а если битовую маску записывать а потом один выход переписывать ШИМом ? на выходе ведь все передается в конце цикла программы. Так должно работать ?
На счет варианта софтового ШИМ как-то не понял, пример можно ?
Попробую как вы говорите.Цитата:
Вы мастеров натыкайте внутри слейва.
Попытался убрать мастер внутрь слейва Вложение 9187,преобразование типов делаю так Вложение 9189, но опять тишина. Что делать - не знаю. А изначально шёл по примеру Вложение 9188. Версия 2.3.9.38 соdеsys, а версии прошивки и таргета последние что лежат на сайте. Точно нет никаких перемычек на запрет использования портов?
Работать будет но до следующей записи. Следующая же маска - выставит шим в 0 или 1000. И скорее всего сбросит таймер периода. Вобщем фигня. Не усложняйте.
Софтовый шим : в поиске наберите ШИМ, тут было много. Кажется 1-2 строки. Не найдете - напишут.
Yчтите - "квантование" это шима у Вас - с циклом записи в модуль
Валенок может я не понимаю, но разве на физические выходы данные передаются не в конце цикла ?
начало цикла
......
запись битовой маски
запись значения ШИМ на один выход
конец цикла
Ну и что, что маска будет переписывать значение ШИМ если оно тут же будет записанно опять и в конце цикла все выгрузиться в выходы ? или в данном случае не будет записана маска ? и не будут переписаны измененные биты остальных выходов ? как это архитектурно устроено в ПЛК ?
Ладно, не буду мучаться, переведу пока все выходы на ШИМ.
Алексей Дмитриев я нашел софтовый на форуме на таймере. Мне только не совсем понятно как его использовать.
получается 1 будет держаться на выходе согласно таймеру и каждый цикл переписываться, (ну или 0 когда таймер выключен) и выход софтового ШИМ так же запаковываем в слово и отправляем битовой маской в модуль вывода.
Какую погрешность он будет иметь с учетом цикла программы и времени передачи по Modbus ? или это совсем не критично ?
Когда используешь ШИМ модуля, то все вроде аппаратно происходит, согласно прошивке модуля.
Оффтопик, я так и не понял, как написанную программу на CFC переделать в ST ?, экспорт и импорт не срабатывает. Программа импортируется опять в CFC. Просто хочется посмотреть, что я там наваял именно в ST варианте.
Т е. вы хотите сказать что плк 100 произвольно создаёт адресса регистров для себя слэйва, причём не с нуля, и мне их придётся искать програмно? А нет способа проще? И если не трудно то дайте примерчик подробнее. Очень Вас прошу. Дело в том что работаю с другими производителями ПЛК в других средах, отличных от кодесис.Цитата:
Попытался убрать мастер внутрь слейва ,преобразование типов делаю так , но опять тишина.
Да все работает. Там у мастера не все поля отображаются в слейв. И в качестве такого шлюза код вообще не нужен.
Что б разобраться (я через конфигурацию не работаю) можно сделать например так.
Слейв(
2 byte имя ему _
мастер1(..)
мастер2(..)
..
)
var
P : pointer to array[0..999] of word;
p := adr(_);
Дальше (оffлайне) в мастерах куда только можно пишем 1,2,3,4...
Раскрываем p^
Ищем индексы (а это и есть - регистры) где появились циферки 1,2,3,4...
Вообщем разбираемся какое поле мастера в каком регистре слейва
Флоаты - нужно потыкать какое-то число и обнаружив где меняется, учесть - это 2 регистра, с стартом от четного номера
он их не произвольно создает, а согласно таблице расположения добавляемых вами "узлов" с выравниванием.
http://www.owen.ru/catalog/62474614 вот здесь есть на примере использования с ИП320.
Когда вы идете по дереву добавленных "узлов" (регистры, биты, 2 байта, 4 байта), в свойствах показывается размерность.
почему только это как-то не отражать сразу в свойствах, непонятно ?
А, учитывая, что все делается через библиотеки, тогда наверное надо все ручками расчитывать от 0-ого регистра.
Т.е. то что читается в модуле овен мастер тоже занимает область памяти контроллера и соответственно регистр?Цитата:
он их не произвольно создает, а согласно таблице расположения добавляемых вами "узлов" с выравниванием.
http://www.owen.ru/catalog/62474614 вот здесь есть на примере использования с ИП320.
Когда вы идете по дереву добавленных "узлов" (регистры, биты, 2 байта, 4 байта), в свойствах показывается размерность.
почему только это как-то не отражать сразу в свойствах, непонятно ?
А, учитывая, что все делается через библиотеки, тогда наверное надо все ручками расчитывать от 0-ого регистра.
Ребят подскажите где лежат библиотеки с modbus. Покопаю.Валенок вашу подсказку попробовал но всё по нулям. Нигде чисел не отображается. Т.е. все нули, а в определённый момент вообще контроллер улетает в релоад. Посижу немного и попробую ещё пару вариантиков.
Пришол виниться. (((
Ну не работаю я через конфигуратор.
Попробывал живьем. Действительное если в внутрислейвовом мастере (местном) модули input - то кырдык (???) Но если output - но работают.
Ее-мае. Ход мысли аффторов понятен. Но ! Ведь слейв на попытку записи извне в поля input модулей может прислать вполне определенное исключение. Не первый раз разочарован в мастере конфигуратора.
А Ваш релоад - убил.
Цепляйте библиотеки, и читайте ими прям область конфиг.слейва. Это гарантировано работает.
Только что сделал шлюз ПЛК1 м-s ПЛК2 м-s МВА8 :
ПЛК2 - читает всё разом из МВА8 в конфиг.слейв каждые 50мс. (38400)
ПЛК1 - читает это всё разом из ПЛК2 каждые 16-18мс (115200)
Ну или перекладывайте из соседских мастеров. Даже пробывать не хочу.
с удовольствием, только откуда:DЦитата:
Цепляйте библиотеки
. Делаю прокрутку. Когда дохожу до P[128]=0, срывает в релоад.Цитата:
А Ваш релоад - убил.
Спасибо, то, что нужно!Цитата:
IF in1 THEN (*Пока вход 1 включен*)
U1:=izm; (*эта переменная повторяет измеренное значение*)
END_IF
(*после выключения входа 1 в переменной U1 запомнится значение в момент отключения входа in1*)
IF in2 THEN (*Пока вход 2 включен*)
U2:=izm; (*эта переменная повторяет измеренное значение*)
END_IF
(*после выключения входа 2 в переменной U2 запомнится значение в момент отключения входа in1*)
Ещё вопрос. Хочу ввести ещё переменную, чтобы можно было видеть разность U2 и U1, типа U:=U2-U1. Переменная U естественно REAL? Почему - то при таком раскладе U всё равно показывает 0, хотя значение U2 и U1 есть.
Решил попробовать сделать контроллер мастером и записать переменные в свой контроллер. Но обнаружил что поддерживаются только 232 интерфейсы и 485. 485 у меня занят. 232 не пойдёт, ибо длинна линии больше 3 метров. А езернет модулем модбас мастер не поддерживается? Или библиотеки есть какие нибудь?.
15.43 Вроде нашёл библиотеки. Сейчас буду разбираться.
По сути мне только 3 и 6 функции нужны.
Вот только что обнаружил юниверсал модбас девайс. Посмотрю может в нём что есть. Помню что-то читал в мануале.
А в библиотеках не поддерживается езернет. Там только между rs'ами выбирать можно. Что делать? Если бы не было в трмах101 чудо протокола ОВЕН я бы не задавал тут вопросов. Что делать. ПЛК конфиг поддерживает овен на ура. Я получаю значения по протоколу ОВЕН, а вот дальше то что предпринять? Свободен только езернет. 232ой не годиться ввиду длины. Вокруг частотники и сильные помехи.
В комплекте в 63/73 идут modbus.lib и owennet.lib. На модель плк - клади. Оба протокола можно на один порт повесить.
syslibcom.lib - в комплекте к среде
232 можно в 485 конвертером
syslibsocket.lib -в комплекте к среде
в параметрах umd - см. netmode (tcp/serial, и ip самый первый) - мастеров конфигуратора не юзаю.
На родной слейв конфигуратора - жалоб не было
reload - прокрутка в цикле значений под указателем ? Обращение к памяти вне зоны доступа - защита системы. То что у меня 0..999 был - пример. Где в онлайне ??? там и кончиласть доступная память
Vorgehen попробуйте 232 интерфейс, у него 15 метров макс по стандарту, примените экранированный кабель заземленный с одной стороны, уменьшите скорость.
Поднимали связь на 40 метров по этому интерфейсу, дальше не взлетело.
здравствуйте, уважаемые профи кодесиса 2,3. пишет Вам чайник)) большая просьба к Вам: напишите плиз прогу, чтобы при нажатии на кнопку пуск объект перемещался только по оси иксов. я сам пытался...но ни гу-гу..выкладываю свою версию. спасайте, пожалуйста!!!!
Только развлечения ради, держите. Даже больше чем Вы хотели.
PROGRAM PLC_PRG
UPDКод:VAR
Res:BOOL; (*Кнопка Сброс*)
ToLeft: BOOL; (*Копка влево*)
ToRight: BOOL; (*Кнопка вправо*)
x_pos: INT := 0; (*Относительная координата по Х*)
END_VAR
IF ToRight AND x_pos<= 200 THEN
x_pos:=x_pos+1; (*Двигать вправо, но не дальше 200*)
ELSE
ToRight:=0; (*Досигли правого края, кнопку можно выклбчить*)
END_IF
IF ToLeft AND x_pos>= -200 THEN
x_pos:=x_pos-1; (*Двигать влево, но не дальше -200*)
ELSE
ToLeft:=0; (*Досигли левого края, кнопку можно выклбчить*)
END_IF
IF Res THEN (*Если нажали кнопку Сброс, то*)
ToLeft:=0; (*Выключить кнопку*)
ToRight:=0; (*Выключить кнопку*)
x_pos:=0; (*Квдратик в центр области перемещения*)
END_IF
Вложение можно скачать здесь
melky сначала надо получить результат в принципе, а он не получается, по непонятным причинам. Уже не знаю с чем может быть связано. Я уже на своём контроллере поставил опрос адрессов с 0 по 50. А на овене во все 2 байтовые переменные поместил число. Молчёк. Никакого ответа. Может быть модуль Modbus slave отключён из-за того что версия прибора L? Полное название ПЛК 100- 220. Р-L. Ладно попробую библиотеки.Важно получить результат в принципе.
Вот еще один вариант на SFC.
Здесь, в отличии от предыдущего варианта на ST, кнопки влево, вправо и сброс можно нажимать в любой последовательности.
Вложение 9226
UPD
Вложение можно скачать здесь https://drive.google.com/open?id=0B1...UpjN3R6ZHRFZzg
А может быть неработоспособность модуля modbus slave в плк конфиг связана с севшей батарейкой в контроллере?
Vorgehen в Modbus 0 адрес используется для широковещательных сообщений. Может это мешает ?
L от M отличается только количеством байт для Modbus, других отличий быть не должно.
Я уже задавал выше вопрос про перемещение в зависимости от измеренных значений с модуля ввода. И возникла при этом проблема, так как частота измерений от 2 гц и больше, выходы контроллера не успевают срабатывать. Можно - ли как - то сделать, не меняя частоту, чтобы при измеренной разнице значений, включался один выход например на секунды 3, и только после этого замер значений продолжался. Пробовал сделать это всё с помощью таймеров, но результата никакого, т.к. таймеры всё время переключались.
Вот код того, что я написал. Хоть и задал время в таймере 3 секунды, и обозначил один из выходов FALSE, он всё включается меньше, чем через секунду, из - за измеренного значения.
Проще говоря, как сделать, чтобы цикл таймера не сбивался и длился полностью 3 секунды, а не переключался мгновенно на другой?Код:IF DI1 THEN
U1:=izm1;
END_IF
IF DI2 THEN
U2:=izm1;
END_IF
IF U2-U1>0 AND DO7=TRUE AND DI17=1 THEN
move_right(IN:=TRUE, PT:=T#0s);
END_IF
IF move_right.Q AND DO10=FALSE THEN
DO9:=TRUE;
DO10:=FALSE;
move_right(IN:=FALSE, PT:=T#3s);
END_IF
IF U2-U1=0 AND DO7=TRUE AND DI17=1 THEN
DO9:=FALSE;
DO10:=FALSE;
END_IF
IF U2-U1<0 AND DO7=TRUE AND DI17=1 THEN
move_left(IN:=TRUE, PT:=T#0s);
END_IF
IF move_left.Q AND DO9=FALSE THEN
DO9:=FALSE;
DO10:=TRUE;
move_left(IN:=FALSE, PT:=T#3s);
END_IF
В первом байте (где адресс прибора). А адресс регистра может быть ноль совершенно спокойно. И пример тому мву-8 выход 1. melky вы меня не правильно поняли. 0-50 я имел ввиду адресса регистров. Я пытался прошупать первые 51 регистр предварительно поместив туда число, но мои попытки пока не к чему не привели. Я подозреваю что проблема в том что память энергонезависима и зависит от батарейки. А она у меня села потому что после перезагрузки (снятие питания и вновь подача) контроллера программа не сохраняется.Цитата:
Vorgehen в Modbus 0 адрес используется для широковещательных сообщений. Может это мешает ?
Только модбас или овен тоже? У меня соответственно 15 переменных типа флоат, а это 60 байт. Должно остаться.Цитата:
L от M отличается только количеством байт для Modbus, других отличий быть не должно.
уважаемые профи кодесиса, здравствуйте!! вопрос Вам хочет задать чайник)) можете написать алгоритм любой для работы с массивами ( желательно с визуализацией). прочитал в петрове плк теория понятна, но сам сделать увы силёнок не хватает :-) спасибо заранее за помощь!!!!!!!
Vorgehen тогда корректнее надо ставить вопрос, вы говорили об адресах а не регистрах.
Вы программу загрузили в прибор на постоянной основе или просто ?
Память на все, если правильно понимаю, независимо от протокола.
Если вы опрашиваете модуль и его входы не в логической единице, то вы и получите 0 всегда.
Если вы записываете в модуль, то смотрите в какой регистр по документации необходимо записывать, какой командой и какое значение (например если выходы поотдельности работают в ШИМ режиме и вам надо его включить через Modbus вы должны записать 1000 в регистр этого выхода типа word а не булеву 1)
Ошибка в описании МВУ8 Приложение Таблица В.4. Регистры протокола ModBus
Выходов 8 с 1 по 8, регистры с 0 по 7 (а не 8)
1 выход запись по регистру 0 в режиме RTU значения word 1000 командой 16(10h) должен включить первый выход.
melky да я всё понимаю. Теорию знаю наизусть. У меня 3 мву8 модуля работает на производстве и цыплял я их к другому контроллеру не овеновскому, всё замечательно работает. А Сам реализовывал 03 функцию протокола под линукс на языке СИ в своё время.
Сейчас речь о том что необходимо разобраться в причине нерабочего состояния модуля плк-конфиг. Потому что это решит одну из проблем на производстве. Программу загружаю при помощи иконки на панели инструментов выглядит он как синенький компьютер и когда на него наводишь мышку появляется слово подключение в кодесис 2.3. Можно конечно изучать теорию, но подчеркну что я пользуюсь контроллерами другого производителя. И если изучать среды всех ныне существующих производителей, то жизни не хватит. Кстати Вы меня натолкнули на мысль что я может быть действительно как то не правильно загружаю программу в контроллер?
Vorgehen, программа сперва загружается в оперативу при команде "online" и там работает до выключения питания.
По команде "Ондайн" - "Создание загрузочного проекта" уже пишется во Flash память и будет работать после перезагрузки, выключении питания.
сам нарвался сперва на это :)
Конфиг ПЛК должен указывать точный адрес модуля и тип протокола, на счет МВУ не подскажу, а МК110 протокол определяют вроде автоматически Modbus RTU или ASCII или ОВЕН.
melky спасибо Друг. Пошёл пробовать.Цитата:
По команде "Ондайн" - "Создание загрузочного проекта" уже пишется во Flash память и будет работать после перезагрузки, выключении питания.
Я делал просто онлайн.
уважаемые профи кодесиса, здравствуйте!! вопрос Вам хочет задать чайник)) можете написать алгоритм любой для работы с массивами ( желательно с визуализацией). прочитал в петрове плк теория понятна, но сам сделать увы силёнок не хватает :-) спасибо заранее за помощь!!!!!!!
http://www.owen.ru/forum/showthread....ll=1#post90889
Напомню что на видео, но точно что то связано с массивами
здравствуйте, многоуважаемые профи кодесиса) очень нужна Ваша помощь (не откажите плиз чайнику) :-) дело обстоит так...мне надо нарисовать две стрелки над элементом...причём надо записать код как-то так, чтобы при нажатии на кнопку из визуализации над этим объектом эти стрелки моргали одновременно с какой-нибудь продолжительностью (например 2 сек горят, 2 сек не горят и чтобы это повторялось). с меня ящЫк пивасика))) спасибо))
Валенок и melky спасибо за помощь. Завёлся модуль модбас мастер. После того как ткнул создание загрузочного проекта. Буду решать с помощью UMD. Спасибо Ребят.
Для Valadar 71:
_____________
Ну, как-то так.
Рисовать не старался)):