Mach4’te spindle start/stop ve frekans kontrolünü Modbus ile sağlamak için, öncelikle sürücünüzün (VFD) Modbus adreslerini ve komut register’larını öğrenmelisiniz. Ardından Mach4’ün Modbus plugin’ini yapılandırarak VFD’yi tanımlar, M kodları (M3, M4, M5) ve S komutu ile Lua script’leri kullanarak ilgili Modbus register’larına yazma fonksiyonları (örn. mc.mcCntlModbusWriteHolding) vasıtasıyla kontrol komutları gönderirsiniz. Bu yöntem, hassas ve güvenilir spindle yönetimi sunar.
Mach4’te Modbus Register Okuma Yazma ile Spindle Start Stop ve Frekans Kontrolü Nasıl Yapılır? Nedir?
Endüstriyel otomasyon sistemlerinde, özellikle CNC makinelerinde, iş milinin (spindle) hassas kontrolü üretim kalitesi ve verimliliği açısından kritik öneme sahiptir. Mach4, gelişmiş bir CNC kontrol yazılımı olarak, çeşitli harici cihazlarla haberleşme yeteneği sunar. Bu cihazlardan biri de genellikle bir Değişken Frekans Sürücüsü (VFD) aracılığıyla kontrol edilen spindle motorudur. Mach4’ün Modbus protokolünü desteklemesi sayesinde, kullanıcılar VFD’ler ile doğrudan haberleşerek spindle’ın başlatılması, durdurulması ve hızının (frekansının) ayarlanması gibi temel işlevleri gerçekleştirebilirler. Bu teknik makale, Mach4 üzerinde Modbus register okuma ve yazma işlemlerini kullanarak spindle kontrolünün nasıl entegre edileceğini adım adım açıklamaktadır. Temel amaç, bir VFD’nin Modbus arayüzü üzerinden Mach4 tarafından tam olarak yönetilmesini sağlamaktır. Bu yaklaşım, analog sinyal tabanlı kontrol sistemlerine kıyasla daha kararlı, gürültüden daha az etkilenen ve daha detaylı geri bildirim (örn. VFD alarm durumları, gerçek frekans) sağlayan bir çözüm sunar. Özellikle uzun kablo mesafelerinde veya elektriksel gürültünün yoğun olduğu ortamlarda Modbus tabanlı dijital haberleşme, analog sinyallere göre çok daha üstün bir performans sergiler.
Çalışma Prensibi ve Teknik Veriler
Mach4’te Modbus üzerinden spindle kontrolü, temel olarak Mach4’ün Modbus Master olarak görev yapması ve VFD’nin Modbus Slave olarak komutları dinlemesi prensibine dayanır. Modbus, endüstriyel otomasyonda yaygın olarak kullanılan bir seri haberleşme protokolüdür. İki ana versiyonu bulunur: Modbus RTU (seri port üzerinden, genellikle RS485) ve Modbus TCP/IP (Ethernet üzerinden). Spindle kontrolü için genellikle Modbus RTU tercih edilir, çünkü çoğu VFD standart olarak RS485 arayüzü sunar.

Mach4 Modbus Entegrasyonunun Temelleri
1. Modbus Protokolü ve VFD: Her VFD’nin kendine özgü bir Modbus haritası (register listesi) bulunur. Bu harita, hangi register adresinin hangi işlevi (örn. start/stop, frekans komutu, hata kodu) kontrol ettiğini veya gösterdiğini belirtir. Genellikle, spindle’ı başlatma/durdurma bir “kontrol kelimesi”ndeki belirli bir bitin ayarlanmasıyla yapılırken, frekans ayarı ayrı bir “frekans komut registerı”na sayısal bir değer yazılarak gerçekleştirilir. Bu değer genellikle VFD’nin maksimum frekansına göre ölçeklenir (örn. 0-10000 değeri 0-50Hz’i temsil edebilir).
2. Mach4 Modbus Plugin Kurulumu ve Yapılandırması: Mach4’ün Modbus haberleşmesi yapabilmesi için öncelikle ilgili Modbus plugin’inin (örn. Modbus RTU/TCP plugin) kurulu ve etkinleştirilmiş olması gerekir. Bu plugin, Mach4’ün ana menüsünden “Configure” -> “Plugins” yoluyla yönetilir. Etkinleştirildikten sonra, plugin’in yapılandırma ekranına gidilerek VFD ile haberleşme parametreleri ayarlanır:
- Modbus Tipi: RTU veya TCP/IP seçimi.
- Seri Port Ayarları (RTU için): Bağlı olduğu COM portu, Baud Rate (örn. 9600, 19200), Data Bits (örn. 8), Stop Bits (örn. 1), Parity (örn. None, Even, Odd). Bu ayarlar VFD’nin kendi Modbus parametreleriyle birebir eşleşmelidir.
- TCP/IP Ayarları (TCP için): VFD’nin IP adresi ve port numarası.
- Cihaz Tanımı: Her bir VFD için bir “Slave ID” (köle kimliği) tanımlanır. Bu ID, VFD’nin fiziksel olarak ayarlanmış Modbus ID’si ile eşleşmelidir.
- Timeout ve Gecikme: Haberleşme zaman aşımları ve komutlar arası gecikmeler ayarlanabilir.
3. Spindle Kontrol Register Adresleri: Her VFD markası ve modeli için bu adresler farklılık gösterir. Ancak genel bir çerçevede şunlar beklenir:
- Spindle Start/Stop/Yön (Control Word): Genellikle bir Holding Register (örn. adres 40001 veya 0x0000) içindeki belirli bitler aracılığıyla kontrol edilir. Örneğin, 0. bit “Run/Stop”, 1. bit “Forward/Reverse” olabilir.
- Bit 0 = 1: Run
- Bit 0 = 0: Stop
- Bit 1 = 0: Forward
- Bit 1 = 1: Reverse
Bu, tek bir register’a yazılan farklı değerlerle spindle’ın hem başlangıç/duruşunu hem de dönüş yönünü kontrol etmeyi sağlar.
- Frekans Komut Registerı (Frequency Command Word): Bu da genellikle bir Holding Register (örn. adres 40002 veya 0x0001) olup, VFD’nin nominal frekans aralığına göre ölçeklendirilmiş bir değer alır. Örneğin, 0-50Hz aralığı için 0-10000 arası bir tamsayı değeri yazılabilir. Skalalama faktörü VFD kılavuzunda belirtilir.
- Geri Bildirim Registerları (Feedback Registers): VFD’ler genellikle mevcut spindle frekansı, akımı, voltajı veya hata kodları gibi bilgileri okuma amaçlı Input Registers veya Holding Registers aracılığıyla sunar. Bu bilgiler, Mach4 üzerinde spindle durumunu izlemek için okunabilir.
4. Mach4 Lua Scripting ile Kontrol: Mach4, güçlü Lua script desteği sayesinde Modbus komutlarını kolayca entegre etmenizi sağlar. Spindle kontrolü için genellikle M kodları (M3, M4, M5) ve S komutu (spindle hızı) ile ilişkilendirilen özel script’ler yazılır. Mach4 API’si, Modbus okuma ve yazma fonksiyonları sunar:
mc.mcCntlModbusWriteHolding(modbusID, slaveID, address, value): Tek bir Holding Register’a değer yazar.mc.mcCntlModbusWriteMultipleHoldings(modbusID, slaveID, startAddress, valuesTable): Birden fazla Holding Register’a değer yazar.mc.mcCntlModbusReadHolding(modbusID, slaveID, address): Tek bir Holding Register’dan değer okur.mc.mcCntlModbusReadInput(modbusID, slaveID, address): Tek bir Input Register’dan değer okur.
Örnek Lua Script Yapısı:
-- Spindle Start (M3) Script Örneği (İleri Yön)
function OnActivate(state)
local modbusID = 0 -- Mach4 Modbus plugin'inde tanımlanan ID
local slaveID = 1 -- VFD'nin Modbus Slave ID'si
local controlReg = 0x0000 -- VFD kontrol register adresi (örnek)
local freqReg = 0x0001 -- VFD frekans komut register adresi (örnek)
local maxFreq = 50 -- VFD'nin maksimum frekansı (Hz)
local maxScale = 10000 -- Frekans komutu için maksimum ölçek değeri
if state == 1 then -- M3 komutu aktif olduğunda
local currentSpeed = mc.mcSpindleGetCommandedRPM(mc.mcCntlGetMdl())
local targetFreq = (currentSpeed / mc.mcSpindleGetMaxRPM(mc.mcCntlGetMdl())) * maxFreq
if targetFreq < 0.1 then targetFreq = 0.1 end -- Minimum frekans
local scaledFreq = math.floor((targetFreq / maxFreq) * maxScale)
-- Spindle'ı ileri yönde başlatma komutu (kontrol kelimesi bit 0 = 1, bit 1 = 0)
mc.mcCntlModbusWriteHolding(modbusID, slaveID, controlReg, 1) -- Örnek değer
mc.mcCntlModbusWriteHolding(modbusID, slaveID, freqReg, scaledFreq)
mc.mcCntlSetSpindleState(mc.mcCntlGetMdl(), MC_SPINDLE_FORWARD)
mc.mcCntlSetSpindleActive(mc.mcCntlGetMdl(), 1)
else -- M3 pasif olduğunda (genellikle M5 ile durdurulur)
-- mc.mcCntlModbusWriteHolding(modbusID, slaveID, controlReg, 0) -- Durdurma komutu (M5'te daha uygun)
end
return 1
end
-- Spindle Stop (M5) Script Örneği
function OnActivate(state)
local modbusID = 0
local slaveID = 1
local controlReg = 0x0000 -- VFD kontrol register adresi (örnek)
local freqReg = 0x0001 -- VFD frekans komut register adresi (örnek)
if state == 1 then -- M5 komutu aktif olduğunda
mc.mcCntlModbusWriteHolding(modbusID, slaveID, controlReg, 0) -- Durdurma komutu
mc.mcCntlModbusWriteHolding(modbusID, slaveID, freqReg, 0) -- Frekansı sıfırla
mc.mcCntlSetSpindleActive(mc.mcCntlGetMdl(), 0)
mc.mcCntlSetSpindleState(mc.mcCntlGetMdl(), MC_SPINDLE_STOP)
end
return 1
end
-- S Komutu (Spindle Hız Ayarı) Script Örneği
function OnActivate(state)
local modbusID = 0
local slaveID = 1
local freqReg = 0x0001 -- VFD frekans komut register adresi (örnek)
local maxFreq = 50 -- VFD'nin maksimum frekansı (Hz)
local maxScale = 10000 -- Frekans komutu için maksimum ölçek değeri
if state == 1 then
local currentSpeed = mc.mcSpindleGetCommandedRPM(mc.mcCntlGetMdl())
local targetFreq = (currentSpeed / mc.mcSpindleGetMaxRPM(mc.mcCntlGetMdl())) * maxFreq
if targetFreq < 0.1 then targetFreq = 0.1 end -- Minimum frekans
local scaledFreq = math.floor((targetFreq / maxFreq) * maxScale)
mc.mcCntlModbusWriteHolding(modbusID, slaveID, freqReg, scaledFreq)
end
return 1
end
| Parametre | Değer/Açıklama |
|---|---|
| Modbus Haberleşme Tipi | Modbus RTU (RS485) veya Modbus TCP/IP (Ethernet) |
| VFD Modbus Slave ID | 1-247 arası benzersiz kimlik (genellikle 1) |
| Modbus Function Code (Yazma) | 0x06 (Write Single Holding Register), 0x10 (Write Multiple Holding Registers) |
| Modbus Function Code (Okuma) | 0x03 (Read Holding Registers), 0x04 (Read Input Registers) |
| Spindle Start/Stop Register Adresi | Örnek: 40001 (Decimal) veya 0x0000 (Hex) – VFD kılavuzuna göre değişir. |
| Spindle Frekans Komut Register Adresi | Örnek: 40002 (Decimal) veya 0x0001 (Hex) – VFD kılavuzuna göre değişir. |
| Frekans Komut Skalalama | VFD’nin maksimum frekansına göre (örn. 0-50Hz için 0-10000 arası tamsayı) |
| Baud Rate (RTU için) | 9600, 19200, 38400, 57600, 115200 (VFD ile eşleşmeli) |

Sahada Dikkat Edilmesi Gerekenler
- VFD Parametreleri ve Modbus Ayarları:
Her VFD’nin Modbus haberleşmesi için özel parametreleri vardır. Bu parametreler mutlaka doğru bir şekilde ayarlanmalıdır. Bunlar arasında Modbus Slave ID, Baud Rate, Data Format (8N1, 8E1, vb.) ve VFD’nin kontrol modunun “Modbus Kontrol” veya “Harici Haberleşme Kontrolü” olarak ayarlanması yer alır. VFD’nin kendi kontrol panelinden veya yazılımından bu ayarların yapıldığından emin olunmalıdır. Yanlış ayarlar, haberleşme kesintilerine veya komutların algılanmamasına neden olur.
- Kablolama ve Gürültü Yönetimi:
RS485 haberleşmesi için twisted pair (bükümlü çift) kablo kullanılması zorunludur. Kablo blendajlı (shielded) olmalı ve blendaj sadece tek bir uçtan (genellikle Mach4 tarafında) topraklanmalıdır. Uzun kablo mesafelerinde sonlandırma dirençleri (termination resistors) (genellikle 120 Ohm) her iki uçta da takılmalıdır. Elektriksel gürültüye karşı koruma, kararlı bir Modbus haberleşmesi için hayati öneme sahiptir. Güç kablolarından ve yüksek frekanslı sinyal kablolarından RS485 kablosunu uzak tutmak önemlidir.
- Mach4 Modbus Plugin Uyumluluğu ve Sürümü:
Kullanılan Mach4 sürümü ile Modbus plugin’inin uyumlu olduğundan emin olun. Bazen eski plugin sürümleri yeni Mach4 versiyonlarında düzgün çalışmayabilir veya tam tersi durumlar yaşanabilir. Mach4 forumlarını ve dokümantasyonunu kontrol ederek en güncel ve kararlı plugin sürümünü kullanın. Plugin ayarlarında doğru COM portu, Baud Rate ve Slave ID tanımlandığından emin olun.
- Lua Script Debugging ve Hata Yönetimi:
Lua script’leri yazarken hatalar kaçınılmazdır. Mach4’ün Diagnostic (Tanılama) ekranındaki konsol ve log kayıtları, script hatalarını ayıklamak için değerli bilgiler sunar. Modbus komutlarını göndermeden önce register adreslerini ve beklenen değerleri VFD kılavuzundan dikkatlice doğrulayın. Script’lere basit hata kontrol mekanizmaları eklemek (örn. Modbus yazma işleminin başarılı olup olmadığını kontrol etmek) sistemin güvenilirliğini artırır.
- Güvenlik Önlemleri ve Acil Durum Durdurma (E-Stop):
Spindle kontrolü doğrudan makine güvenliğini etkiler. Modbus kontrolü aktif olsa bile, fiziksel acil durdurma (E-Stop) butonlarının ve limit switch’lerin bağımsız olarak çalışır durumda olduğundan ve Mach4’ün güvenlik zincirine entegre edildiğinden emin olun. Modbus üzerinden bir hata durumunda spindle’ı durdurmak için ek güvenlik protokolleri (örn. VFD’nin dahili güvenlik durdurma girişi) düşünülmelidir.
- Frekans Komut Skalalaması ve Kalibrasyon:
VFD’ye gönderilen frekans komut değeri, VFD’nin beklediği format ve skalalama ile tam olarak eşleşmelidir. Örneğin, 0-50Hz aralığı için VFD 0-10000 arası bir değer bekliyorsa, Mach4’ten gönderilen RPM değerinin bu aralığa doğru şekilde dönüştürüldüğünden emin olun. Hatalı skalalama, spindle’ın istenen hızda dönmemesine veya beklenmedik davranışlar sergilemesine neden olabilir. İlk kurulumda bir takometre ile spindle hızının doğruluğunu kontrol etmek faydalıdır.

Sık Karşılaşılan Sorunlar ve Çözümleri
Modbus ile Mach4 üzerinde spindle kontrolü yaparken karşılaşılan bazı yaygın sorunlar ve çözüm önerileri aşağıdadır:
- Haberleşme Yok / VFD Yanıt Vermiyor:
- Sorun: Mach4 Modbus plugin’i VFD ile bağlantı kuramıyor veya VFD komutlara yanıt vermiyor.
- Çözüm:
- Kablolama Kontrolü: RS485 kablolamasının (A-A, B-B) doğru yapıldığından emin olun. Shield (blendaj) tek taraflı topraklanmalı. Sonlandırma dirençleri (120 Ohm) kullanılıp kullanılmadığını kontrol edin.
- VFD Modbus Parametreleri: VFD’nin Modbus Slave ID’si, Baud Rate, Data Bits, Stop Bits ve Parity ayarlarının Mach4 plugin’indeki ayarlar ile birebir aynı olduğundan emin olun. Ayrıca, VFD’nin kontrol modunun “Modbus Kontrol” olarak ayarlandığından emin olun.
- Mach4 Plugin Ayarları: Doğru COM portunun seçildiğini (aygıt yöneticisinden kontrol edin), Modbus ID’sinin VFD’ninkiyle eşleştiğini ve plugin’in etkin olduğunu doğrulayın.
- Bus Yükü: Aynı RS485 bus üzerinde çok fazla cihaz varsa veya haberleşme çok yoğunsa, gecikmeler veya hatalar yaşanabilir.
- Spindle Başlamıyor veya Durmuyor:
- Sorun: M3/M4/M5 komutları spindle’ı etkilemiyor.
- Çözüm:
- Register Adresi ve Değerleri: VFD kılavuzundan spindle start/stop ve yön kontrol register adresini ve bu işlevler için beklenen değerleri (genellikle bir kontrol kelimesindeki bitler) kesinlikle doğrulayın. Lua script’inizdeki adres ve değerlerin doğru olduğundan emin olun.
- VFD Durumu: VFD’nin kendisinde bir hata (alarm) olup olmadığını kontrol edin. Aşırı akım, aşırı voltaj, motor hatası gibi durumlar spindle’ın çalışmasını engeller.
- Mach4 Spindle Durumu: Mach4’ün Diagnostic ekranında spindle’ın “Active” veya “Running” olarak görünüp görünmediğini kontrol edin.
- Spindle Hızı Ayarlanamıyor / Yanlış Hızda Çalışıyor:
- Sorun: S komutu spindle hızını değiştirmiyor veya yanlış bir hızda çalışıyor.
- Çözüm:
- Frekans Komut Registerı: VFD kılavuzundan frekans komut register adresini doğrulayın.
- Skalalama (Scaling): Mach4’ten gönderilen RPM değerinin VFD’nin beklediği frekans komut değerine doğru şekilde ölçeklendiğinden emin olun. Örneğin, 0-60Hz için 0-30000 değeri bekleyen bir VFD için, RPM’i Hz’e çevirip sonra bu skalaya uygun bir tamsayıya dönüştürmelisiniz.
- VFD Frekans Limitleri: VFD’nin minimum ve maksimum çıkış frekansı ayarlarını kontrol edin. Mach4’ten gönderilen komut bu limitler içinde olmalıdır.
- Spindle Kalibrasyonu: Mach4’ün spindle kalibrasyon ayarlarının (örn. Max RPM) doğru olduğundan emin olun.
- Gecikmeli Tepki veya Komut Kaybı:
- Sorun: Spindle komutlarına yavaş veya düzensiz yanıt veriyor.
- Çözüm:
- Modbus Timeout: Mach4 Modbus plugin’indeki timeout ayarlarını kontrol edin. Çok düşük bir timeout, haberleşme hatalarına yol açabilir. Çok yüksek bir timeout ise gecikmeleri artırır.
- Lua Script Optimizasyonu: Script’lerde gereksiz döngülerden veya zaman alıcı işlemlerden kaçının. Modbus komutları arasına küçük gecikmeler (örn.
mc.mcCntlSleep(10)) eklemek, bazı VFD’ler için faydalı olabilir. - Bus Yükü: RS485 bus üzerinde aynı anda çok sayıda sorgu veya yazma işlemi yapılıyorsa, bu durum gecikmelere neden olabilir.
Uzman Tavsiyesi
Mach4 üzerinden Modbus protokolü ile spindle kontrolü, modern CNC makineleri için hem esnek hem de son derece güvenilir bir çözümdür. Analog sinyal bazlı kontrol yöntemlerine kıyasla, Modbus dijital haberleşme, elektriksel gürültüye karşı daha dirençli olup, daha detaylı hata teşhisi ve durum izleme imkanları sunar. Bu entegrasyon, spindle’ın sadece başlatılıp durdurulmasını ve hızının ayarlanmasını sağlamakla kalmaz, aynı zamanda VFD’den sıcaklık, akım, voltaj ve hata kodları gibi kritik verilerin okunarak Mach4 arayüzünde görüntülenmesine veya otomasyon mantığına dahil edilmesine olanak tanır. Başarılı bir kurulum için VFD’nin Modbus haritasının eksiksiz anlaşılması ve Mach4 Modbus plugin’inin doğru yapılandırılması hayati öneme sahiptir. Özellikle Lua script’leri yazarken, her bir Modbus register’ının işlevini ve beklenen veri formatını VFD kılavuzundan doğrulamak, olası sorunları baştan engeller. Saha tecrübesi, Modbus kablolamasının kalitesinin ve doğru topraklamanın, haberleşme stabilitesi açısından ne kadar kritik olduğunu göstermektedir; zayıf kablolama veya topraklama, rastgele haberleşme kesintilerine ve hatalara yol açabilir. Bu tip sistemlerde, güvenlik her zaman en öncelikli konu olmalıdır. Modbus kontrolü ne kadar gelişmiş olursa olsun, fiziksel acil durdurma mekanizmalarının ve limit switch’lerin bağımsız ve sağlam bir şekilde çalıştığından emin olunmalıdır. Karmaşık sistemlerde, deneyimli bir otomasyon mühendisinden destek almak, kurulum süresini kısaltabilir ve potansiyel riskleri minimize edebilir. Unutmayın ki, iyi planlanmış ve titizlikle uygulanan bir Modbus entegrasyonu, CNC makinenizin spindle performansını ve genel güvenilirliğini önemli ölçüde artıracaktır.

