12 Temmuz 2020 Pazar

Python & MATLAB Engine & Simulink Üçlüsüyle Dans Etmek, Part 2




MATLAB R2014a sürümünden sonra Python'da çalışan MATLAB api'si kullanılabiliyor. 

Konu şu; bir Simulink modeli Python'da nasıl kontrol edilir ?

Öncelikle MATLAB Engine denen kütüphaneyi edinmemiz gerekiyor, burada tarifi var




İhtiyacımız olan kütüphaneler bunlar, kısaltmalar değişebilir. Matplotlib kütüphanesini Scope ve diğer verileri görselleştirmede kullanacağım.

Aslında matlab.engine'nin mantığı şöyle; MATLAB komut satırını alıp Python'a taşıyor, yani pek bir numarası yok ama yine de hayat kurtarabilir kimileri için.

Kritik noktalardan birisi şu, Simulink & MATLAB Workspace'indeki değişkenleri 2-D array olarak kaydetmemiz gerekiyor. Timeseries tarzı değişkenleri okuyamıyoruz. Scope sinyallerini kaydetmek için de Scope'un yanına bir 'To Workspace' bloku ekleyip 2-D array formatı seçiyoruz.


Sample time da değiştirilerek farklı periyotla sinyaller kaydedilebilir. Bu ayar iyi şimdilik.

Tamamen değişkenleri gösterme amaçlı 'sim' fonsiyonunu çağırıyorum.

'tout' değişkeninde simülasyon zamanı kaydediliyor, Velocity değişkeni de benim oluşturduğum zaten. Ama aynı bağlantıdan gelen toplam 7 sinyali kaydetmiş. 'Velocity' değerini bunlar arasından seçmem gerekecek. Ben baktım, 6. kolon hız sinyallerini kaydetmiş (Python'da index 0 dan başladığı için 5. kolon)

Şimdi şu kodu çalıştırıp değişkenleri Python çevresine kaydediyorum;

print ('MATLAB Başlatılıyor...')
motor = matlab.start_matlab()
print ('\n\nMATLAB Başlatıldı')
print('\n\nModel Yükleniyor...')
motor.eval("model = 'ModelModelModel'",nargout=0)
motor.eval("load_system(model)",nargout=0)
print('\n\nModel Yüklendi')
print('\n\nSimülasyon Başlıyor...')
motor.eval("sim(model)",nargout=0)
print('\n\nSimülasyon Tamamlandı')
##################################
zaman = motor.workspace['tout']
hiz = motor.workspace['Velocity']
##########results bloku###########
results= motor.workspace['results']
##################################
zaman=np.array(zaman)
hiz=np.matrix(hiz)[:,5]
Kritik noktalardan bir diğeri ise şu, değişkenler matlab.double şeklinde dönüyor. Bunları numpy array'lerine ya da matislere çevirmek atlanamayacak bir adım.

'results bloku' yazdığım yerin konuyla bir alakası yok, kişisel bir mevzu. Kodun çıktısı şöyle


Değişkenlerden aldığım sinyal kayıtları da böyle görünüyor
    

Şimdi bu sinyalleri görselleştirerek ve Simulink modelimdeki Scope'u izleyerek yaptığım işi test ediyorum.

Python Simülasyonu / Simulink Simülasyonu



Sorunsuz şekilde Simulink (ve MATLAB) ortamı Python çevresinde kullanılabiliyor. Workspace'den dilenen değişkenler seçilip türlü türlü emellere alet edilebilir, oynanılabilir, yeni dans figürleri denenebilir. Dilenen komut benim 'motor' diye kaydettiğim nesneye girilerek MATLAB komut satırı gibi çalıştırılabilir.


Hiç yorum yok:

Yorum Gönder

he's a pirate C harmonica tabs (by hans zimmer reinterpreted sticking original)

  -1 -2 3 3  3 -3 -3* -3*  5 -3 -3 3 -2 3    (2x) -1 -2 3 3 3 -3* 5 5 -5 -5* -5* -5 5 -5 3 3 -3 -3* 5 -5 3 3 -3* -3 -3 -3* 3 -3 -5 -6 7 7 7 ...