Изменения документа Управление шпинделем по Modbus на примере Toshiba VF-S11 и платы расширения PLCM-B1-G2
Редактировал(а) Edgar Allan Poe 2024/02/29 12:05
Сводка
-
Свойства страницы (1 изменено, 0 добавлено, 0 удалено)
-
Вложения (0 изменено, 1 добавлено, 1 удалено)
Подробности
- Свойства страницы
-
- Содержимое
-
... ... @@ -24,7 +24,7 @@ 24 24 Создайте нового Modbus-мастера. Номер COM-порта - PLCM. Остальные настройки должны быть в точности такими же, как в ЧП (на скриншоте пример стандартной настройки COM-порта Toshiba VF-S11). 25 25 26 26 (% style="text-align: center;" %) 27 -[[image: /xwiki/bin/download/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE%20%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F/Modbus/%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%88%D0%BF%D0%B8%D0%BD%D0%B4%D0%B5%D0%BB%D0%B5%D0%BC%20%D0%BF%D0%BE%20Modbus%20%D0%BD%D0%B0%20%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D0%B5%20Toshiba%20VF-S11%20%D0%B8%20%D0%BF%D0%BB%D0%B0%D1%82%D1%8B%20%D1%80%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D1%8F%20PLCM-B1-G2/WebHome/master_plcm.png?width=366&height=300&rev=1.2||alt="master_plcm.png"data-xwiki-image-style-alignment="center" height="300" width="366"]]27 +[[image:attach:master_plcm.png||data-xwiki-image-style-alignment="center" height="300" width="366"]] 28 28 29 29 Для управления ЧП и считывания статусов с ЧП необходимо добавить регистры. Например, для Toshiba VF-S11 необходимо настроить регистры с именами **SpindleMode**, **SpindleRPM** и **SpindleStatus**. 30 30 ... ... @@ -51,7 +51,7 @@ 51 51 52 52 Пример [[фонового макроса>>doc:Руководство пользователя.Описание фоновых операций.Создание фоновой операции.WebHome]] **modbus_spindle.bm** для управления шпинделем по ModBus для ЧП Toshiba VF-S11 размещен во вложении. Данный файл нужно добавить в список фоновых операций. 53 53 54 -**[[Скачать фоновую операцию>>attach:modbus_spindle. zip]]**54 +**[[Скачать фоновую операцию>>attach:modbus_spindle.bm]]** 55 55 56 56 {{warning}} 57 57 Обращение к регистрам Modbus из макросов осуществляется по имени Modbus-регистра с учетом регистра! Например, **SpindleRPM** и **SpindleRpm** - это разные регистры. ... ... @@ -61,6 +61,6 @@ 61 61 6. Включить фоновую операцию. Убедиться, что операция стартовала и работает нормально. Об этом будет свидетельствовать зеленый индикатор справа от названия операции. 62 62 63 63 (% style="text-align: center;" %) 64 -[[image: /xwiki/bin/download/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE%20%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F/Modbus/%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%88%D0%BF%D0%B8%D0%BD%D0%B4%D0%B5%D0%BB%D0%B5%D0%BC%20%D0%BF%D0%BE%20Modbus%20%D0%BD%D0%B0%20%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D0%B5%20Toshiba%20VF-S11%20%D0%B8%20%D0%BF%D0%BB%D0%B0%D1%82%D1%8B%20%D1%80%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D1%8F%20PLCM-B1-G2/WebHome/2021-11-29%2014_18_03-%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BC%D0%B0%D0%BA%D1%80%D0%BE%D1%81%D0%B0%D0%BC%D0%B8.png?width=680&height=500&rev=2.2||alt="2021-11-29 14_18_03-Управление макросами.png"data-xwiki-image-style-alignment="center" height="500" width="680"]]64 +[[image:attach:2021-11-29 14_18_03-Управление макросами.png||data-xwiki-image-style-alignment="center" height="500" width="680"]] 65 65 66 66 Если все настроено правильно, то шпиндель теперь должен включаться и выключаться. При изменении оборотов шпинделя в PUMOTIX они, соответственно, должны изменяться и на ЧП.
- modbus_spindle.zip
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.Knetyaga - Размер
-
... ... @@ -1,1 +1,0 @@ 1 -672 bytes - Содержимое
- modbus_spindle.bm
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.XWikiGuest - Размер
-
... ... @@ -1,0 +1,1 @@ 1 +1.3 KB - Содержимое
-
... ... @@ -1,0 +1,52 @@ 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