PDA

Просмотр полной версии : ВОПРОС-ОТВЕТ (отвечаем на простые вопросы от новичков)



Страницы : 1 2 3 4 5 6 7 8 9 10 11 12 [13] 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

Yegor
28.08.2014, 07:14
1. Если значение с аналогового входа меньше определенной уставки в течение некоторого времени (единицы секунд, точность не важна), то выполнить определенное действие, при этом нужно не блокировать основной поток, т.е. "получить значение со входа, подождать 10 секунд, опять получить значение", а в это время контроллер более ничем не занят не подходит.
VAR
timer: TON := (PT := T#10s);
END_VAR

timer(IN := AI1 < 5);
IF timer.Q THEN
(* Значение ниже уставки дольше 10 секунд *)
(* Выполняем определённые действия *)
END_IFКстати на ПЛК вообще не принято вешать поток. Об этом можно не сообщать дополнительно. Если вы напишете что-то в духе WHILE AI1 > 5, то сторожевой таймер просто перезагрузит устройство через пару секунд.
2. Чем и как считать время наработки (логической единицы на одном из входов)?
VAR
sectrig: R_TRIG;
running: BOOL; (* Логический вход *)
END_VAR
VAR RETAIN
uptime: DWORD := 0; (* Наработка в секундах *)
END_VAR

sectrig(CLK := TIME_TO_DWORD(TIME()) MOD 1000 > 500); (* Тик-так *)
uptime := uptime + BOOL_TO_DWORD(sectrig.Q AND running); (* Раз в секунду выражение в скобках даёт TRUE. Соответственно за скобками — единица *)Кто-то вместо этого суммирует дельту между проходами по TIME(), но они упираются в 49 суток, т.к. больше в 32-битный TIME не помещается. При счёте секундами предел, очевидно, в 1000 раз больше (130 с чем-то лет).

Василий Кашуба
28.08.2014, 10:50
VAR
timer: TON := (PT := T#10s);
END_VAR

timer(IN := AI1 < 5);
IF timer.Q THEN
(* Значение ниже уставки дольше 10 секунд *)
(* Выполняем определённые действия *)
END_IFКстати на ПЛК вообще не принято вешать поток. Об этом можно не сообщать дополнительно. Если вы напишете что-то в духе WHILE AI1 > 5, то сторожевой таймер просто перезагрузит устройство через пару секунд.
VAR
sectrig: R_TRIG;
running: BOOL; (* Логический вход *)
END_VAR
VAR RETAIN
uptime: DWORD := 0; (* Наработка в секундах *)
END_VAR

sectrig(CLK := TIME_TO_DWORD(TIME()) MOD 1000 > 500); (* Тик-так *)
uptime := uptime + BOOL_TO_DWORD(sectrig.Q AND running); (* Раз в секунду выражение в скобках даёт TRUE. Соответственно за скобками — единица *)Кто-то вместо этого суммирует дельту между проходами по TIME(), но они упираются в 49 суток, т.к. больше в 32-битный TIME не помещается. При счёте секундами предел, очевидно, в 1000 раз больше (130 с чем-то лет).
Забыли добавить, что сравнивать две величины можно функциями GT(Больше чем) или LT(Меньше чем).

melky
28.08.2014, 12:36
Делал для подсчета на CFC, сперва на ПР, потом перенес на Codesys.
Считать можно все, что угодно, бутылки, ящики, контейнеры и т.д., в примере время в секундах, минутах, часах, днях, а так же сбрасывать необходимые ячейки битовой маской по условиям.
Сорри, что без описания, как есть.

4 миллиарда дней в примере поделите на года :)
переписывать на ST лень, потому как запутаюсь я там, может у кого-то быстро получится переписать.

забыл, можно объеденить в стек для дальнейшего подсчета, годов, веков :))

Shpilli Willi
28.08.2014, 13:01
Добрый день!

Делаю связь между плк100 и плк110 по модбасу. Мастер плк 100. Вопрос такой:
1) Как правильно раздавать порты (и что физически эти порты означают). Какой порт нужно задать в слейве, и какой в мастере?
2) Когда мы создаем элемент Модбас (мастер) (в конфигурации ПЛК), то мы не можем заменить Debug RS232 на ТСР. При выборе RS485 не работает (РТУ поставил). На что правильно заменить?

Проверял в лектусе при тех же настройках, нужное значение в него пришло.

Заранее спасибо за ответы!

melky
28.08.2014, 13:09
Shpilli Willi должен меняться Debug на TCP, правой клавишей по нему и Заменить, либо добавить и потом удалить Дебуг.

Shpilli Willi
28.08.2014, 13:16
melky Может у меня КоДеСис не правильный?14200

Shpilli Willi
28.08.2014, 13:30
Извините, вопрос снят :rolleyes: Просто нужно было перезагрузить контролллер)

vvu2011
30.08.2014, 15:18
Здравствуйте!

Как можно защитить проект от редактирования, но сохранить возможность записи его в ПЛК? В идеале было бы запретить просмотр кода?

Спасибо.

capzap
30.08.2014, 15:19
Здравствуйте!

Как можно защитить проект от редактирования, но сохранить возможность записи его в ПЛК? В идеале было бы запретить просмотр кода?

Спасибо.запароленая библиотека Вам поможет

Валенок
30.08.2014, 15:55
Или пароли на группы. Можно что показать, что-то скрыть. При это грузить

fotonboxx
30.08.2014, 17:46
Вы лучше напишите подробное ТЗ, а не ваш алгоритм работы, так как решений может быть много, а результат один и тот же.

Ок.
Это простой шкаф управления насосами на ОВЕН-160.
Есть датчик давления 4-20мА на входе, если давление падает ниже определенной уставки, то шкаф должен остановить насос.


Кстати на ПЛК вообще не принято вешать поток. Об этом можно не сообщать дополнительно. Если вы напишете что-то в духе WHILE AI1 > 5, то сторожевой таймер просто перезагрузит устройство через пару секунд.
Да, это-то меня и поставило в тупик, т.к. привык к потокам, мютексам, блокировкам и т.п. Здесь так не получится.



VAR
timer: TON := (PT := T#10s);
END_VAR

timer(IN := AI1 < 5);
IF timer.Q THEN
(* Значение ниже уставки дольше 10 секунд *)
(* Выполняем определённые действия *)
END_IF
Но ведь пока таймер будет тикать цикл не закончится и будет или перезапущен WatchDog'ом или поток будет висеть на время таймера, так?

Василий Кашуба, Yegor:
Сделал так:

1. По аналоговому входу пока ФБ Hysteresis, посмотрим на тестовом стенде.
2. Про счетчик наработки:
- Сделал отдельный task, циклически вызываемый каждую секунду, его содержимое (http://piccy.info/view3/6905415/720f9b40295e20236d15187042b869ad/orig/).
Пробовал разные приоритеты и 0 и 15 - задача при любых значиениях просто блокирует выполнение чего-то еще, т.е. до цикла PLC_PRG дело просто не доходит. Если отключаю задачу, то все корректно выполняется PLC_PRG.
С чем это может быть связано?

amn
30.08.2014, 19:08
Но ведь пока таймер будет тикать цикл не закончится и будет или перезапущен WatchDog'ом или поток будет висеть на время таймера, так?

Вообще-то таймер не тикает. Он только в каждом цикле поглядывает на часы и если время подошло выдает сигнал на выходе.


до цикла PLC_PRG дело просто не доходит.
Возможно Вы PLC_PRG в задачи забыли включить. Так как при использовании task это ПОУ автоматически не вызывается.

Василий Кашуба
30.08.2014, 19:40
Ок.
Это простой шкаф управления насосами на ОВЕН-160.
Есть датчик давления 4-20мА на входе, если давление падает ниже определенной уставки, то шкаф должен остановить насос.
...
С чем это может быть связано?
Схема, как уже говорил, очень простая. 14212

capzap
30.08.2014, 19:49
Схема, как уже говорил, очень простая. 14212

ну и плохо что так считаете, а как же антидребезг

fotonboxx
30.08.2014, 19:58
Вообще-то таймер не тикает. Он только в каждом цикле поглядывает на часы и если время подошло выдает сигнал на выходе.
Не знал, спасибо!



Возможно Вы PLC_PRG в задачи забыли включить. Так как при использовании task это ПОУ автоматически не вызывается.
Ага, включил PLC_PRG как freewheeling task с приоритетом 1, а подсчет наработки с таймером в секунду и приоритетом пробовал - 1,2,5.
Watchdog неактивен и там и там.
Далее, сделал тестовую задачу с таймером 1 сек, приоритетом 15, в котором есть только ФБ GE.

Результат - в визуализации нельзя ни на кнопку нажать ни показания входов посмотреть, т.е. визуализация не работает. Если отключаю подсчет наработки или тестовую задачу - то все ок.
Это получается Codesys не умеет в несколько пользовательских потоков работать?

fotonboxx
30.08.2014, 19:58
ну и плохо что так считаете, а как же антидребезг
Ну тут либо таймер как я понимаю, либо гистерезис. И фильтрация на входе средствами ПЛК.

Василий Кашуба
30.08.2014, 20:01
ну и плохо что так считаете, а как же антидребезг
Поставьте между "GT" и "AND" ФБ "TON" с задержкой 10 s. и всё будет ОК.

Валенок
30.08.2014, 21:33
to fotonboxx
Всё что-то у Вас не работает. Выложили б свое творчество, а то астральное видение не всегда приходит.

fotonboxx
30.08.2014, 21:58
to fotonboxx
Всё что-то у Вас не работает. Выложили б свое творчество, а то астральное видение не всегда приходит.
Выложил =) Буду благодарен, если посмотрите.

Валенок
30.08.2014, 22:56
Включил всё. Визуализация - работает

fotonboxx
30.08.2014, 23:35
Включил всё. Визуализация - работает

А у меня нет =)))
Переоткрыл проект в Codesys.

1. Удалил все задачи. Проверка - в визуализации выставить входное давление >1500, нажать Auto, потом Start. Работает.
2. Создал задачу Count_Pump_Working_Time, вызывает одноимённую программу, вызов каждую секунду, приоритет 1.
3. Создал задачу PLC_PRG, тип freewheeling, приоритет 1.
4. Проверка - в визуализации выставить входное давление >1500, нажать Auto, потом Start. Ничего не происходит, даже если Start долго держать.
5. Выключил задачу Count_Pump_Working_Time.
6. Проверка - не работает, как в п. 4.

Поэтому, напишите плиз свою версию ОС и CodeSys. Может, ему x64 не по-душе? Но вообще, впервые с таким сталкиваюсь, чтобы IDE некорректно работала.

Апдейт:
Вот такая вот картинка (http://piccy.info/view3/6907183/77fc71016408fbca38becbb37805eb52/orig/) в дебаггере. Переменные Current_State, System_State.Idle, System_State.Running при каждом цикле меняют свои значения на случайные.
Может, как-то не так объявляю\присваиваю?



Это в специально отведенном месте:
TYPE System_States :
STRUCT
Idle:BYTE:=0;
Running:BYTE:=1;
END_STRUCT
END_TYPE

Это в блоке для глобальных переменных
VAR_GLOBAL
Current_State: BYTE;
System_State:System_States;


Удаляю все задачи и... ляпота - Current_State=0, System_State.Idle=0, System_State.Running=1.
Эти переменные используются только в PLC_PRG, так что о блокировках речи не идет.

Валенок
31.08.2014, 03:31
Сделайте проще - замените везде весь код на ";". Работает визуализация ?
PS
Версия КДС не имеет значения - 2.3.9.35, x64. Жму кнопы - что-то меняется. Надо чего от визуализации ?

PS
Можно еще сделать проект/очистить все
И рекомендую в окнах CFC сделать правая кнопа - порядок/в соответствии с потоком

Yanis
04.09.2014, 09:20
Здравствуйте, требуется перенести мастерскаду на другой компьютер, подскажите пожалуйста, как перенести OPC сервер вместе с конфигурацией?

melky
05.09.2014, 23:22
Есть такая формула в задаче, вызываемой раз в секунду
kwt_summ:=kwt_summ+active/3600/1000;
переменная в глобальных тип real.

Как скорректировать переменную нужным значением в основной программе CFC.
Пробую через move с EN по фронту, перестает считать сразу же.

Если на выходе Move поставить kwt_summ, считать не будет. Пока вышел из ситуации как на картинке, но как-то криво...
Как вообще менять переменные на лету ? то есть не корректировать, а вводить новое значение для отсчета ?

petera
07.09.2014, 00:12
Есть такая формула в задаче, вызываемой раз в секунду
kwt_summ:=kwt_summ+active/3600/1000;
переменная в глобальных тип real.

Как скорректировать переменную нужным значением в основной программе CFC.
Пробую через move с EN по фронту, перестает считать сразу же.

Если на выходе Move поставить kwt_summ, считать не будет. Пока вышел из ситуации как на картинке, но как-то криво...
Как вообще менять переменные на лету ? то есть не корректировать, а вводить новое значение для отсчета ?
Если еще вопрос актуальный.
14267

14268 --> 14269 --> 14270--> 14271

melky
07.09.2014, 10:18
petera актуально, через SEL вчера тоже пробовал, но в вашем варианте сразу подается на Round, а у меня было раздельно, приеду домой проверю такой вариант.

Перестает считать :(
при вводе 5-ти значного числа в kwt_summ и пример становится нерабочим :(

8191, 8192 граница работы и зависона.

Занимательно, если в active указать очень большое число, то вроде как ывсе и считается.
Если же указать маленькое число, ну скажем 1500 (1,5 кВт) то счет замерзает...

Запущенный пример почти через 2 часа - изменений ноль.

И такой вопрос, а кто сказал Кодсису, что мне это значение необходимо с округлением в 2 знака ? Ну вот откуда он так решил ?

primer_x - даже такой код в вызываемой программе перестает считать ?????? чудеса блин

petera
07.09.2014, 22:48
petera актуально, через SEL вчера тоже пробовал, но в вашем варианте сразу подается на Round, а у меня было раздельно, приеду домой проверю такой вариант.

Перестает считать :(
при вводе 5-ти значного числа в kwt_summ и пример становится нерабочим :(

8191, 8192 граница работы и зависона.

Занимательно, если в active указать очень большое число, то вроде как ывсе и считается.
Если же указать маленькое число, ну скажем 1500 (1,5 кВт) то счет замерзает...

Запущенный пример почти через 2 часа - изменений ноль.

И такой вопрос, а кто сказал Кодсису, что мне это значение необходимо с округлением в 2 знака ? Ну вот откуда он так решил ?

Ответ содержится в самом вопросе.
Два знака после запятой для числа 12200.86 обусловлено ограничением разрядной сетки представления числа REAL.
Нужно использовать числа LREAL (диапазон от: 2.2250738585072014e-308 до 1.7976931348623158e+308).
14289
В этом случае вроде вычисления не замерзают даже при маленьком значении переменной active
14291

melky
07.09.2014, 23:15
ПЛК100 - LREAL не поддерживается :( или костыли в КДС ?

petera
07.09.2014, 23:21
ПЛК100 - LREAL не поддерживается :( или костыли в КДС ?
Откуда инфа?
ЗЫ. Вопрос снимаю.

melky
07.09.2014, 23:32
Так поменял тип переменной и КДС сразу же отругался при компиляции.....

petera
08.09.2014, 00:35
ПЛК100 - LREAL не поддерживается :( или костыли в КДС ?
В OSCAT есть функции для вычислений с двойной точностью.
Не знаю нужно ли для выходной переменной kwt такая точность. Если оставить ее REAL, то максимальное количество знаков в у нее будет 7, т.е. 9999999 или 999999.9 или 99999.99. Подходит ли такое разрешение по условию задачи?

petera
08.09.2014, 01:48
ПЛК100 - LREAL не поддерживается :( или костыли в КДС ?
Предлагаю такой вариант.
14292

Для вычислений kwt_summ с двойной точностью использую функции R2_ADD из OSCAT. При этом kwt_summ удалил из глобальных переменных, скорей всего она там не нужна.
Для вычислений с двойной точностью используется пользовательский тип данных REAL2

TYPE REAL2 :
STRUCT
R1 : REAL; (* small value *)
RX : REAL; (* big value *)
END_STRUCT
END_TYPE
Предлагаю еще один из вариантов для коррекции начального значения kwt_summ - использовать действие.
14293
По этому для программы PR2 добавил действие CORRECT
Получилось так
14292
В основной программе используется функция R2_SET из OSCAT для преобразования начальных значений kwt_start из REAL в формат с двойной точностью REAL2.
Вроде все работает.
14294

capzap
08.09.2014, 05:39
Откуда инфа?
ЗЫ. Вопрос снимаю.

А в опциях проекта ставили галку работать с lreal?

petera
08.09.2014, 09:10
А в опциях проекта ставили галку работать с lreal?
Там галка называется "Трактовать LREAL как REAL". В этом случае вернемся к исходной проблеме переполнения разрядной сетки.

melky
08.09.2014, 09:19
Да, проблема остается, как petera говорит.
А какие ПЛК от ОВЕН работают с LREAL ? 110-й работает ?

В принципе я на 100-ке обойду это тем, что буду сбрасывать раз в сутки счет и прибавлять уже к конечному значению, то есть от обратного пойду, но конечно меня такое поведение удивило....

Попробую с оскатовской библиотекой. На выходе да, точность 99999.99 достаточна, вроде счетчик больше и не показывает.
Важно при расчете и чтобы собственно считало...

petera
08.09.2014, 10:56
Да, проблема остается, как petera говорит.
Попробую с оскатовской библиотекой. На выходе да, точность 99999.99 достаточна, вроде счетчик больше и не показывает.
Важно при расчете и чтобы собственно считало...
А почему не хотите готовым примером воспользоваться из поста #3253?
Хочу заметить, что здесь проблема в точности вычислений глубже. При использовании REAL в Вашей формуле kwt:=kwt+(IN/3600000); будет накапливаться систематическая ошибка из-за ограничения разрядной сетки, при чем чем больше накопленная величина kwt, тем больше погрешность.
Ваш счетчик энергии врать будет безбожно. Я бы вернулся к формуле из поста http://www.owen.ru/forum/showthread.php?t=10555&p=143899&viewfull=1#post143899
summa:=summa+IN;
kwt:=summa/3600000;
И перешел бы на арифметику с фиксированной точкой для вычисления summa.

capzap
08.09.2014, 11:13
http://www.owen.ru/forum/showthread.php?t=10285&page=5 это мое первое вложение из сохранившихся на этом форуме. Помню где то ешается проблема используя целую часть как дворд,а знаки после запятой как реал, и для визуализации получается строковая переменная как конкат этих значений

S.A.D.
08.09.2014, 11:53
подскажите пожалуйста будет ли работать опрос на ПЛК160, если у меня будет на одном 485 порту в конфигурации 2 мастера, один RTU, второй ASCII? При этом в одном цикле опрашиваем одно устройство, в другом другое. Или одну секунду одно устройство, вторую сек. другое устройство и т.д.

capzap
08.09.2014, 12:12
А слейвам как будете объяснять что запрос рту или аскии, они то просто слушают порт и ждут нужную комбинацию байт

S.A.D.
08.09.2014, 12:30
Поидее слейв должен ингнорировать непонятный для него запрос
Попробовал сейчас, используя лектус как 2 слейв устройства. Вроде работает

Валенок
08.09.2014, 14:00
подскажите пожалуйста будет ли работать опрос на ПЛК160, если у меня будет на одном 485 порту в конфигурации 2 мастера, один RTU, второй ASCII? При этом в одном цикле опрашиваем одно устройство, в другом другое. Или одну секунду одно устройство, вторую сек. другое устройство и т.д.
Будет......

S.A.D.
08.09.2014, 14:06
Валенок,
спасибо)

RadistDog
08.09.2014, 14:08
Всем здравия!

Прошу помочь мне разобраться с проблемой.
Имеются два модуля МВА8.
Имеются 7 термометров-сопротивлений ДТС125-50М.В2.60 .
Термометры подключены к этим МВА по трёхпроводным схемам.
Настройки входов, к которым подключены данные термометры одинаковые -- ТСМ50М (Cu`50) W100=1,428

Проблема в том, что на выходе МВА я получаю температуру примерно на 24 градуса меньше, чем реальная температура.
Причём эту неправильную температуру я получаю даже в конфигураторе опрашивая нужные входы МВА8.
Неверные показания получаются по ВСЕМ термометрам на всех входах, и смещение (-24гр.) у всех градусников одинаковое.

Где я ошибаюсь? Что я не так настроил??

Причём, в начале работы я точно помню что в тестовых целях подключал один из этих ДТС125-50М.В2.60 к МВА8 и получал вроде бы правильную температуру (но тогда она была примерно +26+27гр., а сейчас датчики находятся в температуре примерно +10гр.)

Уже всю голову сломал, перебирал все возможные типы датчиков из тех что зашиты в конфигуратор МВА8 -- результат перебора отрицательный. Или совсем далёкие значения начинают сниматься, или ошибка по данному входу выскакивает.

Сопротивление градусников мерял - 50 Ом как положено.
Линии достаточно длинные - 1,2 Ома одна жила. Но я уже пробовал и прямо короткими проводами прицепить датчик к МВА8, с тем же результатом.

Валенок
08.09.2014, 16:29
А сделайте тип, например, 900ом и прицепите соотв.резистор прям на клеммы мва8 и посмотрите рез-т.
Ну и в РЭ есть что-то про юстировку.

RadistDog
08.09.2014, 16:45
А сделайте тип, например, 900ом и прицепите соотв.резистор прям на клеммы мва8 и посмотрите рез-т.
Ну и в РЭ есть что-то про юстировку.

Я уже знаю, что просто так Вы не напишете ничего ))) только опять я пока не могу догадаться к чему Вы клоните...)))
Я подцеплю многооборотный переменник на 1К и посмотрю.

Смущает одно - сразу два МВА8 одинаково разъюстировались?
И как, интересно, оценить адекватность реакции МВА8 на тестовые 900 Ом??

Кстати, на других входах, сконфигурированных на 0..20Ма, показания снимаются корректно!

Просто модуль за 80 км от меня, поэтому доберусь до него не скоро. Вот и теоретизирую.

Валенок
08.09.2014, 20:09
Cобссно к чему клоню ? Просто узнать что показывает модуль непосредственно на клеммах при известном R. От этого и оттолкнутся.
Локализовать:
1.Проблема МВА и/или условий его эксплуатации
2.Проблема подключения к МВА
3.Проблема линии
4.Проблема подключения к датчикам
5.Проблема датчиков

Часть проблем наверное отвалилась, но мешают 80 км)))
Тоже теоретизирую

900ом - это тип входа а не тестовое значение. Есть еще 2000

RadistDog
08.09.2014, 20:59
Cобссно к чему клоню ? Просто узнать что показывает модуль непосредственно на клеммах при известном R. От этого и оттолкнутся.
Локализовать:
1.Проблема МВА и/или условий его эксплуатации
2.Проблема подключения к МВА
3.Проблема линии
4.Проблема подключения к датчикам
5.Проблема датчиков

Часть проблем наверное отвалилась, но мешают 80 км)))
Тоже теоретизирую

900ом - это тип входа а не тестовое значение. Есть еще 2000

Я понял, что имеется ввиду сконфигурить вход на 900-омный датчик. Но что должен теоретически показать модуль при подключении к этому входу ровно 900-омного резистора? Может он опять ошибется на 24 градуса, но я то как его проверю? Или мысль в том, что "а вообще он покажет хоть что нибудь"?
И еще раз повторюсь (вдруг это не воспринялось, но мне это кажется важным) - все другие входы этих же модулей с прицепленными активными датчиками 0..20 Ма работают как надо!
Прошу еще идей на эту тему. А то когда я буду на 80 км дальше от того места, где я сейчас нахожусь, то там мне не у кого будет умных мыслей спрашивать! )))

И да, предлагаю на неправильность подключения не грешить , ибо если не так подключить, то модуль тупо выпадет в ошибку. А ошибки у меня все обрабатываются. И я уже цеплял термометр прямо в шкафу тремя разноцветными проводами 20-сантиметровой длины, так что ошибиться в подключении ну никак не реально.

Дмитрий
09.09.2014, 11:21
Подключи магазин сопротивлений и прогони по таблице для начала, убедись что МДВВ показывает правильно или нет.

melky
09.09.2014, 11:33
petera
summa:=summa+IN;
kwt:=summa/3600000;

Это неправильная формула.
Предположим на счетчике показания 12000,00 кВт-ч
при опросе через секунду мощность на входе 1500 Вт
(12000+1500)/3600000=0,00375 кВт-ч

только фактически 1500/360000=0,00041666666 кВт-ч

Чтобы формула стала правильной надо в течение часа каждую секунду складывать показания IN и только потом делить на 3600000 и еще потом прибавлять к показаниям на час ранее.
Так что формула для расчета не канает как ни крути. По ней нельзя узнать расходуемую мощность через 17 минут, 30 секунд и так далее.

RadistDog
09.09.2014, 11:57
Подключи магазин сопротивлений и прогони по таблице для начала, убедись что МДВВ показывает правильно или нет.

Видимо Вы так же говорите о режиме юстировки? Я просто туда никогда ещё не лазил. Нужно же когда то начинать! Почитал мануал, потыкал конфигуратор в режиме оффлайн (но в оффлайне юстировка ничего не хочет делать). Подготовлюсь и буду пробовать непосредственно на модулях.

А что это за таблица, по которой Вы предлагаете проверить модуль МВА?

petera
09.09.2014, 12:06
petera
summa:=summa+IN;
kwt:=summa/3600000;

Это неправильная формула.
Предположим на счетчике показания 12000,00 кВт-ч
при опросе через секунду мощность на входе 1500 Вт
(12000+1500)/3600000=0,00375 кВт-ч

только фактически 1500/360000=0,00041666666 кВт-ч

Чтобы формула стала правильной надо в течение часа каждую секунду складывать показания IN и только потом делить на 3600000 и еще потом прибавлять к показаниям на час ранее.
Так что формула для расчета не канает как ни крути. По ней нельзя узнать расходуемую мощность через 17 минут, 30 секунд и так далее.
В моей формуле
Показания на счетчике не summa, а kwt. Для этого значения(12000) kwt, summa была бы равна 12000*3600000=43 200 000 000.
И через одну секунду
summa:=43 200 001 500
А показания на счетчике будут
kwt:=43 200 001 500/3600000=120000,000416666666666666666666667 кВт*ч.
Так, что все верно.
UPD.
Начинаем считать с 0
summa:=0 Вт*с
kwt:=0 кВт*с
через 1 сек
summa:=1500 Вт*с
kwt:=0,00041666666666666666666666666666667 кВт*ч
через 2 сек
summa:=3000 Вт*с
kwt:=0,00083333333333333333333333333333333 кВт*ч
через 3 сек
summa:=4500 Вт*с
kwt:=0,00125 кВт*ч
.........................
через 60 сек(1 мин)
summa:=90 000 Вт*с
kwt:=0,025 кВт*ч
.........................
через 3600 сек(1 час)
summa:=5 400 000 Вт*с
kwt:=1,5 кВт*ч

Валенок
09.09.2014, 14:25
но в оффлайне юстировка ничего не хочет делать
Странно даже как-то )))

..А что это за таблица, по которой Вы предлагаете проверить модуль МВА?
|реальное|измеренное|

RadistDog
09.09.2014, 14:34
Странно даже как-то )))

Действительно, могли бы уже наоффлайнить там чёнибудь юстировке в образовательных целях )))


|реальное|измеренное|

значения будут в Омах?? Это я к тому, что брать с собой большой серьёзный тестер, или не брать?

Валенок
09.09.2014, 14:36
Ну так если тип входа в омах - в них и покажет.

Дмитрий
09.09.2014, 15:40
На магазине задаешь омы 0град-50ом итд, в конфигураторе если правильно задал тип датчика видишь градусы, таблицы градуировочные, поищи в нете.

melky
09.09.2014, 21:07
petera великоваты циферки получаются для суммы, 43 миллиарда только для нынешних показаний счетчика....

kukla100
16.09.2014, 16:21
Подскажите, как можно реализовать блокировку алгоритма по времени (таймеру) для жадного заказчика?

Валенок
16.09.2014, 17:15
Подскажите, как можно реализовать блокировку алгоритма по времени (таймеру) для жадного заказчика?
Чтобы стержни не опускались пока не отбашляют ?

приборист
16.09.2014, 17:38
Чтобы стержни не опускались пока не отбашляют ?

Главное, чтобы поднялись, когда надо :)

kukla100
16.09.2014, 18:43
Вот вот, что то в этом духе:)

stskr
18.09.2014, 18:34
У меня такая задача.

Есть устройство, которое с определенной периодичностью - примерно раз в 0,5 сек. шлет данные в COM-порт.
Я хочу считывать эти данные в ПЛК100 через один COM-порт, обрабатывать и пересылать обработанные данные через другой COM-порт.

Есть загвоздка, связанная с тем, что размер посылки заранее неизвестен.
Длина посылки может варьироваться в диапазоне от 4 до 22 байт.
Формат сообщения известен.

Написал программу на основе первого примера отсюда:
http://www.owen.ru/forum/showthread.php?t=13585

Проблема в том, что функции из библиотеки требуют указания фиксированного размера в байтах для чтения/записи.
Если сделать размер буфера чтения больше, чем размер посылки: например, 25 байт,
то в конце получается мусор, который переносится в новые строки.
Причем не получается очистить буфер, присвоив переменной пустую строку.

Если сделать буфер меньше и потом склеивать строки (как в примере PR2.pro), то я не могу получить нормальную строку,
т. к. запись в буфер может начаться с середины посылки и я получу вместо данных мусор.

В обоих вариантах можно, конечно, отбрасывать неправильные строки, но тогда часть посылок будет теряться, что нежелательно.

Посоветуйте, пожалуйста, как решить эту задачу.
Либо дайте, пожалуйста, какой-то пример, в котором контроллер просто слушает порт,
а затем обрабатывает полученные посылки.

stskr
18.09.2014, 18:40
И еще у меня данные не приходят с того порта, который RS-232 Debug,
хотя в программе наблюдаю, что вроде бы отправка идет.

Может ли данный порт использоваться для пересылки данных или для этого можно задействовать только обычный порт RS-232?

kukla100
19.09.2014, 04:07
Незнаю большая разница в них нет, но я панель подключаю только к RS-232, а модем к RS-232 Debug. Пробывал подключать панель к RS-232 Debug, начинались какие то не понятки.

stskr
19.09.2014, 10:51
У меня такая задача.

Есть устройство, которое с определенной периодичностью - примерно раз в 0,5 сек. шлет данные в COM-порт.
Я хочу считывать эти данные в ПЛК100 через один COM-порт, обрабатывать и пересылать обработанные данные через другой COM-порт.

Есть загвоздка, связанная с тем, что размер посылки заранее неизвестен.
Длина посылки может варьироваться в диапазоне от 4 до 22 байт.
Формат сообщения известен.

Написал программу на основе первого примера отсюда:
http://www.owen.ru/forum/showthread.php?t=13585

Проблема в том, что функции из библиотеки требуют указания фиксированного размера в байтах для чтения/записи.
Если сделать размер буфера чтения больше, чем размер посылки: например, 25 байт,
то в конце получается мусор, который переносится в новые строки.
Причем не получается очистить буфер, присвоив переменной пустую строку.

Если сделать буфер меньше и потом склеивать строки (как в примере PR2.pro), то я не могу получить нормальную строку,
т. к. запись в буфер может начаться с середины посылки и я получу вместо данных мусор.

В обоих вариантах можно, конечно, отбрасывать неправильные строки, но тогда часть посылок будет теряться, что нежелательно.

Посоветуйте, пожалуйста, как решить эту задачу.
Либо дайте, пожалуйста, какой-то пример, в котором контроллер просто слушает порт,
а затем обрабатывает полученные посылки.

parovoZZ
19.09.2014, 13:28
Парни, такой вопрос. Вот картинка
14469

Меня интересуют цифры, обведённые овалами.
Если я присвою адресу %QB8.2.32 переменную, то с этого регистра я смогу не только читать, но ещё и писать? Как это сделать?

Валенок
19.09.2014, 14:21
Проблема в том, что функции из библиотеки требуют указания фиксированного размера в байтах для чтения/записи.

Но возвращают размер пришедшего/отправленного

stskr
19.09.2014, 17:49
Но возвращают размер пришедшего/отправленного
Валенок, спасибо. Я что-то малость затупил.
Задачу решил.

Отвечаю сам на свой вопрос про COM-порт.
Как оказалось, порты RS-232 и Debug RS-232 работают по-разному.
Подключился к обычному порту и обмен данными сразу пошел, а через debug не шел.

Валенок
19.09.2014, 18:50
Как оказалось, порты RS-232 и Debug RS-232 работают по-разному.
Подключился к обычному порту и обмен данными сразу пошел, а через debug не шел.
РЭ, т2.2, дебуг : только 8N1, [RTU - только слейв]
?

RadistDog
21.09.2014, 08:43
Всем здравия!

Прошу помочь мне разобраться с проблемой.
Имеются два модуля МВА8.
Имеются 7 термометров-сопротивлений ДТС125-50М.В2.60 .
Термометры подключены к этим МВА по трёхпроводным схемам.
Настройки входов, к которым подключены данные термометры одинаковые -- ТСМ50М (Cu`50) W100=1,428

Проблема в том, что на выходе МВА я получаю температуру примерно на 24 градуса меньше, чем реальная температура.
Причём эту неправильную температуру я получаю даже в конфигураторе опрашивая нужные входы МВА8.
Неверные показания получаются по ВСЕМ термометрам на всех входах, и смещение (-24гр.) у всех градусников одинаковое.

Где я ошибаюсь? Что я не так настроил??

Причём, в начале работы я точно помню что в тестовых целях подключал один из этих ДТС125-50М.В2.60 к МВА8 и получал вроде бы правильную температуру (но тогда она была примерно +26+27гр., а сейчас датчики находятся в температуре примерно +10гр.)

Уже всю голову сломал, перебирал все возможные типы датчиков из тех что зашиты в конфигуратор МВА8 -- результат перебора отрицательный. Или совсем далёкие значения начинают сниматься, или ошибка по данному входу выскакивает.

Сопротивление градусников мерял - 50 Ом как положено.
Линии достаточно длинные - 1,2 Ома одна жила. Но я уже пробовал и прямо короткими проводами прицепить датчик к МВА8, с тем же результатом.


Возвращаясь к моим баранам хочу доложить следующее:
Проблема решилась, правда причина осталась не ясной.

Вооружившись точным тестером, переменными резисторами и градуировочной таблицей я обнаружил, что оба моих модуля МВА8 врут при выборе типа датчика ТСМ50М (Cu`50) W100=1,428.
За неимением магазина сопротивлений, с помощью которого нужно проводить юстировку, я заморозил воду, сделал водно-ледяную смесь и засовывая в неё термометр ТСМ50М (тихонько помешивая градусником смесь в посудине) по нему калибровал модули согласно инструкции в РЭ.
Тестер, кстати, показывал сопротивление градусника, помещённого в водно-ледяную смесь, ровно 50 Ом.
Снимаемые через МВА8 показания с термометров стали похожими на правду.
Вот только я поздно догадался, что нужно было взять с собой ещё и обычный термометр (поверенный, используемый для выдачи спирта) чтобы точно убедиться в правильности юстировки!
Прошу опытных товарищей выразить своё мнение - юстировка таким способом может быть признана правильной?

stskr
22.09.2014, 11:22
РЭ, т2.2, дебуг : только 8N1, [RTU - только слейв]
?
О каком РЭ идет речь?

илья21
25.09.2014, 16:25
Здравствуйте такой вопрос есть модем ПМ01 на который приобрели сим карту мтс (заранее скажу что услуга мобильный офис на ней подключена) вставил ее с конфигурил ат командами набираю команду АТD8925******* на что он мне пишет no carier
вставил другую более старую симку заработало и дозвон пошел и все замечательно. Пробовал других операторов на каких работает на каких нет. Что за особенность такая и какие тогда симки надо брать? Что мне делать может кто подскажет?

Эдуард_Н
12.10.2014, 11:23
Расскажите пожалуста как работать с массивами данных, желательно с примерами, как создавать, как вызывать. И желательно в CFC.

capzap
12.10.2014, 11:33
Расскажите пожалуста как работать с массивами данных, желательно с примерами, как создавать, как вызывать. И желательно в CFC.

http://www.owen.ru/forum/showthread.php?t=13408&p=90889&viewfull=1#post90889 не cfc

Эдуард_Н
12.10.2014, 12:33
Как создавать дошло. Как теперь это вызывать, не понятно?

Smith2007
12.10.2014, 12:35
Здравствуйте такой вопрос есть модем ПМ01 на который приобрели сим карту мтс (заранее скажу что услуга мобильный офис на ней подключена) вставил ее с конфигурил ат командами набираю команду АТD8925******* на что он мне пишет no carier
вставил другую более старую симку заработало и дозвон пошел и все замечательно. Пробовал других операторов на каких работает на каких нет. Что за особенность такая и какие тогда симки надо брать? Что мне делать может кто подскажет?

Похоже это особенность ПМ01. Я долго возился с этим модемом и не мог понять почему не работает. Мне посоветовали сменить сим-карту. Купил МТС, Билайн и Мегафон. Спрашивал старые симки. Заработал на Билайне. МТС и Мегафон - отказался работать.

lara197a
12.10.2014, 12:45
если в смысле как найте в массиве нужное, то для этого используйте цикл FOR, для перебора данных и функцию EXit, для выхода из цикла при совпадении искомого.
Подробно это описано в книге уважаемого И.Петрова, по программированию ПЛК.
А выглядит примерно так:
cN:=0;
FOR cN:=0 TO 30 DO (*Месячный архив 31 день*)
IF in_arx_God=ARX[cN].God AND
in_arx_Mes=ARX[cN].Mesiac AND
in_arx_Den=ARX[cN].Den THEN (*Если год месяц и день в архиве совпали,то в выходные переменные массива запишем*)

Out_arx_D1:=ARX[cN].Dnevnaia1;
Out_arx_D2:=ARX[cN].Dnevnaia2;
Out_arx_D3:=ARX[cN].Dnevnaia3;
Out_arx_D4:=ARX[cN].Dnevnaia4;
Out_arx_D5:=ARX[cN].Dnevnaia5;

Out_arx_N1:=ARX[cN].Nochnaia1;
Out_arx_N2:=ARX[cN].Nochnaia2;
Out_arx_N3:=ARX[cN].Nochnaia3;
Out_arx_N4:=ARX[cN].Nochnaia4;
Out_arx_N5:=ARX[cN].Nochnaia5;

cn:=cN+1;

EXIT; (*выход из поиска*)
ELSE (*если не нашел, то выставляем флаг неудачного поиска*)
M_NEnachel:=TRUE;
END_IF
END_FOR

capzap
12.10.2014, 12:52
Как создавать дошло. Как теперь это вызывать, не понятно?Как то как, и не забудте периодически нажимать пункт из контекстного меню, сильно поможет если решили использовать CFC

Эдуард_Н
12.10.2014, 12:59
Спасибо. вроде все понятно.

MrNobody
13.10.2014, 12:01
Добрый день! Помогите разобраться с подключением ПЛК73 к модулю МК1104ДН4Р. Интерфейсная плата ПУ-5. Использую стандартный пример записи "Modbus запись Int и Real (ST)"
14723
Value пробовал 1 и 255

MrNobody
13.10.2014, 17:14
Добрый день! Помогите разобраться с подключением ПЛК73 к модулю МК1104ДН4Р. Интерфейсная плата ПУ-5. Использую стандартный пример записи "Modbus запись Int и Real (ST)"
14723
Value пробовал 1 и 255
считать данные со входов получилось, а вот записать не получается (((

приборист
13.10.2014, 22:51
Всем доброго времени суток!
Поясните пожалуйста, каким образом писать значения в регистры ПЧ?
Есть ПЛК73 есть ПЧВ2
Необходимо менять удаленно настройки мощности насоса (кВт и А, менять по 485, Modbus с помощью библиотек).
В РП есть такая таблица:
14735

Берем мощность двигателя. Адрес регистра 1199, тип данных Uint32 но значения лишь 0-20 при коэффициенте 1. Т.е. занимают они всего один регистр. Получается можно записать единичный регистр? Или писать надо именно 2 регистра?

Берем Ток двигателя. Адрес регистра 1239, тип данных тот же Uint32. Значения уже от 0.01 до 43.0, коэффициент 0.01. Получается писать надо от 0.0001 до 4300.0?

Проще всего проверить на ПЧ, а на объекте заниматься этим не хочется.
Может сталкивался кто?

RV9WFJ
14.10.2014, 09:30
А зачем вы хотите удаленно настройки двигателя менять. У вас двигатель меняться будет постоянно? Записывать надо (судя по документации) 1199 - 0-20, в 1239 от 1 до 4300. REAL там не нужен, просто DWORD.

приборист
14.10.2014, 09:46
А зачем вы хотите удаленно настройки двигателя менять. У вас двигатель меняться будет постоянно? Записывать надо (судя по документации) 1199 - 0-20, в 1239 от 1 до 4300. REAL там не нужен, просто DWORD.

Да, 2 разных двигателя.
Про Real я и не думал. Просто не ясно для чего там Uint32, хватило бы и Int16. Может с запасом сделали.
В общем, попробую на объекте :D
Там всегда быстрее получается :o

MrNobody
16.10.2014, 12:48
Добрый день. а с помощью какого типа переменной можно с экрана ПЛК 73 задать номер телефона, чтобы сразу поместилось 7-10 цифр?

Алексей Дмитриев
16.10.2014, 16:01
Либо стринг, либо UDINT. Сорри - UDINT32 только 9 любых цифирь, а вот UDINT64 можно все!

MrNobody
16.10.2014, 16:05
Либо стринг, либо UDINT.

string с панели не меняется, а udint нет такого формата в submenu смотрю пункт 7.4.2 руководство по программированию

Валенок
16.10.2014, 16:56
string с панели не меняется, а udint нет такого формата
Кнопки обрабатывать можно - делайте свой едитор. Можно и прям на месте string в меню (про мерцание "редакт.запрещено" - к авторам)

romanU
17.10.2014, 10:41
Всем привет!
Вопрос, ПЛК110-30 при отключении питания, в модуле Statistic бит power status постоянно TRUE, пока не сядет аккумулятор, retain переменные не сохраняются. Первый раз с Овеном работаю, это нормально?

capzap
17.10.2014, 12:25
RomanU скажите Вы прошивали свой плк?

romanU
17.10.2014, 12:34
да прошивал,последняя прошивка 2.14.0

capzap
17.10.2014, 12:42
Теперь переустанавливайте по новой теже самые таргеты и после попробуйте загрузить пустой проект с модулем статистики, если поможет,тогда и основной заливайте

romanU
17.10.2014, 12:45
Ок, спасибо capzap, попробую.

schlosser
22.10.2014, 17:42
Всем доброго времени суток. Подскажите что я не так делаю? Подключил плк100 КМ к мв110 8А через RS-485 modbas(мастер),подключил, температуру показывает, всё нормально.Добавляю modbas(slave), чтобы вывести показания на панель, указываю debug RS232,(настройки соответственно как на панели) подключаюсь, при загрузке выскакивает сообщение
14900
Соответственно на панель ничего не выводит, потеря связи. Таргеты менял, все удалял и устанавливал только от плк 100КМ не помогло (мозг уже кипит).Раньше подключал плк150 проблем никаких, а сейчас засада какая то.

Эдуард_Н
22.10.2014, 19:33
Почему debug RS232 ? Для панели вроде надо просто RS232? В ПЛК150 он один, а в 100-ом два, debug RS232 и RS232.

schlosser
22.10.2014, 20:26
Пробывал и просто 232,всё равно выскакивает это сообщение.

amn
22.10.2014, 20:41
На всякий случай проверьте не обращается ли панель к несуществующему регистру и совпадает ли адрес слэйва ПЛК (адрес ПЛК в панели по умолчанию 1). Еще должен быть режим RTU. Если с этим все в порядке, то попробуйте проверить связь с панелью через RS-485, отключив другие модули. Если получится, то проблема может быть в кабеле.

schlosser
22.10.2014, 22:21
С регистрами и адресами всё нормально. Если регистры не совпадают просто связи не будет, но проект загрузится без проблем а здесь при загрузки проекта выскакивает это сообщение. Завтра попробую через 485.
Всё, разобрался. Дело было в кабеле. Всем спасибо.

Lode Runner
23.10.2014, 11:10
У меня вопрос по использованию Modbus.lib: в примерах с диска плк73 я заметил вот такое объявление ФБ:

VAR
get1_modbus: MB_RD_HOLD_REGS; (*функция 03 - чтение параметра типа INT*)
get2_modbus: MB_RD_INP_REGS; (*функция 04 - чтение трех параметров типа INT*)
get3_modbus: MB_RD_HOLD_REGS; (*функция 03 - чтение параметра типа Float*)
Обязательно ли для каждого опрашиваемого регистра создавать свой экземпляр ФБ для каждого регистра каждого устройства или можно ограничиться отдельными экземплярами для каждого типа данных и типа операции над ними и просто подменять адреса регистров и устройств по завершении операции?

Lode Runner
23.10.2014, 11:24
И ещё одно: в тех же примерах при завершении работы ФБ с ошибкой (когда err <> 0) происходит переход к следующему ФБ и сбросу для него флага enabl на один цикл. Это так и задумывалось? Ведь вполне вероятно, что при следующем вызове ошибшегося ФБ этот флаг ему не будет сброшен. Вообще, хотелось бы узнать подробнее о логике работы Modbus.lib, а то в pdf'ке документации только описаны программные интерфейсы ФБ и всё...

capzap
23.10.2014, 11:25
открыть библиотеку не пробовали в КДС?

melky
23.10.2014, 11:48
capzap попробовал ваш пример ntpsetter, но лыжи не едут. Можно его в кратце описать, что есть что ?

capzap
23.10.2014, 12:24
в проге открывается сокет, стучится на адрес в интернете,в ответ получается строка с актуальным временем. А дальше на свой вкус

Lode Runner
23.10.2014, 12:53
открыть библиотеку не пробовали в КДС?

Хм, спасибо. Почему-то был уверен, что она внутренняя. Будем посмотреть...

melky
23.10.2014, 13:59
capzap обязательно в интернете или и в локалке тоже ?
У меня был SOCKET_INVALID -1 и никакой реакции больше, bMsgComplete:=FALSE все время. Кнопку и держал и просто однократно нажимал.
Правда не в главной программе делал, переменную btn сделал входной, а bMsgComplete: выходной и вставлял вызов в основной программе

capzap
23.10.2014, 16:46
capzap обязательно в интернете или и в локалке тоже ?

конечно в инете, в локалке у Вас есть нтп-сервер? теоретически он тоже должен отвечать на команду telnet 132.163.4.103 13, только в проге тогда массив stIPAddress надо изменить на соответствующий айпи

melky
23.10.2014, 17:48
capzap вчера на Mikrotik включил ntp сервер, но с компа не поверял еще.
А почему порт именно 13 ? Адрес я менял на свой.

capzap
23.10.2014, 18:02
так прочтите кто использует в интернете тринадцатый порт и всё станет ясно

Smith2007
23.10.2014, 18:07
Порты до 1000 (https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%BF%D0%BE% D1%80%D1%82%D0%BE%D0%B2_TCP_%D0%B8_UDP) не рекомендуется использовать в собственных прогах. Установить 1001.


<tbody>
13/TCP,UDP
DAYTIME — предназначен для тестирования связи путём получения от сервера текущих даты и времени в текстовом виде

</tbody>

melky
23.10.2014, 20:01
микротик не хочет отвечать по telnet даже компу, сижу пока разбираюсь

capzap
23.10.2014, 20:05
Вам же выложили предназначение 13 порта, не у всех оно есть, попробуйте 123 порт

melky
23.10.2014, 20:13
capzap пробую и 123-й, микрот от компа тоже не отвечает. Указано что протокол udp, порт 123 но чета не отзывается.

capzap
23.10.2014, 20:15
так если у Вас только udp , то телнет не поможет, он только по TCP, надо в проге менять

melky
23.10.2014, 20:21
capzap я так понимаю в netsetter ?

capzap
23.10.2014, 20:23
:) ну это будет уже совсем другая программа, надо сокет udp открыватьт

melky
23.10.2014, 20:26
capzap понял, буду ковырять... а netsetter сейчас не прописывает время в ПЛК, если я правильно понял ? только обращение к ntp серверу и все, дальше ковыряем на предмет изменения ?

capzap
23.10.2014, 20:28
да, я же там писал, что реализация это кто как хочет

rox
21.11.2014, 14:50
Совсем дурацкий вопрос. Какой сдвиг дает элемент "Button"? Byte или два байта?
Например мастер будет обращаться к первым двум 8 битам как к регистру 0. (см. картинку)
По какому регистру он будет обращаться к переменной HMI_HH? и по какому регистру или биту к переменным "reset","setT","setD"?

Yegor
21.11.2014, 14:54
Button в той ветке вообще быть не должно.

rox
21.11.2014, 14:58
Button в той ветке вообще быть не должно.

Тогда как мастером записать в слейв несколько бит? Ведь 8бит, 2 и 4 байта находятся в области выходов. А где область входов?
Или у меня уже совсем голова не варит под конец недели....)

petera
21.11.2014, 15:23
Тогда как мастером записать в слейв несколько бит?
Модуль 8bits, в него хотите пишите, а хотите читайте мастером. Хотите по одному биту из восьми хотите восемь сразу

rox
22.11.2014, 19:26
Все понятно. Спасибо

vasylye
28.11.2014, 13:41
Здравствуйте!
Как правильно записать в файл примерно 300 байт -
- открыть файл
- записать файл
- закрыть файл --- все за один цикл ПЛК,
или нужно какое то время чтобы файл записался?
и закрывать файл нужно по истечению этого времени?

или нужно циклически вызывать функцию записи файла?

capzap
28.11.2014, 14:05
Здравствуйте!
Как правильно записать в файл примерно 300 байт -
- открыть файл
- записать файл
- закрыть файл --- все за один цикл ПЛК,
или нужно какое то время чтобы файл записался?
и закрывать файл нужно по истечению этого времени?

или нужно циклически вызывать функцию записи файла?
а на диске к плк или здесь http://www.owen.ru/forum/showthread.php?t=13588 ни чего не нашли?

vasylye
28.11.2014, 14:18
прямого ответа как бы не нашел.... (((

capzap
28.11.2014, 15:07
прямого ответа как бы не нашел.... (((

ну как же, пример 09_SysLibFile-Write.zip
(*Открываем файл для записи*)
f1:=SysFileOpen(filename, 'w');написано же открытие файла

(*Пишем строку в файл*)
SysFileWrite(f1,ADR(x),LEN(x));написано же запись в файл

ELSE
(*Если запись в файл завершена, закрываем файл и прекращаем архивацию*)
SysFileClose(f1);
t(IN := FALSE, PT:= T#0s);
arc:=FALSE;
END_IF;если таймер закончил свою работу и остальные условия выполняются, закрываем файл тоже подпись имеется

(*Запускаем таймер*)
t(IN := TRUE, PT:= T#60s);где вы видели чтоб цикл плк был 60 секунд

цикл плк потому и циклом назван что повторяется и все что написано в программе будет выполнятся согласно условий

sashakim
28.11.2014, 16:58
Добрый день!
Дорогие специалисты прошу помощи. При загрузки в контроллер Сделанной программы появляется предупреждение:15505 "Неразрешенные ссылки на внешние POU". Что это или где мне искать ответ?
Спасибо.

capzap
28.11.2014, 17:04
Добрый день!
Дорогие специалисты прошу помощи. При загрузки в контроллер Сделанной программы появляется предупреждение:15505 "Неразрешенные ссылки на внешние POU". Что это или где мне искать ответ?
Спасибо.забыли добавить в проект кроме кода еще библиотеку

Sergey666
28.11.2014, 17:52
забыли добавить в проект кроме кода еще библиотеку

НЕТ!!!
ПЛК к которому производится подключение НЕ Поддерживает эти библиотеки .

Эдуард_Н
02.12.2014, 11:51
Клиент просит продать программу, но продать без моих библиотек я не могу, программа не будет работать. Вопрос, как можно сохранить алгоритм, что бы его залить в ПЛК, можно было, а вскрыть нет?

Валенок
02.12.2014, 12:07
запаролить б-ки.
Или нужно скрыть код самой проги ?

Эдуард_Н
02.12.2014, 12:09
Прога пусть открытая, а использовать бибки на лево нет. Если паролить бибки то как?

Эдуард_Н
02.12.2014, 12:13
Я вообще не представляю как всё это можно сделать. К примеру в контаре можно сделать бин файл да и отдать его. А можноли так тут сделать? Бибки очень уж жалко, к конкурентам попадут.

Валенок
02.12.2014, 12:14
Паролить б-ки - обычным порядком. С запретом "использовать бибки на лево" - проблема.
А плк - кокой ?

Эдуард_Н
02.12.2014, 12:15
ПЛК-160 и модем

Валенок
02.12.2014, 12:15
сделать бин файл да и отдать его
Для 1xx - можно.

Эдуард_Н
02.12.2014, 12:17
А как? Подскажите!! И как его потом загрузить в ПЛК?

Валенок
02.12.2014, 12:17
ПЛК-160 и модем
Тогда и сделать бин всего проекта и передать. Я ж не знаю условий договора.

Валенок
02.12.2014, 12:21
А как? Подскажите!! И как его потом загрузить в ПЛК?
Ну.. так ... это ж.... plc_io нужен.
Делайте загрузочный проект, загоняете в плк.

Эдуард_Н
02.12.2014, 12:29
Если я загоню прогу в ПЛК то тем самым сделаю 60% от наладки, а бабки приэтом получат другие.

Валенок
02.12.2014, 12:37
Не исходник - загрузочник. Он уже включит в себя бин-бибки.
Т.е. клиент сможет клонировать без возможности смотреть/править

PS
Групповые пароли на сам проект могут скрыть части проекта.

Эдуард_Н
02.12.2014, 12:39
Так как его получить? Расскажите пожалуста!!

Валенок
02.12.2014, 12:43
его ? ................

Эдуард_Н
02.12.2014, 12:44
загрузочник. Он уже включит в себя бин-бибки.

Валенок
02.12.2014, 12:50
Снимаете галку эмуляции.
Создать загрузочный проект.
Ищем ??.PRG и ??.CHK.
Переименовать ?? в DEFAULT.
Загнать оное в ПЛК (plc_io рулит)

Эдуард_Н
02.12.2014, 12:57
Понял, спасибо. Токмо нужно значит ПЛК под рукой иметь.

petera
02.12.2014, 13:19
Прога пусть открытая, а использовать бибки на лево нет. Если паролить бибки то как?
Использовать библиотеки налево я понимаю, что нужно усложнить жизнь конкурентам, дабы они не смогли использовать эти библиотеки в своих проектах?
Тогда
1. Удалить все коментарии в разделе объявления переменных всех POU билиотеки
2. Изменить названия всех POU в библиотеке на бессмысленные, например ABC1, DB423 и т.д вместо всяких Pid, Regul и других.
3. добавить в библиотеку "левых" POU с пустым оператором и такими же бессмысленными названиями.
4. Перед сохранением "модифицировнных" библиотек для того, чтобы конкуренты не смогли отрыть библиотеки как проект и увидеть их действительное содержание:
-установить пароль на библиотеку
15543
- задать права доступа
15544

Валенок
02.12.2014, 13:24
Понял, спасибо. Токмо нужно значит ПЛК под рукой иметь.
Не нужно...

PS
А что за б-ки то ?

amn
02.12.2014, 13:44
А еще можно конвертировать проект в язык IL например, что еще более сделает код малопонятным.

приборист
02.12.2014, 13:46
А чем вариант с plc_io не подходит?

В любом случае можно программу слить с ПЛК, и залить в точно такую же конфигурацию.
А вот изменить - нереально.

Эдуард_Н
02.12.2014, 14:00
Использовать библиотеки налево я понимаю, что нужно усложнить жизнь конкурентам, дабы они не смогли использовать эти библиотеки в своих проектах?
Тогда
1. Удалить все коментарии в разделе объявления переменных всех POU билиотеки
2. Изменить названия всех POU в библиотеке на бессмысленные, например ABC1, DB423 и т.д вместо всяких Pid, Regul и других.
3. добавить в библиотеку "левых" POU с пустым оператором и такими же бессмысленными названиями.
4. Перед сохранением "модифицировнных" библиотек для того, чтобы конкуренты не смогли отрыть библиотеки как проект и увидеть их действительное содержание:
-установить пароль на библиотеку
15543
- задать права доступа
15544

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

Эдуард_Н
02.12.2014, 14:05
Не нужно...

PS
А что за б-ки то ?

Ну, бибки по управлению котельными, ИТП, для работы с авариями с СМС-ми слежение за всякими там уровнями. Просто с конкурентом учился и работал когдато вместе и нехочу, чтобы он ими воспользовался. У них такая контора....из-за них 2-а котла сдохли на перенатальном центре, а это 4,5 мл.р.

petera
02.12.2014, 14:08
Пароли нужно установить на все уровни доступа. Проверял, если ставиш только на один то при выборе любого другого спокойно открываеться.
Открывается, но если в правах для для остальных установлено "Нет доступа", то ни увидеть содержимое POU, ни экспортировать их нельзя.
Так, что смысла в открытии нет ни какого.

Yegor
02.12.2014, 14:56
Тю... Эти пароли на раз-два подбираются вручную независимо от длины. В проекте пароль на одно и то же место пишется. Чуть-чуть осложнить ручной подбор можно только применяя спецсимволы в пароле, но вы сами потом фиг такую библиотеку откроете)) А если кто-то не поленится подобрать фиксированный ключ, зашитый в кодесис, то от этих паролей совсем никакого толку не будет.

Валенок
02.12.2014, 16:09
))))

А еще можно конвертировать проект в язык IL например, что еще более сделает код малопонятным.
Взломали и ...
А перед конвертацией напихать ненужного кода для облегчения понимания.

Dimooon
03.12.2014, 06:20
подскажите пжс, что означают эти стрелки?

Yegor
03.12.2014, 07:02
Что эти новые/обновлённые юниты готовы заливаться в контроллер.

Dimooon
03.12.2014, 08:14
Все понял. Спасибо.

Kip_i_a
05.12.2014, 05:52
Добрый день!
Как подключить датчик давления к аналоговому входу ПЛК 160?Измерения выводится на ТРМ 10!
Все через Codesys 2.3, какой (элемент,блок,вход или выход) нужно поставить на аналоговый вход для датчика давления?
Извините если вопрос не корректен, я новичок в этом деле))

RV9WFJ
06.12.2014, 09:57
Вы сами то понимаете что вам надо, прочитав вопрос? Как физически подключить? Как в CoDeSys его значения найти? При чем тут ТРМ10.

Эдуард_Н
07.12.2014, 10:16
Подскажите из чего в КДС2 можно сваять ФБ "интервальный таймер с маской недели" с такими же настройками как у OWEN Logic ?

Kacheg1987
07.12.2014, 19:18
Добрый день форумчане. Не ругайте, если этот вопрос был.
До недавнего времени работал только с контроллерами ALLEN BRADLEY (самоучка), и другого языка как LD я не знаю.
Появилась задача развернуть некоторый проект на Овен 160 с дополнительным модулем дискретных выходов МУ110-16Р.
Вот как в codesys 2.3 на языке LD послать команду на включение выхода удаленного модуля, если у него адресация выходов типа REAL, или как в конфигурации ПЛК сделать что бы адреса были в формате BOOL (подключение по протоколу ОВЕН - если это имеет значение)

Николаев Андрей
07.12.2014, 22:00
Вам нужны блоки с EN (блоки с разрешением на выполнение). Там можно и move и другие операторы использовать.

sashakim
09.12.2014, 12:30
А как же так? И где же мне тогда скачать библиотеку? мне нужно для ПЛК110-30

Yegor
09.12.2014, 13:11
Вообще-то у МУ110-16Р есть битовая маска выходов в протоколе модбас. Насчёта протокола «Овен» не скажу.

Kacheg1987
09.12.2014, 15:48
ВсЁ - разобрался, нужно было в элементе EN прописать BOOL_TO_REAL.
Если элемент с EN универсальная штука, дайте пожалуйста список всех его параметров

ООО "БЛС инжинеринг"
09.12.2014, 21:02
Здравствуйте! Я новичок в программировании поэтому море вопросов а ответов нет…
Подскажите где можно приобрести книгу или прочитать о операторах в CODESYS V3.5 SP5 язык программирования LD,
как они работают, ихнии функции, и их предназначение, примеры-схема подключения.
Возможно что я не правильно выразился с операми поэтому я обозначил это под номером 1 и 2, вылаживаю скриншот.
15627

smk1635
09.12.2014, 21:12
Здравствуйте! Я новичок в программировании поэтому море вопросов а ответов нет…
Подскажите где можно приобрести книгу или прочитать о операторах в CODESYS V3.5 SP5 язык программирования LD,
как они работают, ихнии функции, и их предназначение, примеры-схема подключения.
Возможно что я не правильно выразился с операми поэтому я обозначил это под номером 1 и 2, вылаживаю скриншот.
15627

Качайте руководство для КДС 2. Там есть описание операторов.

melky
09.12.2014, 23:37
F1 - Руководство по программированию и Библиотеки

А подскажите, можно ли присобачить CodeSys на Linux ? для Винды вроде есть, а вот для nix систем что-то не нашел....

Yegor
10.12.2014, 14:14
Присобачиватель называется Wine. На кодесисе не пробовал, но другие программы под ним работали. Есть ещё присобачиватель на стероидах — любая виртуальная машина с виндой, тот же VirtualBox. Только виртуальную сеть надо правильно пробросить. Тема тут — http://www.owen.ru/forum/showthread.php?t=367

melky
10.12.2014, 14:29
Yegor я вообще-то имел ввиду Runtime для Linux, чтобы получить так называемый SoftPLC. Непосредственно писать программу я могу и на Винде, Линукс для работы не пользую вообще...

Kacheg1987
10.12.2014, 17:34
Люди, помогите, как выгрузить программу с плк 160

melky
10.12.2014, 18:03
Kacheg1987 для редактирования никак

Ayrat
10.12.2014, 21:38
Добрый вечер. Подскажите пожалуйста как можно организовать перестановку байтов в значении Real, в том порядке который нужен в данном проекте. Если точнее то организовал вывод аналогового сигнала через модбас, он выводится по умолчанию старшим байтом в перед (т.е. 10325476), мне нужен вывод к примеру старшим словом вперед (32107654) или старшим двойным словом вперед (76543210). Типа, что то этого. Хотя, лучше чтоб можно было устанавливать произвольно.

Валенок
10.12.2014, 22:10
type enum_order :
(order_1234, order_2143, order_3412, order_4321);
end_type


function swap : real
var_input
v : real;
order : enum_order;
end_var
var
p : pointer to dword;
end_var

swap := v;
p := ADR(swap);

case order of order_3412, order_4321:
p^ := rol(p^,16);
end_case

case order of order_2143, order_4321:
p^ := ((p^ * 256) and 16#FF00FF00) + ((p^ / 256) and 16#00FF00FF);
end_case

ООО "БЛС инжинеринг"
11.12.2014, 00:29
Здравствуйте! У меня вопрос как можно ввести значение в счётчик CTU на вход с помощью кнопки?
15639
И ещё вопрос Как можно с помощью переключателя изменить "контакт" на "инверсный контакт"
15640

lara197a
11.12.2014, 01:35
1 используйте счетчик CTUD там есть загрузка.
2 используйте ветвление.

Ayrat
11.12.2014, 05:12
Большое спасибо.

Сергей Саратов2
11.12.2014, 12:36
Здравствуйте,пожалуйста помогите с решением небольшой задачи-На подвижной каретке светодиодный датчик ,при движении каретки вперед,датчик должен фиксировать материал -открывается клапан по подаче клея,материал заканчивается-клапан закрывается-и теперь(в этом и есть проблема) каретка должна вернуться без открытия клапана(без концевиков)После чего операция повторяется(если можно в CFC)я только учусь -мне хотелось бы на примере понят логику выполнения задач.Всем заранее спасибо

amn
11.12.2014, 19:01
Выложите свою версию. Тогда найдутся желающие помочь.

amn
11.12.2014, 19:44
Насколько я понял у вас не получается сделать без концевиков. Делаем их программно. У вас есть датчик. Проезжая мимо материала датчик срабатывает. Когда материал заканчивается датчик снова срабатывает. Используем это свойство вместо концевиков. Для этого добавляем переменную "направление движения". Теперь мы уже знаем в какую сторону движется каретка. Сработал датчик и в этот момент двигались вперед - доехали до конца. Сработал датчик и двигались назад - доехали до начала. Датчик изначально включен. То есть, когда подъехали к материалу светодиод перекрывается и сигнал у датчика будет FALSE, пока каретка не проедет до конца. Когда каретка едет вперед и датчик сработал клапан клея должен быть открытым, когда каретка едет назад клапан клея должен быть закрытым. Для этого используем переменную направления движения и состояние датчика. Еще можно добавить небольшую задержку при смене направления движения каретки.

Сергей Саратов2
12.12.2014, 00:09
Получилось-все просто!!

Сергей Саратов2
12.12.2014, 00:10
Спасибо огромное

melky
12.12.2014, 16:50
На какой архитектуре построены ПЛК 304, 308, 323 ?

ООО "БЛС инжинеринг"
12.12.2014, 18:21
Здравствуйте! Очень нужен ваш совет-помощь.
1) Как можно в CODESYS V3.5 SP5 язык программирования LD сохранить вводимое значение чтоб оно сохранялось при выключении питания,
ну и соответственно когда включишь панельку прошлое вводимое значение уже было и не изменённым ну и не сброшенным.
2) И также для вводимого значения с кнопки для таймера
3) И как можно это подключить, желательно визуальный пример.

За ранее благодарен
Прилагаю скриншот
15690

capzap
13.12.2014, 01:27
условие На входе установлены два дискретных датчика: один снаружи комнаты, другой внутри. Когда срабатывает сначала внешний датчик, затем внутренний, это означает, что человек зашел в комнату.Когда срабатывает сначала внутренний датчик, затем внешний, это означает, что человек вышел из комнаты.

Задача1: Если человек вошел – включить свет, Если человек вышел – выключить свет.

Задача2: Необходимо считать количество людей, заходящих и выходящих из комнаты.
многим наверное пришло, я так решил

smk1635
13.12.2014, 03:35
многим наверное пришло, я так решил

У меня немного по другому.

Kacheg1987
13.12.2014, 08:29
Форумчане, как рассчитать, какое максимальное количество модулей (например мв110-16д) можно подключить по протоколу modbus к плк 160

Yegor
13.12.2014, 08:53
минимум(требуемый_период_опроса / время_опроса_модуля, 32 + число_повторителей_на_интерфейсе &#215; 32, 240) &#215; число_свободных_интерфейсов_на_ПЛК

На скорости 38400 время опроса одного 16Д будет 8-16 мс.

petera
13.12.2014, 09:17
многим наверное пришло, я так решил


У меня немного по другому.
smk1635, а если в комнату зашли 3 человека, затем 2 вышли :confused:
Или
Вполне может быть такая ситуация, когда человек подошел к комнате (пересек внешний датчик), а потом передумал входить и вернулся.
Похожий вопрос был ровно год назад http://www.owen.ru/forum/showthread.php?t=10555&p=123161&viewfull=1#post123161
Решение было там же http://www.owen.ru/forum/showthread.php?t=10555&p=123176&viewfull=1#post123176
15701
Немного подправил предлагаемое там решение(добавил включение/выключение света).
15702
Такие задачи люблю делать на SFC, очень наглядно виден алгоритм.
http://www.owen.ru/forum/attachment.php?attachmentid=15700&d=1418450617

ЗЫ. Второй проект с подсчетом посещений

Kacheg1987
13.12.2014, 11:03
минимум(требуемый_период_опроса / время_опроса_модуля, 32 + число_повторителей_на_интерфейсе &#215; 32, 240) &#215; число_свободных_интерфейсов_на_ПЛК

На скорости 38400 время опроса одного 16Д будет 8-16 мс.

Если бы я понял что написано, то я бы возможно и не спрашивал

PS: вроде тема для новичков - разжуйте пожалуйста

smk1635
13.12.2014, 11:17
smk1635, а если в комнату зашли 3 человека, затем 2 вышли :confused:


Значит остававшийся будет сидеть в потёмках. :D
Так после того как первый человек выйдет из комнаты свет погаснет.

capzap
13.12.2014, 11:41
PS: вроде тема для новичков - разжуйте пожалуйста
для новичков чего? Программирования промышленной автоматики или школьника не знающего арифметику

Kacheg1987
13.12.2014, 15:02
для новичков чего? Программирования промышленной автоматики или школьника не знающего арифметику

На AB целый нефтяной завод запрограмировал и обслуживаю, на АВ такой фигни с адресацией нет, как на Овне...............напряг ответить? при любом варианте все просто, просто нужно знать алгоритм вычисления каждого параметра.

Вот почему такая вещь происходит?

Овен ПЛК 160 + МВ160-16ДН (адр5 - модбас)

у МВ160-16ДН адрес первого входа - 80, у последнего - 95 - все работает

По описанию модбас до 247 адресов, задаю МВ160-16ДН адрес 247. должно получиться, что адрес первого входа у МВ160-16ДН -3952, последнего 3967. В итоге связь с модулем есть, а сигнал о подаче питания на вход нет

capzap
13.12.2014, 15:24
На AB целый нефтяной завод запрограмировал и обслуживаю, на АВ такой фигни с адресацией нет, как на Овне...............напряг ответить? при любом варианте все просто, просто нужно знать алгоритм вычисления каждого параметра.

Вот почему такая вещь происходит?

Овен ПЛК 160 + МВ160-16ДН (адр5 - модбас)

у МВ160-16ДН адрес первого входа - 80, у последнего - 95 - все работает

По описанию модбас до 247 адресов, задаю МВ160-16ДН адрес 247. должно получиться, что адрес первого входа у МВ160-16ДН -3952, последнего 3967. В итоге связь с модулем есть, а сигнал о подаче питания на вход нет

ОВЕН не склоняется, какоге икса я должен отвечать упырю, который не проявляет уважение ни кому, кроме своей персоны. Вопрос у Вас был про время, а не про адресацию. Вы не только в математике не сильны, Вы читать документацию даже не можете, адрес прибора никакого отношения не имеет к адресу регистров. Прибор с адресом 247, точно так же будет иметь адрес битовой маски в 51 регистре, как если бы он имел адрес слейва 10
http://www.owen.ru/uploads/re_mv110-16d_dn__1744.pdf стр.49

Kacheg1987
13.12.2014, 15:32
ОВЕН не склоняется, какоге хера я должен отвечать упырю, который не проявляет уважение ни кому, кроме своей персоны. Вопрос у Вас был про время, а не про адресацию. Вы не только в математике не сильны, Вы читать документацию даже не можете, адрес прибора никакого отношения не имеет к адресу регистров. Прибор с адресом 247, точно так же будет иметь адрес битовой маски в 51 регистре, как если бы он имел адрес слейва 10
http://www.owen.ru/uploads/re_mv110-16d_dn__1744.pdf стр.49

Со словами полегче, не хочешь отвечать, не отвечай; я про время не спрашивал, а про максимально возможное количество модулей, в математике посильнее тебя буду, лучше бы рассказал как правильно вычислять адреса. (ну не знаю я как это делается в модбас, всю жизнь работал с АВ)

PS - за ссылку спасибо

ASo
13.12.2014, 15:33
Адреса чего?

Kacheg1987
13.12.2014, 15:46
Входов модулей.

К примеру адрес у МВ160-16ДН - 247

в параметрах контроллера - создаю Universal modbus device (Module slave adrres- 247), далее прописываю Register unput module, в это параметре адрес для первого входа какой будет? (и как вычисляется? хотя бы ссылку)

http://www.owen.ru/uploads/re_mv110-16d_dn__1744.pdf по этой ссылке инфа уже для знающих людей, для меня просто набор непонятных значений...................ведь должен же быть какой то алгоритм и правила адресации)

smk1635
13.12.2014, 16:02
Входов модулей.

К примеру адрес у МВ160-16ДН - 247

в параметрах контроллера - создаю Universal modbus device (Module slave adrres- 247), далее прописываю Register unput module, в это параметре адрес для первого входа какой будет? (и как вычисляется? хотя бы ссылку)

http://www.owen.ru/uploads/re_mv110-16d_dn__1744.pdf по этой ссылке инфа уже для знающих людей, для меня просто набор непонятных значений...................ведь должен же быть какой то алгоритм и правила адресации)

Если хотите что бы контроллер опрашивал модули то надо создать модуль Модбас (мастер). Т.е. указываете что ПЛК является мастером для модулей.

Kacheg1987
13.12.2014, 16:23
Это то я сделал. Если присвоить мв160-16дн адрес 5 - все получается. В этом случае адрес первго входа 80, последного 95 (всего 16 входов).

В описании к устройству написано, что максимальный адрес (я так понимаю - устройства) 247. Каждое устройство занимает 2 байта (16 бит).
ТАк и получается, если у мв160-16дн адрес 5, то 16*5=80 (первый вход); +16 = 95 (последний вход)
Если у мв160-16дн адрес 247, то 247*16=3952 (первый вход); +16 = 3967 (последний) - так не работает

Kacheg1987
13.12.2014, 16:30
Так............. что-то я путаю адреса регистров и приборов.............

smk1635
13.12.2014, 16:34
Это то я сделал. Если присвоить мв160-16дн адрес 5 - все получается. В этом случае адрес первго входа 80, последного 95 (всего 16 входов).

В описании к устройству написано, что максимальный адрес (я так понимаю - устройства) 247. Каждое устройство занимает 2 байта (16 бит).
ТАк и получается, если у мв160-16дн адрес 5, то 16*5=80 (первый вход); +16 = 95 (последний вход)
Если у мв160-16дн адрес 247, то 247*16=3952 (первый вход); +16 = 3967 (последний) - так не работает

Смешались в кучу кони, люди ... :)

Адрес устройства (модуля) Вы задаёте сами. Диапазон от 0 до 247.
А вот адреса регистров жестко прошиты в модуле. Вы их ни как изменить не можете. Какому входу или выходу какой регистр соответствует и написано в руководстве. Ссылку давали выше.

Допустим у Вас 3 модуля дискретных. Адреса модулей Вы решили допустим задать - 2, 5, 34. И надо считать состояние входов. Забирать значение будем маской.
Согласно руководству, если не ошибаюсь, маска входов это регистр 51.
Соответственно опрос ведем:
Первый модуль - адрес устройства -2, регистр - 51.
Второй модуль - адрес устройства -5, регистр - 51.
Третий модуль - адрес устройства -34, регистр - 51.

amn
13.12.2014, 16:34
Kacheg1987, в документе, ссылку на который Вам дал уважаемый на этом форуме capzap посмотрите стр.49. Там есть параметр "Битовая маска" его адрес 51 (в десятичной системе). Нулевой бит соответствует первому входу, первый бит - второму входу и т.д. Вам надо опрашивать регистр номер 51 и уже в программе разбирать по битам значение каждого входа. Это все для протокола Модбас. Или у Вас протокол ОВЕН?

P.S. Уберите, пожалуйста, из своего сообщения нецензурные выражения. На этом форуме это запрещено.

Kacheg1987
13.12.2014, 16:38
к сожалению модбас, с протоколом овен я разобрался, там полегче будет, но в сети еще необходимо установить сп270, он овен не поддерживает

petera
13.12.2014, 16:39
Kacheg1987, на форуме есть раздел с примерами http://www.owen.ru/forum/showthread.php?t=13580
Примеры для МВ110-16Д есть здесь http://kipshop.ru/Primeri/Modules/05._Samples_MX110+PLC.zip
Аналогичные примеры есть на диске, который идет с ПЛК.

Kacheg1987
13.12.2014, 17:08
Всем спасибо, через маску получилось.
А без маски нельзя? когда у мв160-16дн был адрес 5, я без всякой маски входы опрашивал

Yegor
13.12.2014, 17:51
ОВЕН не склоняется <...> уважениеСклоняется всё, что угодно. Уважать надо свой язык, а не флектофобию юристов и рекламщиков. Мне когда реклама по ТВ изредка попадается, у меня уши вянут от довлеющих над всем остальным именительных падежей.
А без маски нельзя?А зачем без маски? С нею канал гораздо меньше загружается. Что вам в ней не нравится?

capzap
13.12.2014, 18:09
Склоняется всё, что угодно.
я не приемлю, когда люди пришедшие на форум за помощью, называют саму фирму овном, намекая на фикалии, а не граматические ньюансы

Yegor
13.12.2014, 18:34
Очень часто так называю в устной речи, только ударение ставлю на первый слог и не думаю о фекалиях. Ну, если до конца честным быть, то я в бродячих мыслях не раз замечал фишку с ударением, конечно. Но чтобы именно так интерпретировать написанное — как-то не доходило до этого. Я не думаю, что Качег1987 пытается поносить компанию, там даже с большой буквы написано.

Kacheg1987
13.12.2014, 19:23
Всем спасибо.........с мв110-16д разобрался, с му110-16р по аналогии тоже работает...........................буксую на аналогах мв110-8А, как прописать параметр входа?

На данный момент у меня в параметрах universal modbus device c адресом 2, далее registr input module (тип данных word), какой ему прописать адрес?, задатчик типа 4-20 мА на первом входе. В настройках модуля тип датчика выбрал......по протоколу овен данные получалось получать

Kacheg1987
13.12.2014, 19:28
На диске в файле с примером для PLC100-R.L_MV110_8AS.pro адрес первого входа 256, почему?????? понять не могу, ставил так же у себя - не работает. в данном примере у нас только разные адреса
риборов

Kacheg1987
13.12.2014, 19:33
На диске в файле с примером для PLC100-R.L_MV110_8AS.pro адрес первого входа 256, почему?????? понять не могу, ставил так же как у себя - не работает. в данном примере у нас только разные адреса
риборов

Валенок
13.12.2014, 19:35
А Вы то хоть РЭ на прибор открывали или всё примеры рыщете ? А там чёткий и ясный ответ.

smk1635
13.12.2014, 19:38
Может регистр ?
Руководство на МВ110-8С. Страница 56. Адресация дана в шестнадцатеричной системе. 0х100 - это 256 в десятичной.

Привыкайте. Руководства Овена славятся свой редкостной зубодробительностью. :D

Эдуард_Н
14.12.2014, 13:13
На диске с ПЛК и на сайте есть библиотеки подписанные как для разных ПЛК, как их различать после установки если пользуешь, к примеру, ПЛК160 и 63 ?

lara197a
14.12.2014, 14:23
Можно изменять имя.

Эдуард_Н
14.12.2014, 15:05
А может это одни и теже библиотеки? Надо у ОВЕНовцев спросить.

petera
14.12.2014, 21:04
На диске с ПЛК и на сайте есть библиотеки подписанные как для разных ПЛК, как их различать после установки если пользуешь, к примеру, ПЛК160 и 63 ?
Для ПЛК63/73 есть специфические библиотеки
Arm7_Specific.lib
Ind_Mode.lib
Owen_FB.lib
Pid_Reg2.lib
Sound.lib
Work_Mode.lib
Остальные библиотеки ОВЕН подходят для всех ПЛК, включая и 63/73.
Это отражено даже в документации на каждую библиотеку

ООО "БЛС инжинеринг"
14.12.2014, 21:33
Ребята у меня до переустановки ВИНДОВСА было больше фикций для кликов (мышкой)
после переустановки ВИНДОВСА есть только две строки, где и в чем я накосячил?
15719

Эдуард_Н
15.12.2014, 04:05
Режим эксперт включить надо.

Эдуард_Н
15.12.2014, 12:13
Интересно, в КДС есть возможность привязать алгоритм к конкретному ПЛК, что бы на другом он не работал ?

capzap
15.12.2014, 12:16
Интересно, в КДС есть возможность привязать алгоритм к конкретному ПЛК, что бы на другом он не работал ?

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

Distemperrr
15.12.2014, 16:09
При нажатии кнопки Необходимо записывать n-е количество переменных на аналоговый выход с интервалом в 100мс. При отжатии этой кнопки проводить инициализацию этих переменных. С чего начать реализацию данного вопроса? И каков принцип? Спасибо.

capzap
15.12.2014, 17:35
При нажатии кнопки Необходимо записывать n-е количество переменных на аналоговый выход с интервалом в 100мс. При отжатии этой кнопки проводить инициализацию этих переменных. С чего начать реализацию данного вопроса? И каков принцип? Спасибо.

с работы таймера ton в режиме in:=not tn.q и овладеть навыком как из двух булевых переменных делать ловца фронтов

Павел Братковский
16.12.2014, 08:21
здравствуйте!!!

подскажите пожалуйста, из учебника Кирила делаю пример, только там плк110 с дискретными вх-вых, а я пытаюсь городить под плк63, скачал таргет, при настройки целевой платформы, выбрал PLC63-L, с дискретными входами все гладко, а как быть с выходами...они вроде как заказные и могут быть как дискретные так и аналоговые, а в настройках только REAL...нужны для начала дискретные BOOL...как это делается подскажите...

petera
16.12.2014, 10:38
здравствуйте!!!

подскажите пожалуйста, из учебника Кирила делаю пример, только там плк110 с дискретными вх-вых, а я пытаюсь городить под плк63, скачал таргет, при настройки целевой платформы, выбрал PLC63-L, с дискретными входами все гладко, а как быть с выходами...они вроде как заказные и могут быть как дискретные так и аналоговые, а в настройках только REAL...нужны для начала дискретные BOOL...как это делается подскажите...
Оператором BOOL_TO_REAL

Эдуард_Н
16.12.2014, 11:51
Ктонибудь может помочь с ФБ графика температуры отопления? Чёто он неработает или я чего непонимаю

приборист
16.12.2014, 14:38
Ктонибудь может помочь с ФБ графика температуры отопления? Чёто он неработает или я чего непонимаю

Вы пытаетесь сделать word_to_real.
Если с ИП задаете значение в real - то преобразование лишнее.
Если с ИП задаете в Word Значит надо сначала делать word_to_int и лишь потом делать int_to_real

Павел Братковский
16.12.2014, 15:12
Оператором BOOL_TO_REAL

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

rylezzzzz
16.12.2014, 15:45
Имеется контроллер и датчик температуры 4-20мА с диапозоном -40 +125 0С

15739

Подключил датчик, все вроде бы нормально, только вот такая проблема, нужно перевести число выдаваемое в формате WORD в реальные градусы, подскажите как программно на языке программирования ST это реализовать.


Есть вот такой вариант перевода
T:=(125-40)*IW0/65535 (этот способ вычитал в интернете, но число получается некорректным)

15740

Реальная температура градуса 23

Прошу помощи:confused:

petera
16.12.2014, 16:15
спасибо за подсказку, т.е. вы имеете ввиду, надо обозначить выход BOOL_TO_REAL, а как полностью прописать и где....или лучше делать как, в примере, такие же таргеты как Кирил советует ставить, со временем будет понятно....
Например так

15741

Ozzz
16.12.2014, 17:36
Здравствуйте. Может кто знает и подскажет какую переменную нужно создать в ПЛК110, которая отображает состояние RUN (программа запущена). Это позволило бы мне дистанционно из MasterSCADA смотреть крутится программа или стоит на паузе.

Павел Братковский
16.12.2014, 17:56
petera человеческое спасибо, это как в ОЛ блок преобразования воткнуть...только в КДС замороченно......

ООО "БЛС инжинеринг"
19.12.2014, 18:01
Режим эксперт включить надо.

Включал и выключал изменений нету 15783

amn
19.12.2014, 18:29
Здравствуйте. Может кто знает и подскажет какую переменную нужно создать в ПЛК110, которая отображает состояние RUN (программа запущена). Это позволило бы мне дистанционно из MasterSCADA смотреть крутится программа или стоит на паузе.

Вообще-то программа должна быть запущена всегда и на паузу ее ставить не надо. Можно не выполнять какие-то блоки по определенным условиям. Если хотите контролировать работу какого-то блока программы, то создайте переменную в этом блоке, можно типа WORD, и постоянно прибавляйте к ней 1. А в скаде смотрите: меняется переменная - блок работает, не меняется - не работает.

Эдуард_Н
19.12.2014, 19:54
Почему когда меняю число, выделенное стрелкой, с 10 на 15 такая ерунда начинаеться ?

приборист
19.12.2014, 20:07
Почему когда меняю число, выделенное стрелкой, с 10 на 15 такая ерунда начинаеться ?
Какая такая?

ООО "БЛС инжинеринг"
19.12.2014, 23:40
Включал и выключал изменений нету 15783

У меня на первом компютере всё работает а на втором не чего не получается, это получилось после переустановки виндовса в чём ещё может быт проблема переключал свойства на стандартный и на профессиональный не получается. когда нажимаешь кнопку профессиональный и потом жмёшь ОК. окно закрывается но потом заходишь опять то выбраное значение не профессиональный а стандартный.
Подскажите у кого глюк у меня или где???
15786

Эдуард_Н
20.12.2014, 04:07
Какая такая?

К примеру: переключение насосов по аварии. на стабилизацию даю 10с на включение аварии ещё 4с и это на один насос, а пролетает за секунду оба. Управление трёхходовыми, 1 импульс длинной в секунду превращаеться в трескатню. Причём в самом алгоритме всё вроде нормально работает. Вернул как было раньше 10 и всё нормализовалось.

ООО "БЛС инжинеринг"
20.12.2014, 13:02
У меня на первом компютере всё работает а на втором не чего не получается, это получилось после переустановки виндовса в чём ещё может быт проблема переключал свойства на стандартный и на профессиональный не получается. когда нажимаешь кнопку профессиональный и потом жмёшь ОК. окно закрывается но потом заходишь опять то выбраное значение не профессиональный а стандартный.
Подскажите у кого глюк у меня или где???
15786

Делал ка тут

https://www.youtube.com/watch?v=mKJt2xj0QvM

приборист
20.12.2014, 13:45
У меня на первом компютере всё работает а на втором не чего не получается, это получилось после переустановки виндовса в чём ещё может быт проблема переключал свойства на стандартный и на профессиональный не получается. когда нажимаешь кнопку профессиональный и потом жмёшь ОК. окно закрывается но потом заходишь опять то выбраное значение не профессиональный а стандартный.
Подскажите у кого глюк у меня или где???
15786

Выбрать профессиональный, нажать ОК, перезагрузить CDS.
И все будет работать.

ООО "БЛС инжинеринг"
20.12.2014, 15:08
Выбрать профессиональный, нажать ОК, перезагрузить CDS.
И все будет работать.

Как не странно делал так все ровно не включается.
думал что может косяк в виндовсе опять переустановил виндовс установил CoDeSys v3.5 SP4 Patch4 потом установил CODESYS Repository Archive V3.5 SP4 (Архив Репозитория)
потом CODESYS V3.5 SP5 ещё установил Таргет файл и установил Автоматические библиотеки Библиотеки OWEN и Библиотеки OSCAT Basic и выбираю режим профессиональный но не появляется в свойствах полное отображение
15817

Эдуард_Н
21.12.2014, 14:27
Подскажите, как мне убрать с виду (спрятать) переходы: UST1-ust_max и UST2-ust_min ?

Yegor
21.12.2014, 15:27
Окно поменьше сделайте.

Эдуард_Н
21.12.2014, 15:55
В смысле ? Какое окно?

Yegor
21.12.2014, 16:24
Давайте сначала вы свой вопрос уточните. Что значит «убрать с виду (спрятать)»? Ну, удалите что ли. Объясните лучше, чего вы хотите этим добиться. Зачем в схеме, которую видит только разработчик, что-то прятать?

Эдуард_Н
21.12.2014, 16:36
Надо это упорядочить, переходы от панели к ретейн-переменным куда нибудь убрать с виду, что бы в общем окне алгоритма их не было. У меня основные блоки в моей библиотеке имеют входа с ретейном, но тут узнал, что при записи в энергонезависимую память записывается не только то значение, которое было на входе, а и всё состояние блока. Вот и озадачился вопросом уменьшить обьём ими занимаемый.

Yegor
21.12.2014, 18:26
Во-первых, вы можете объявить реманентными сами регистры UST1 и UST2. Для этого надо имена задавать не в окне конфигурации, а в глобальных переменных, т.е.
VAR_GLOBAL RETAIN
UST1 AT %QD7.1.0: REAL;
UST2 AT %QD7.2.0: REAL;
END_VARВо-вторых, переменные, к которым вы только обращаетесь в теле блока, но которые объявлены где-то в стороне, не являются частью состояния блока. Следовательно, их удаление, сокрытие и т.п. не приведёт к уменьшению структуры, описывающей состояние.

В-третьих, если памяти всё-таки хватает, то не надо ломать блоки без причины. Если переменная действительно принадлежит блоку, то вынести её из блока без жутких костылей невозможно по определению — вам придётся городить какую-то привязку либо обеспечивать единственность блока в программе.

Тут надо ещё у Приходько уточнить, на какую глубину эта «фишка» с попаданием всего блока в ритэйн работает. Потому что если она вылезает наверх и реманентные входы функционального блока делают реманентными всех пользователей этого блока, то это уже не особенность, а страшный баг. Как никак, динамического выделения памяти в языках IEC 61131-3 нет, и при полностью статической аллокации переменных такой ерунды происходить не должно.

Эдуард_Н
21.12.2014, 19:00
Спасибо, за совет. про эту штуку я вот здесь узнал: http://www.owen.ru/forum/showthread.php?t=20000&page=3&p=156476&posted=1#post156476. Эксперемент проводил в КДС2, действительно уменьшил размер используемого места в ретейне в половину, а переменных то всего было 8 шт.

petera
21.12.2014, 23:22
Во-первых, вы можете объявить реманентными сами регистры UST1 и UST2. Для этого надо имена задавать не в окне конфигурации, а в глобальных переменных, т.е.
VAR_GLOBAL RETAIN
UST1 AT %QD7.1.0: REAL;
UST2 AT %QD7.2.0: REAL;
END_VAR
Это ошибочное утверждение.
15826
Любые переменные в модуле Slave, являются реманентными по умолчанию. Объявлять их еще раз реманентными -это масло маслянное:rolleyes:
Любые переменные, объявленные в конфигурации, в том числе и модуле Slave являются глобальными
ЗЫ
У меня основные блоки в моей библиотеке имеют входа с ретейном, но тут узнал, что при записи в энергонезависимую память записывается не только то значение, которое было на входе, а и всё состояние блока. Вот и озадачился вопросом уменьшить обьём ими занимаемый.
Состояние всего ФБ будет записываться в энергонезависимую память только в том случае, если Вы объявите хотя бы одну переменную внутри этого ФБ. Если ретейн переменные подаются на вход ФБ или внутри его используются глобальные RETAIN переменные, то сам ФБ не будет записываться в энергонезависимую память.

Dimooon
22.12.2014, 07:47
У меня ретайн переменные не сохраняются. Это из-за дохлого аккумулятора? А если не снимать питание с ПЛК вообще никогда, он так долго проживет?