Изменения документа Управление шпинделем по Modbus на примере Toshiba VF-S11 и платы расширения PLCM-B1-G2
Редактировал(а) Edgar Allan Poe 2024/02/29 12:05
Сводка
-
Свойства страницы (1 изменено, 0 добавлено, 0 удалено)
-
Вложения (0 изменено, 0 добавлено, 1 удалено)
Подробности
- Свойства страницы
-
- Содержимое
-
... ... @@ -30,6 +30,7 @@ 30 30 31 31 Рекомендуем использовать именно эти названия, так как в дальнейшем к регистрам будет обращение из фоновых операций по их именам. 32 32 33 +(% class="non-break" %) 33 33 |=(% style="text-align:center" %)Название|=(% style="text-align:center" %)Мастер|=(% style="text-align:center" %)Адрес на шине|=(% style="text-align:center" %)Номер регистра|=(% style="text-align:center" %)Тип регистра 34 34 |SpindleMode|PLCM|1|64000|Output 35 35 |SpindleRPM|PLCM|1|64001|Output ... ... @@ -48,9 +48,9 @@ 48 48 49 49 Основная задача фонового макроса - отслеживать текущее состояние и обороты шпинделя и отправлять значения в частотный преобразователь по Modbus. 50 50 51 -Пример фонового макроса **modbus_spindle.bm** для управления шпинделем по ModBus для ЧП Toshiba VF-S11 размещен во вложении. Данный файл нужно добавить в список фоновых операций. 52 +Пример [[фонового макроса>>doc:Руководство пользователя.Описание фоновых операций.Создание фоновой операции.WebHome]] **modbus_spindle.bm** для управления шпинделем по ModBus для ЧП Toshiba VF-S11 размещен во вложении. Данный файл нужно добавить в список фоновых операций. 52 52 53 -[[attach:modbus_spindle.bm]] 54 +**[[Скачать фоновую операцию>>attach:modbus_spindle.bm]]** 54 54 55 55 {{warning}} 56 56 Обращение к регистрам Modbus из макросов осуществляется по имени Modbus-регистра с учетом регистра! Например, **SpindleRPM** и **SpindleRpm** - это разные регистры.
- modbus_spindle.bm
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.XWikiGuest - Размер
-
... ... @@ -1,1 +1,0 @@ 1 -1.3 KB - Содержимое
-
... ... @@ -1,52 +1,0 @@ 1 -function handle() 2 - local desired_rpm = GetCurSpindleRPM() 3 - if (not IsRealDeviceConnected()) then 4 - desired_rpm = 0 5 - end 6 - 7 - local value, is_online = ReadModbusRegisterUpdated("SpindleStatus") 8 - Sleep(30) 9 - local mode_updated = is_online and check_mode(value, desired_rpm) 10 - 11 - if (prev_rpm == nil or prev_rpm ~= desired_rpm or not mode_updated) then 12 - if (send_spindle_control_command(desired_rpm)) then 13 - prev_rpm = desired_rpm 14 - end 15 - end 16 -end 17 - 18 -function send_spindle_control_command(rpm) 19 - local mode = get_mode(rpm) 20 - 21 - local Hz = math.floor(math.abs(rpm) / 60 * 100 + 0.5) 22 - 23 - local success_1 = WriteModbusRegister("SpindleMode", mode) 24 - Sleep(30) 25 - local success_2 = WriteModbusRegister("SpindleRPM", Hz) 26 - return success_1 and success_2 27 -end 28 - 29 -function get_mode(rpm) 30 - local mode = 49152 -- Stop 31 - if (rpm > 0) then 32 - mode = 50176 -- Forward 33 - elseif (rpm < 0) then 34 - mode = 50688 -- Reverse 35 - end 36 - 37 - return mode 38 -end 39 - 40 -function check_mode(status, rpm) 41 - if (rpm > 0) then 42 - return is_bit_assigned(status, 10) and not is_bit_assigned(status, 9) -- Forward 43 - elseif (rpm < 0) then 44 - return is_bit_assigned(status, 10) and is_bit_assigned(status, 9) -- Reverse 45 - else 46 - return not is_bit_assigned(status, 10) -- Stop 47 - end 48 -end 49 - 50 -function is_bit_assigned(value, index) 51 - return value & (1 << index) ~= 0 52 -end