Редактировал(а) Edgar Allan Poe 2024/02/29 12:05

От версии 16.1
отредактировано writer
на 2023/06/06 15:21
Изменить комментарий: Удаление файла modbus_spindle.bm
К версии 6.4
отредактировано writer
на 2022/06/17 13:56
Изменить комментарий: Update document after refactoring.

Сводка

Подробности

Свойства страницы
Содержимое
... ... @@ -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,44 +23,87 @@
23 23  
24 24  Создайте нового Modbus-мастера. Номер COM-порта - PLCM. Остальные настройки должны быть в точности такими же, как в ЧП (на скриншоте пример стандартной настройки COM-порта Toshiba VF-S11).
25 25  
26 -(% style="text-align: center;" %)
27 -[[image:attach:master_plcm.png||data-xwiki-image-style-alignment="center" height="300" width="366"]]
63 +[[image:attach:master_plcm.png]]
28 28  
29 29  Для управления ЧП и считывания статусов с ЧП необходимо добавить регистры. Например, для Toshiba VF-S11 необходимо настроить регистры с именами **SpindleMode**, **SpindleRPM** и **SpindleStatus**.
30 30  
31 31  Рекомендуем использовать именно эти названия, так как в дальнейшем к регистрам будет обращение из фоновых операций по их именам.
32 32  
33 -(% class="non-break" %)
34 -|=(% style="text-align:center" %)Название|=(% style="text-align:center" %)Мастер|=(% style="text-align:center" %)Адрес на шине|=(% style="text-align:center" %)Номер регистра|=(% style="text-align:center" %)Тип регистра
35 -|SpindleMode|PLCM|1|64000|Output
36 -|SpindleRPM|PLCM|1|64001|Output
37 -|SpindleStatus|PLCM|1|64769|Input
69 +(% class="wrapped" %)
70 +|=(((
71 +Название
72 +)))|=(((
73 +Мастер
74 +)))|=(((
75 +Адрес на шине
76 +)))|=(((
77 +Номер регистра
78 +)))|=(((
79 +Тип регистра
80 +)))
81 +|(((
82 +SpindleMode
83 +)))|(((
84 +PLCM
85 +)))|(((
86 +1
87 +)))|(((
88 +64000
89 +)))|(((
90 +Output
91 +)))
92 +|(((
93 +SpindleRPM
94 +)))|(((
95 +PLCM
96 +)))|(((
97 +1
98 +)))|(((
99 +64001
100 +)))|(((
101 +Output
102 +)))
103 +|(((
104 +SpindleStatus
105 +)))|(((
106 +PLCM
107 +)))|(((
108 +1
109 +)))|(((
110 +64769
111 +)))|(((
112 +Input
113 +)))
38 38  
39 -{{success}}
115 +\\
116 +
117 +{{tip}}
40 40  Номера регистров необходимо задавать в виде десятеричных значений.
41 -{{/success}}
119 +{{/tip}}
42 42  
43 -{{warning}}
121 +(% class="auto-cursor-target" %)
122 +\\
123 +
124 +{{note}}
44 44  В инструкции на частотный преобразователь данные значения могут быть указаны в HEX (шестнадцатеричном виде), например, 0x1001, 0x1002.
45 -{{/warning}}
126 +{{/note}}
46 46  
47 47  (% style="margin-left: 30.0px;" %)
48 -5. Создать новую фоновую операцию (макрос) через [[окно управления макросами>>doc:Руководство пользователя.Описание M-кодов.Управление макросами и фоновыми операциями.WebHome]].
129 +5. Создать новую фоновую операцию (макрос) через [[окно управления макросами>>doc:PUMPUBLIC.Руководство пользователя.Описание M-кодов.Управление макросами и фоновыми операциями.WebHome]].
49 49  
50 50  Основная задача фонового макроса - отслеживать текущее состояние и обороты шпинделя и отправлять значения в частотный преобразователь по Modbus.
51 51  
52 -Пример [[фонового макроса>>doc:Руководство пользователя.Описание фоновых операций.Создание фоновой операции.WebHome]] **modbus_spindle.bm** для управления шпинделем по ModBus для ЧП Toshiba VF-S11 размещен во вложении. Данный файл нужно добавить в список фоновых операций.
133 +Пример фонового макроса **modbus_spindle.bm** для управления шпинделем по ModBus для ЧП Toshiba VF-S11 размещен во вложении. Данный файл нужно добавить в список фоновых операций.
53 53  
54 -**[[Скачать фоновую операцию>>attach:modbus_spindle.bm]]**
135 +[[attach:modbus_spindle.bm]]
55 55  
56 -{{warning}}
137 +{{note}}
57 57  Обращение к регистрам Modbus из макросов осуществляется по имени Modbus-регистра с учетом регистра! Например, **SpindleRPM** и **SpindleRpm** - это разные регистры.
58 -{{/warning}}
139 +{{/note}}
59 59  
60 60  (% style="margin-left: 30.0px;" %)
61 61  6. Включить фоновую операцию. Убедиться, что операция стартовала и работает нормально. Об этом будет свидетельствовать зеленый индикатор справа от названия операции.
62 62  
63 -(% style="text-align: center;" %)
64 -[[image:attach:2021-11-29 14_18_03-Управление макросами.png||data-xwiki-image-style-alignment="center" height="500" width="680"]]
144 +[[image:attach:2021-11-29 14_18_03-Управление макросами.png]]
65 65  
66 66  Если все настроено правильно, то шпиндель теперь должен включаться и выключаться. При изменении оборотов шпинделя в PUMOTIX они, соответственно, должны изменяться и на ЧП.
Macros_Manager_wndw.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.Knetyaga
Размер
... ... @@ -1,1 +1,0 @@
1 -26.0 KB
Содержимое
modbus_master_en.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.Knetyaga
Размер
... ... @@ -1,1 +1,0 @@
1 -9.1 KB
Содержимое
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