Изменения документа Управление шпинделем по Modbus на примере Toshiba VF-S11 и платы расширения PLCM-B1-G2
Редактировал(а) Edgar Allan Poe 2024/02/29 12:05
Сводка
-
Свойства страницы (1 изменено, 0 добавлено, 0 удалено)
-
Вложения (2 изменено, 1 добавлено, 1 удалено)
Подробности
- Свойства страницы
-
- Содержимое
-
... ... @@ -6,11 +6,48 @@ 6 6 7 7 Пример для Toshiba VF-S11. 8 8 9 -|=(% style="text-align: center; width: 150px;" %)Код функции|=(% style="text-align: center; width: 100px;" %)Значение|=(% style="text-align:center" %)Описание 10 -|(% style="width:150px" %)F800|(% style="width:100px" %)3|Скорость передачи данных: 9600 бит/с 11 -|(% style="width:150px" %)F801|(% style="width:100px" %)1|Проверка на чётность включена 12 -|(% style="width:150px" %)F802|(% style="width:100px" %)1|Номер устройства на шине 13 -|(% style="width:150px" %)F829|(% style="width:100px" %)1|Протокол связи: Modbus RTU 9 +(% class="wrapped" %) 10 +|=((( 11 +Код функции 12 +)))|=((( 13 +Значение 14 +)))|=((( 15 +Описание 16 +))) 17 +|((( 18 +F800 19 +)))|((( 20 +3 21 +)))|((( 22 +Скорость передачи данных: 9600 бит/с 23 +))) 24 +|((( 25 +F801 26 +)))|((( 27 +1 28 +)))|((( 29 +Проверка на чётность включена 30 +))) 31 +|(% colspan="1" %)(% colspan="1" %) 32 +((( 33 +F802 34 +)))|(% colspan="1" %)(% colspan="1" %) 35 +((( 36 +1 37 +)))|(% colspan="1" %)(% colspan="1" %) 38 +((( 39 +Номер устройства на шине 40 +))) 41 +|(% colspan="1" %)(% colspan="1" %) 42 +((( 43 +F829 44 +)))|(% colspan="1" %)(% colspan="1" %) 45 +((( 46 +1 47 +)))|(% colspan="1" %)(% colspan="1" %) 48 +((( 49 +Протокол связи: Modbus RTU 50 +))) 14 14 15 15 (% style="margin-left: 30.0px;" %) 16 16 2. Подключить ЧП к плате расширения PLCM-B1-G2 по интерфейсу RS-485. ... ... @@ -23,17 +23,58 @@ 23 23 24 24 Создайте нового Modbus-мастера. Номер COM-порта - PLCM. Остальные настройки должны быть в точности такими же, как в ЧП (на скриншоте пример стандартной настройки COM-порта Toshiba VF-S11). 25 25 26 -[[image:master_plcm.png||data-xwiki-image-style-alignment="center" height="300" width="366"]] 63 +(% style="text-align:center" %) 64 +[[image:attach:master_plcm.png||height="300" width="366"]] 27 27 28 28 Для управления ЧП и считывания статусов с ЧП необходимо добавить регистры. Например, для Toshiba VF-S11 необходимо настроить регистры с именами **SpindleMode**, **SpindleRPM** и **SpindleStatus**. 29 29 30 30 Рекомендуем использовать именно эти названия, так как в дальнейшем к регистрам будет обращение из фоновых операций по их именам. 31 31 32 -(% class="non-break" %) 33 -|=(% style="text-align:center" %)Название|=(% style="text-align:center" %)Мастер|=(% style="text-align:center" %)Адрес на шине|=(% style="text-align:center" %)Номер регистра|=(% style="text-align:center" %)Тип регистра 34 -|SpindleMode|PLCM|1|64000|Output 35 -|SpindleRPM|PLCM|1|64001|Output 36 -|SpindleStatus|PLCM|1|64769|Input 70 +(% class="wrapped" %) 71 +|=((( 72 +Название 73 +)))|=((( 74 +Мастер 75 +)))|=((( 76 +Адрес на шине 77 +)))|=((( 78 +Номер регистра 79 +)))|=((( 80 +Тип регистра 81 +))) 82 +|((( 83 +SpindleMode 84 +)))|((( 85 +PLCM 86 +)))|((( 87 +1 88 +)))|((( 89 +64000 90 +)))|((( 91 +Output 92 +))) 93 +|((( 94 +SpindleRPM 95 +)))|((( 96 +PLCM 97 +)))|((( 98 +1 99 +)))|((( 100 +64001 101 +)))|((( 102 +Output 103 +))) 104 +|((( 105 +SpindleStatus 106 +)))|((( 107 +PLCM 108 +)))|((( 109 +1 110 +)))|((( 111 +64769 112 +)))|((( 113 +Input 114 +))) 37 37 38 38 {{success}} 39 39 Номера регистров необходимо задавать в виде десятеричных значений. ... ... @@ -48,9 +48,9 @@ 48 48 49 49 Основная задача фонового макроса - отслеживать текущее состояние и обороты шпинделя и отправлять значения в частотный преобразователь по Modbus. 50 50 51 -Пример [[фонового макроса>>doc:Руководствопользователя.Описание фоновых операций.Создание фоновой операции.WebHome]]**modbus_spindle.bm** для управления шпинделем по ModBus для ЧП Toshiba VF-S11 размещен во вложении. Данный файл нужно добавить в список фоновых операций.129 +Пример фонового макроса **modbus_spindle.bm** для управления шпинделем по ModBus для ЧП Toshiba VF-S11 размещен во вложении. Данный файл нужно добавить в список фоновых операций. 52 52 53 - **[[Скачать фоновую операцию>>attach:modbus_spindle.zip]]**131 +[[attach:modbus_spindle.bm]] 54 54 55 55 {{warning}} 56 56 Обращение к регистрам Modbus из макросов осуществляется по имени Modbus-регистра с учетом регистра! Например, **SpindleRPM** и **SpindleRpm** - это разные регистры. ... ... @@ -59,7 +59,7 @@ 59 59 (% style="margin-left: 30.0px;" %) 60 60 6. Включить фоновую операцию. Убедиться, что операция стартовала и работает нормально. Об этом будет свидетельствовать зеленый индикатор справа от названия операции. 61 61 62 -(% style=" margin-left: 30.0px;" %)63 -[[image:2021-11-29 14_18_03-Управление макросами.png|| data-xwiki-image-style-alignment="center"height="500" width="680"]]140 +(% style="text-align:center" %) 141 +[[image:attach:2021-11-29 14_18_03-Управление макросами.png||height="500" width="680"]] 64 64 65 65 Если все настроено правильно, то шпиндель теперь должен включаться и выключаться. При изменении оборотов шпинделя в PUMOTIX они, соответственно, должны изменяться и на ЧП.
- 2021-11-29 14_18_03-Управление макросами.png
-
- Author
-
... ... @@ -1,1 +1,1 @@ 1 -XWiki. Knetyaga1 +XWiki.XWikiGuest - Размер
-
... ... @@ -1,1 +1,1 @@ 1 -28. 0KB1 +28.5 KB - Содержимое
- master_plcm.png
-
- Author
-
... ... @@ -1,1 +1,1 @@ 1 -XWiki. Knetyaga1 +XWiki.XWikiGuest - Размер
-
... ... @@ -1,1 +1,1 @@ 1 -9. 9KB1 +9.4 KB - Содержимое
- 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