===== Пример настройки шпинделя на Modbus RS485 на контроллере ET15 ===== описание регистров для записи-чтения Modbus находится тут - {{http://docs.pv-automation.com/plc/plc_modbus_api}} В примере описывается подключение инвертора **Yaskawa v7**. === Проверить, что отсутствует настройка расширителей IO портов на Modbus. При наличии удалить === **Setup->Inputs/Outputs/Sensors->I/O Expand cards mapping** {{examples:modbus-expand-io.png}} === 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 {{:plc:modbus-plc-002-spindle.png}} === Для Hardware PLC добавить файл с процедурами общения по Modbus === 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 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 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) в этот регистр 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 в регистр регистр 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 };