PDA

Просмотр полной версии : ПР200-ЧП Altivar 930 Работа по ModBus



n_zelenev
11.11.2023, 20:20
Здравствуйте я новичок в ОВЕН, хотел задать вопрос :
Как из среды Owen Logic отправить на частотный преобразователь Schneider Electric Altivar900 командное слово на пуск (RUN) частотника?
CND адрес регистра этого слова 8501 оно состоит из 16 Bit тип WORD
ОВЕН Пр200 является мастером сети Modbus
Адрес регистра в частотнике 8501 бит включения bit3 (RUN пуск частотника)
бит вsключения bit2 (Stop)
Каждый из 0 по 15-й bit в частотнике настроены на определенную операцию

Я создаю сетевую переменную с адресом 8501, но не могу понять как включать биты в этом регистре

МихаилГл
11.11.2023, 20:26
Мне тут уже подсказывали, в лоджике есть putbit

https://owen.ru/forum/showthread.php?t=37179

kondor3000
11.11.2023, 21:07
Вот пример упаковки и распаковки бит в маску, с 0 по 3, дальше до 15 бит дорисуйте сами и упакуйте в макрос 71528

А ещё упаковать биты можно на ST, создав функцию и аналогично распаковать, создав ФБ.

function B16_Mask: udint; //имя функции и тип данных выхода
var_input //объявление входных переменных
b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14, b15 : bool; //входная переменная с типом данных bool
end_var

B16_Mask.0 := b0;B16_Mask.1 := b1;B16_Mask.2 := b2;B16_Mask.3 := b3;B16_Mask.4 := b4;B16_Mask.5 := b5;B16_Mask.6 := b6;B16_Mask.7 := b7;
B16_Mask.8 := b8;B16_Mask.9 := b9;B16_Mask.10 := b10;B16_Mask.11 := b11;B16_Mask.12 := b12;B16_Mask.13 := b13;B16_Mask.14 := b14;B16_Mask.15 := b15;
end_function

МихаилГл
12.11.2023, 06:59
function B16_Mask: udint; //имя функции и тип данных выхода
var_input //объявление входных переменных
b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14, b15 : bool; //входная переменная с типом данных bool
end_var

B16_Mask.0 := b0;B16_Mask.1 := b1;B16_Mask.2 := b2;B16_Mask.3 := b3;B16_Mask.4 := b4;B16_Mask.5 := b5;B16_Mask.6 := b6;B16_Mask.7 := b7;
B16_Mask.8 := b8;B16_Mask.9 := b9;B16_Mask.10 := b10;B16_Mask.11 := b11;B16_Mask.12 := b12;B16_Mask.13 := b13;B16_Mask.14 := b14;B16_Mask.15 := b15;
end_function


В связи с тем, что я узнал про существование putbit, я бы сделал так (пишу из головы типа в кодесисе, думаю что в лоджике то же так реализуется) :



function B16_Mask: udint; //имя функции и тип данных выхода
var_input //объявление входных переменных
b : array [0..15] of bool; //входная переменная с типом данных bool
end_var
var
i: int;
end_var

For i:=0 to 15 do
Putbit(b16_mask, i, b[i])
End_for

end_function


Может где ошибся, поправьте тогда... Пишу с телефона.

kondor3000
12.11.2023, 11:02
В связи с тем, что я узнал про существование putbit, я бы сделал так (пишу из головы типа в кодесисе, думаю что в лоджике то же так реализуется) :
Может где ошибся, поправьте тогда... Пишу с телефона.

Лоджику очень далеко до Codesys, множество ограничений и отличий, ST только в разработке.
Функций Putbit и Extract нет на ST на Лоджике (стандартные функции не работают в ST), их сначала написать надо.
И зачем их писать, если есть упаковка, распаковка через точку. Даже таймеры и триггеры надо писать заново, для использования в ФБ.

В Лоджике входы ФБ и функций не могут быть массивом, так что придётся присваивать из булей, в итоге писать больше, чем через точку.

И тем не менее, даже в таком виде, появление ST в Лоджике это прорыв, все расчёты и ещё много чего, реализовать можно)

МихаилГл
12.11.2023, 14:15
Печально...

FPavel
15.05.2026, 20:23
Дополню тему.

В документе ATV600_Modbus_manual_EN_EAV64325_01.pdf на странице 24 есть расшифровка слова управления CMD (регистр 8501) из которого понятно, что команда ПУСК=15, а ОСТАНОВ=0.
Т.е. проблема в неправильных кодах команд, отправляемых в ПЧВ.

sanness
26.05.2026, 21:07
Дополню тему.

В документе ATV600_Modbus_manual_EN_EAV64325_01.pdf на странице 24 есть расшифровка слова управления CMD (регистр 8501) из которого понятно, что команда ПУСК=15, а ОСТАНОВ=0.
Т.е. проблема в неправильных кодах команд, отправляемых в ПЧВ.

Не совсем так.
Пуск 15
Останов 6.
Через 0 не работает.
Есть опыт. Проверено в реальных условиях.

FPavel
26.05.2026, 21:27
Не совсем так.
Пуск 15
Останов 6.
Через 0 не работает.
Есть опыт. Проверено в реальных условиях.
Спасибо за совет.

В моём случае довелось работать с ПЧВ, который уже кем-то как-то когда-то настраивался, а от меня требовалось лишь перевести управление с клемм на Modbus.
Существующая настройка была излишне агрессивной - слово управления было сильно изменено (Altivar ATV600 позволяет полностью изменить назначение любого бита в слове управления) - не работал сброс.
Сильно не вдавался во все детали настройки, и легко допускаю, что и другие биты получили другие функции. Именно в данном случае выключение было кодом 0. Возможно, если бы сбросил до заводских и настроил только параметры мотора и управление от Modbus - для выключения бы применял неискажённое число 6.

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