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

От версии 2.1
отредактировано abolgov
на 2020/01/27 16:36
Изменить комментарий: К данной версии нет комментариев
К версии 13.1
отредактировано writer
на 2023/01/27 12:01
Изменить комментарий: К данной версии нет комментариев

Сводка

Подробности

Свойства страницы
Родительский документ
... ... @@ -1,0 +1,1 @@
1 +Руководство пользователя.Modbus.WebHome
Автор документа
... ... @@ -1,1 +1,1 @@
1 -XWiki.abolgov
1 +XWiki.Knetyaga
Содержимое
... ... @@ -1,158 +1,65 @@
1 -Для управления шпинделем по Modbus через плату расширения PLCM-B1-G2 Вам понадобится частотный преобразователь (далее ЧП) с поддержкой управления по Modbus RTU, например Toshiba VF-S11.
1 +Для управления шпинделем по Modbus через плату расширения PLCM-B1-G2 Вам понадобится частотный преобразователь (далее ЧП) с поддержкой управления по Modbus RTU, например Toshiba VF-S11.
2 2  
3 3  Порядок настройки управления шпинделем по Modbus следующий:
4 4  
5 -1. Настроить ЧП на режим управления по протоколу Modbus RTU (RS-485) и запомнить настройки COM-порта в ЧП (количество бит в секунду, биты данных, четность и стоповые биты).
5 +1. Настроить ЧП на режим управления по протоколу Modbus RTU (RS-485) и запомнить настройки COM-порта в ЧП (количество бит в секунду, биты данных, четность и стоповые биты).
6 6  
7 7  Пример для Toshiba VF-S11.
8 8  
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 -)))
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
51 51  
52 52  (% style="margin-left: 30.0px;" %)
53 -2. Подключить ЧП к плате расширения PLCM-B1-G2 по интерфейсу RS-485.
16 +2. Подключить ЧП к плате расширения PLCM-B1-G2 по интерфейсу RS-485.
54 54  
55 55  (% style="margin-left: 30.0px;" %)
56 -3. Приобрести опцию "[[Работа по протоколу MODBUS>>url:http://pumotix.ru/#soft||shape="rect"]]" или активировать пробный период для данной опции в меню "Конфигурация → Менеджер лицензий → Общие опции".
19 +3. Приобрести опцию "[[Работа по протоколу MODBUS>>url:http://pumotix.ru/#soft||shape="rect"]]" или активировать пробный период для данной опции в меню "Конфигурация""Менеджер лицензий""Общие опции".
57 57  
58 58  (% style="margin-left: 30.0px;" %)
59 -4. Включить и настроить Modbus в меню "Конфигурация → Настройка Modbus".
22 +4. Включить и настроить Modbus в меню "Конфигурация" → "Настройка Modbus".
60 60  
61 61  Создайте нового Modbus-мастера. Номер COM-порта - PLCM. Остальные настройки должны быть в точности такими же, как в ЧП (на скриншоте пример стандартной настройки COM-порта Toshiba VF-S11).
62 62  
63 -[[image:attach:master_plcm.png]]
26 +(% style="text-align: center;" %)
27 +[[image:attach:master_plcm.png||data-xwiki-image-style-alignment="center" height="300" width="366"]]
64 64  
65 -Для управления ЧП и считывания статусов с ЧП необходимо добавить регистры. Например, для Toshiba VF-S11 необходимо настроить регистры с именами **SpindleMode**, **SpindleRPM** и **SpindleStatus**.
29 +Для управления ЧП и считывания статусов с ЧП необходимо добавить регистры. Например, для Toshiba VF-S11 необходимо настроить регистры с именами **SpindleMode**, **SpindleRPM** и **SpindleStatus**.
66 66  
67 67  Рекомендуем использовать именно эти названия, так как в дальнейшем к регистрам будет обращение из фоновых операций по их именам.
68 68  
69 -|=(((
70 -Название
71 -)))|=(((
72 -Мастер
73 -)))|=(((
74 -Адрес на шине
75 -)))|=(((
76 -Номер регистра
77 -)))|=(((
78 -Тип регистра
79 -)))
80 -|(((
81 -SpindleMode
82 -)))|(((
83 -PLCM
84 -)))|(((
85 -1
86 -)))|(((
87 -64000
88 -)))|(((
89 -Output
90 -)))
91 -|(((
92 -SpindleRPM
93 -)))|(((
94 -PLCM
95 -)))|(((
96 -1
97 -)))|(((
98 -64001
99 -)))|(((
100 -Output
101 -)))
102 -|(((
103 -SpindleStatus
104 -)))|(((
105 -PLCM
106 -)))|(((
107 -1
108 -)))|(((
109 -64769
110 -)))|(((
111 -Input
112 -)))
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
113 113  
114 -\\
115 -
116 -{{tip}}
38 +{{success}}
117 117  Номера регистров необходимо задавать в виде десятеричных значений.
118 -{{/tip}}
40 +{{/success}}
119 119  
120 -(% class="auto-cursor-target" %)
121 -\\
122 -
123 -{{note}}
42 +{{warning}}
124 124  В инструкции на частотный преобразователь данные значения могут быть указаны в HEX (шестнадцатеричном виде), например, 0x1001, 0x1002.
125 -{{/note}}
44 +{{/warning}}
126 126  
127 127  (% style="margin-left: 30.0px;" %)
128 -5. Создать новую фоновую операцию (макрос) в папке %userprofile%\local settings\application data\purelogic\pumotix\server\macros\background
47 +5. Создать новую фоновую операцию (макрос) через [[окно управления макросами>>doc:Руководство пользователя.Описание M-кодов.Управление макросами и фоновыми операциями.WebHome]].
129 129  
130 -Данный путь можно скопировать в буфер обмена и вставить в адресную строку проводника Windows.
131 -
132 -Еще один способ попасть в рабочий каталог PUMOTIX: "меню Пуск → Программы → PUMOTIX → Working directory → server → macros → background"
133 -
134 -{{tip}}
135 -Если папки background не существует, то нужно создать ее в папке macros.
136 -{{/tip}}
137 -
138 138  Основная задача фонового макроса - отслеживать текущее состояние и обороты шпинделя и отправлять значения в частотный преобразователь по Modbus.
139 139  
140 -Пример фонового макроса **modbus_spindle.bm** для управления шпинделем по ModBus для ЧП Toshiba VF-S11 размещен во вложении. Данный файл нужно сохранить в каталог background.
51 +Пример фонового макроса **modbus_spindle.bm** для управления шпинделем по ModBus для ЧП Toshiba VF-S11 размещен во вложении. Данный файл нужно добавить в список фоновых операций.
141 141  
142 142  [[attach:modbus_spindle.bm]]
143 143  
144 -{{note}}
55 +{{warning}}
145 145  Обращение к регистрам Modbus из макросов осуществляется по имени Modbus-регистра с учетом регистра! Например, **SpindleRPM** и **SpindleRpm** - это разные регистры.
146 -{{/note}}
57 +{{/warning}}
147 147  
148 148  (% style="margin-left: 30.0px;" %)
149 -6. Включить фоновую операцию в меню "Конфигурация → Фоновые операции". Убедиться, что операция стартовала и работает нормально. Об этом будет свидетельствовать зеленый индикатор справа от названия операции.
60 +6. Включить фоновую операцию. Убедиться, что операция стартовала и работает нормально. Об этом будет свидетельствовать зеленый индикатор справа от названия операции.
150 150  
151 -[[image:attach:image2019-11-5_17-8-45.png]]
62 +(% style="text-align: center;" %)
63 +[[image:attach:2021-11-29 14_18_03-Управление макросами.png||data-xwiki-image-style-alignment="center" height="500" width="680"]]
152 152  
153 153  Если все настроено правильно, то шпиндель теперь должен включаться и выключаться. При изменении оборотов шпинделя в PUMOTIX они, соответственно, должны изменяться и на ЧП.
154 -
155 -(% class="auto-cursor-target" %)
156 -\\
157 -
158 -\\
2021-11-29 14_18_03-Управление макросами.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.XWikiGuest
Размер
... ... @@ -1,0 +1,1 @@
1 +28.5 KB
Содержимое
Macros_Manager_wndw.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.Knetyaga
Размер
... ... @@ -1,0 +1,1 @@
1 +26.0 KB
Содержимое
master_plcm.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.XWikiGuest
Размер
... ... @@ -1,0 +1,1 @@
1 +9.4 KB
Содержимое
modbus_master_en.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.Knetyaga
Размер
... ... @@ -1,0 +1,1 @@
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