Table of Contents
Пример настройки шпинделя на Modbus RS485 на контроллере ET15
описание регистров для записи-чтения Modbus находится тут - plc_modbus_api
В примере описывается подключение инвертора Yaskawa v7.
Проверить, что отсутствует настройка расширителей IO портов на Modbus. При наличии удалить
Important
Important! If the Modbus device is controlled directly from the PLC procedure, "RS485/Modbus communication" checkbox should be UNCHECKED in Settings > Config > Technology > Mill/Lathe > Spindle configuration dialog
Для Hardware PLC добавить файл с процедурами общения по Modbus
- func-modbus.h
send_init_modbus() { gvarset(60011,0);//set RTU gvarset(60012,9600);//set baud gvarset(60010,0x1e);//to Modbus Device # 0x1f }; send_m3_modbus() { gvarset(60019,0x31);//set Register Value gvarset(60030,0x1);//send value to Address timer=200; do{timer--;}while(timer>0); gvarset(60019,0x31);//set Register Value gvarset(60030,0x1);//send value to Address }; send_speed_modbus() { gvarset(60019,val);//set Register Value //SPEED gvarset(60030,0x02);//send value to Address }; send_m5_modbus() { gvarset(60019,0);//set Register Value gvarset(60030,0x02);//send value to Address gvarset(60019,0x0);//set Register Value //OFF gvarset(60030,0x1);//send value to Address };
Инициализация порта Modbus
Инициализация порта Modbus должна выполняться один раз при запуске системы. Ее можно добавить в Software PLC системную процедуру ….HANDLER_INIT.plc
Адрес инвертора на шине Modbus установлен в значение 30 (0x1e) Скорость RS485 - 9600
- __HANDLER_INIT.plc
send_init_modbus() //Определение процедуры { gvarset(60011,0);//set RTU gvarset(60012,9600);//set baud gvarset(60010,0x1e);//to Modbus Device # 0x1e }; main() { send_init_modbus() //Вызов инициализации exit(99); };
Регулировка скорости шпинделя
Регулировка скорости шпинделя может осуществляться из Software PLC “….SPN.plc” или из Hardware PLC “SPN.plc” При наличии в системе обоих файлов процедур, приоритет имеет Software PLC “….SPN.plc”
Регистр скорости в инверторе имеет адрес “0x02”
Пример Software PLC
- __SPN.plc
send_speed_modbus() { gvarset(60019,val); //set Register Value //SPEED gvarset(60030,0x02); //send value to Address }; //set Spindle speed control via MODBUS main() { val=eparam*10; gvarset(7371,eparam); timer=2;do{timer--;}while(timer>0); //Spindle State send_speed_modbus(); exit(99); //normal exit };
В зависимости от настроек инвертора по единицам задания скорости шпинделя, коэффициент “10” при задании переменной val необходимо изменить соответствующим образом.
При желании использовать Hardware PLC, текст процедуры “SPN.plc” будет полностью идентичным “__SPN.plc”
Включение шпинделя
Управляющий регистр инвертора имеет адрес “0x01”
Для включения шпинделя надо выставить “бит 0” (записать значение 1) в этот регистр
- M03.plc
send_m3_modbus() { gvarset(60019,0x1); //set Register Value (1) gvarset(60030,0x1); //send value to Address (1) timer=200; do{timer--;}while(timer>0); //repeat the command for any case gvarset(60019,0x1); //set Register Value (1) gvarset(60030,0x1); //send value to Address (1) }; main() { val=eparam*10; timer=0; proc=plc_proc_spindle; gvarset(7371,eparam); timer=30;do{timer--;}while (timer>0); //Spindle Speed Mirror register send_speed_modbus(); send_m3_modbus(); gvarset(7370,1); timer=30;do{timer--;}while (timer>0); //Spindle State //delay after spindle started timer=spindle_on_delay; do{timer--;}while (timer>0); //delay for Spindle reach given speed exit(99); //normal exit };
Выключение шпинделя
Управляющий регистр инвертора имеет адрес “0x01”
Для выключения шпинделя надо записать 0 в регистр регистр
- M05.plc
send_m5_modbus() { //set speed 0 gvarset(60019,0); //set Register Value (0) gvarset(60030,0x02); //send value to Address //The speed register(2) //off spindle gvarset(60019,0x0); //set Register Value //OFF (0) gvarset(60030,0x1); //send value to Address //The control register (1) }; main() { send_m5_modbus(); proc=plc_proc_idle; if (spindle_off_delay!=0) { timer=spindle_off_delay; do { timer--; } while (timer>0); }; gvarset(7370,0); timer=30;do{timer--;}while(timer>0); //Spindle State exit(99); //normal exit };