===== Пример настройки шпинделя на 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
};