NETES MÜHENDİSLİK
Profesyonel Üye
Bu blog, Tektronix tm_devices paketinin teknik yönünü tartışmaktadır. Mimari tasarım ve karar verme sürecinin bir kısmını kapsayacaktır. Amaç, tm_devices'in nasıl çalıştığını ve diğer cihaz kontrol seçeneklerine göre avantajlarını açıklamaktır.
Giriş
Tektronix'te ürünler sürekli olarak test edilmektedir. Bu, test ettiğimiz her bir cihazla çok fazla iletişim kurulmasını gerektiriyor ve bunu sağlamak için sağlam bir altyapıya ihtiyacımız var. Altı yıldan uzun bir süre önce, cihazları test etmek için kullanabileceğiniz dahili bir test çerçevesi üzerinde çalışmaya başladık. Hızlı bir şekilde 2023'e geldiğimizde, altyapının çekirdeği olan cihaz yönetim kodunun daha geniş bir kitle için yararlı olabileceğini fark ettik. Bu çekirdek cihaz yönetim çerçevesini alıp tm_devices adında açık kaynaklı bir Python paketi olarak yayınlamaya karar verdik. Bu altyapıyı hala her gün test için kullanıyoruz, ancak artık temel cihaz yönetimi çerçevesi herkesin kullanımına açık.
Copy this code
from tm_devices import DeviceManager
with DeviceManager() as device_manager:
scope = device_manager.add_scope("192.168.0.100")
scope.query("*IDN?")
print(scope)
tm_devices Nedir?
Python günümüzde kullanılan en popüler programlama dillerinden biridir ve Tektronix'te bu dili yaygın olarak kullanmaktayız. tm_devices, Python kodu içinde test ve ölçüm cihazlarının kontrolü ve kullanımı için daha iyi bir arayüz sağlayan bir Python paketidir. VISA (Virtual Instrument Software Architecture) cihazları ile bağlantıları ve iletişimi yönetmek için kullanılan mevcut PyVISA paketinin üzerinde daha üst düzey bir soyutlama görevi görür. Bu, her cihaz için Python sürücüleri (bir Python sınıfı şeklinde) sağlayarak elde edilir. Bu çerçeve aynı zamanda tamamen çapraz platformdur ve üç büyük işletim sisteminde kapsamlı bir şekilde test edilmiştir: Windows, MacOS ve Linux. Çapraz platform olmasının yanı sıra, kod Python'un birden fazla sürümünde de çalışacaktır. Bu yazının yazıldığı sırada, tm_devices Python 3.8+ sürümünü desteklemektedir. Ayrıca, VSCode veya PyCharm gibi modern bir entegre geliştirme ortamı (IDE) kullanarak Python kodu yazarken, otomatik tamamlama ve tür ipucu alacaksınız, bu da herhangi bir komut dosyasını çalıştırmadan önce sorunları önleyen kod yazmanıza yardımcı olacaktır.
Bu paketle ilgili en güzel şeylerden biri, yüklediğinizde kullanıma hazır olarak gelmesidir. Bir cihazı bağlamak ve kontrol etmek için harici bağımlılık gerektirmez. Bununla birlikte, belirli bir VISA arka ucu kullanmak istiyorsanız, onunla da çalışacaktır. Bu paketi kullanmak, TCPIP, USBTMC, SOCKET, Seri ve hatta GPIB bağlantısı kullanarak VISA cihazlarına bağlanmanıza izin verecektir. Desteklenen bağlantı türleri ve arayüzlerin tam listesi için resmi belgelere bakın. Desteklenen cihazların tam listesi de resmi belgelerde mevcuttur. Desteklenen önemli cihazlardan birkaçı Tektronix 2, 4, 5 ve 6 Serisi Karışık Sinyal Osiloskoplarının yanı sıra birkaç Keithley kaynak ölçüm birimidir (SMU). Şu anda desteklenen cihaz türleri keyfi fonksiyon jeneratörleri (AFG'ler), keyfi dalga formu jeneratörleri (AWG'ler), osiloskoplar, güç kaynağı üniteleri (PSU'lar), kaynak ölçüm üniteleri (SMU'lar), Tektronix Margin Tester, dijital multimetreler (DMM'ler), dijital toplama sistemleri (DAQ'lar) ve sistem anahtarlarıdır.
Çevrimiçi belgeler, çok sayıda örnek kod ve yararlı sorun giderme bilgilerinin yanı sıra tüm paket için eksiksiz bir API (uygulama programlama arayüzü) referans kılavuzu sağlar. Bu Python API'si, VISA cihaz komutlarının doğrudan Python koduna bire bir eşlenmesini içerir. Artık komutlar için string kullanmak yok! Bu ekstra API desteğine sahip modeller, belgelerin ana sayfasında belirtilmiştir ve ek modeller için destek planlanmaktadır.
tm_devices Mimarisi
Tüm tm_devices mimarisinin bel kemiği DeviceManager sınıfıdır. DeviceManager, kontrol etmek istediğiniz her cihaza bağlanma işlemini gerçekleştirdiği için örneklemeniz gereken ilk şeydir. DeviceManager, hangi cihaza bağlanacağını belirlemek üzere bir yapılandırma dosyasını veya ortam değişkenini okumak için bir yapılandırma ayrıştırıcısı kullanır. Bu yapılandırma cihaz türünün (örneğin SCOPE, AFG, SMU) yanı sıra adresi (örneğin USBTMC için ana bilgisayar adı, IP adresi, model ve seri numarası) içerir. Yapılandırma ayrıştırıcısı ayrıca, ayrıntılı VISA günlüğünün açılması gibi küresel olarak geçerli olan isteğe bağlı yapılandırma ayarlarını da okur. DeviceManager daha sonra config parser'ın listelediği tüm cihazlara bağlanır ve her cihaz için Python sürücüsüne erişim sağlar. Python aygıt sürücüsü, fiziksel (veya sanal) aygıtla gerçek iletişimden sorumlu olan sınıftır.

Şekil 1: DeviceManager mimari blok diyagramı.
Python Sürücü Sınıfları
Sürücüler paketin en büyük parçasıdır; her benzersiz cihaz serisi benzersiz bir şekilde adlandırılmış bir Python sürücü sınıfına sahiptir. Bu sınıflar nesne yönelimli programlama ilkeleri kullanılarak uygulanmakta ve kalıtımdan geniş ölçüde yararlanmaktadır. Bu, ortak niteliklerin ve yöntemlerin daha üst düzey, soyut sınıflarda tanımlanmasına ve daha sonra bireysel sürücü sınıfları tarafından miras alınmasına olanak tanır. Sürücülere daha fazla güncelleme eklenmekte ve yeni özelliklerin çoğu mixin sınıfları aracılığıyla miras alınmaktadır. Bu, birden fazla cihaz türünün aynı miras ağacını paylaşmadan aynı soyut temel sınıftan miras almasına olanak tanır (çünkü başka pek bir şey paylaşmayabilirler). Karışım sınıfları, bazıları sürücünün üzerine yazacağı veya kendisi için uygulayacağı nitelikleri ve yöntemleri tanımlar.
Tüm bu nesne yönelimli ilkeler, çok az sayıda gerçek kod satırına sahip oldukları için okunması oldukça basit olan bireysel sürücü sınıflarında toplanır. Sürücülerde kodu yeniden kullanmak için kullanılan bir diğer teknik de “aile temel sınıfı” dediğimiz bir sınıf oluşturmaktır. Her bir aile temel sınıfı, kendisinden miras alan tüm alt sınıflar için imzayı tanımlayan soyut bir sınıftır. Bazen bir alt sınıfın bir uygulamanın üzerine yazması gerekebilir, ancak bu, ortak bir aile temel sınıfından miras alan tüm sürücülerin aynı sınıf imzasına (nitelikler, yöntemler vb.) sahip olacağı anlamına gelir. Bu nesne yönelimli tasarım ilkeleri, kod tekrarının son derece düşük olduğu ve sürücülerin kolaylıkla oluşturulup güncellenebildiği anlamına gelir.
Python Paket Desteği, Bakım, Yeni Sürücüler ve Daha Fazlası
Bu paket Tektronix'te bizim tarafımızdan sürekli kullanılıyor, bu nedenle onu geliştirmek için tamamen yatırım yapıyoruz. Bu, katkıda bulunmayı kolaylaştırmak için kodun yeniden yapılandırılması ve yeniden düzenlenmesi gibi şeyleri içerecektir. Paketin olgunlaşmasını izledikçe, mixin sınıflarının daha değerli hale geldiğini gördük ve bunları daha fazla kullanmaya başlamak istiyoruz. Ayrıca sürücüleri ve ilgili bire bir komut API'lerini güncelleyerek mevcut cihazlar için desteği artıracağız. Ve elbette, yeni cihazlar piyasaya sürüldükçe, bunları kontrol etmek için sürücüler tm_devices'e eklenecektir.
Sonuç
tm_devices bugün mevcut olan en iyi cihaz kontrol Python paketlerinden biridir. Benzersiz Python sürücüleri aracılığıyla 90'dan fazla farklı cihaz serisini destekler, çapraz platformdur, Python'un birden çok sürümünü destekler ve modern entegre geliştirme ortamlarıyla sorunsuz bir şekilde entegre olur.
Geri bildirim sağlamak, mevcut açık sorunları görüntülemek ve/veya tartışmalara katılmak için GitHub sayfasını ziyaret edin. Özellikle ilgileniyorsanız, depoyu çatallamaktan ve kendi katkınızla bir Pull Request göndermekten çekinmeyin!
Giriş
Tektronix'te ürünler sürekli olarak test edilmektedir. Bu, test ettiğimiz her bir cihazla çok fazla iletişim kurulmasını gerektiriyor ve bunu sağlamak için sağlam bir altyapıya ihtiyacımız var. Altı yıldan uzun bir süre önce, cihazları test etmek için kullanabileceğiniz dahili bir test çerçevesi üzerinde çalışmaya başladık. Hızlı bir şekilde 2023'e geldiğimizde, altyapının çekirdeği olan cihaz yönetim kodunun daha geniş bir kitle için yararlı olabileceğini fark ettik. Bu çekirdek cihaz yönetim çerçevesini alıp tm_devices adında açık kaynaklı bir Python paketi olarak yayınlamaya karar verdik. Bu altyapıyı hala her gün test için kullanıyoruz, ancak artık temel cihaz yönetimi çerçevesi herkesin kullanımına açık.
Copy this code
from tm_devices import DeviceManager
with DeviceManager() as device_manager:
scope = device_manager.add_scope("192.168.0.100")
scope.query("*IDN?")
print(scope)
tm_devices Nedir?
Python günümüzde kullanılan en popüler programlama dillerinden biridir ve Tektronix'te bu dili yaygın olarak kullanmaktayız. tm_devices, Python kodu içinde test ve ölçüm cihazlarının kontrolü ve kullanımı için daha iyi bir arayüz sağlayan bir Python paketidir. VISA (Virtual Instrument Software Architecture) cihazları ile bağlantıları ve iletişimi yönetmek için kullanılan mevcut PyVISA paketinin üzerinde daha üst düzey bir soyutlama görevi görür. Bu, her cihaz için Python sürücüleri (bir Python sınıfı şeklinde) sağlayarak elde edilir. Bu çerçeve aynı zamanda tamamen çapraz platformdur ve üç büyük işletim sisteminde kapsamlı bir şekilde test edilmiştir: Windows, MacOS ve Linux. Çapraz platform olmasının yanı sıra, kod Python'un birden fazla sürümünde de çalışacaktır. Bu yazının yazıldığı sırada, tm_devices Python 3.8+ sürümünü desteklemektedir. Ayrıca, VSCode veya PyCharm gibi modern bir entegre geliştirme ortamı (IDE) kullanarak Python kodu yazarken, otomatik tamamlama ve tür ipucu alacaksınız, bu da herhangi bir komut dosyasını çalıştırmadan önce sorunları önleyen kod yazmanıza yardımcı olacaktır.
Bu paketle ilgili en güzel şeylerden biri, yüklediğinizde kullanıma hazır olarak gelmesidir. Bir cihazı bağlamak ve kontrol etmek için harici bağımlılık gerektirmez. Bununla birlikte, belirli bir VISA arka ucu kullanmak istiyorsanız, onunla da çalışacaktır. Bu paketi kullanmak, TCPIP, USBTMC, SOCKET, Seri ve hatta GPIB bağlantısı kullanarak VISA cihazlarına bağlanmanıza izin verecektir. Desteklenen bağlantı türleri ve arayüzlerin tam listesi için resmi belgelere bakın. Desteklenen cihazların tam listesi de resmi belgelerde mevcuttur. Desteklenen önemli cihazlardan birkaçı Tektronix 2, 4, 5 ve 6 Serisi Karışık Sinyal Osiloskoplarının yanı sıra birkaç Keithley kaynak ölçüm birimidir (SMU). Şu anda desteklenen cihaz türleri keyfi fonksiyon jeneratörleri (AFG'ler), keyfi dalga formu jeneratörleri (AWG'ler), osiloskoplar, güç kaynağı üniteleri (PSU'lar), kaynak ölçüm üniteleri (SMU'lar), Tektronix Margin Tester, dijital multimetreler (DMM'ler), dijital toplama sistemleri (DAQ'lar) ve sistem anahtarlarıdır.
Çevrimiçi belgeler, çok sayıda örnek kod ve yararlı sorun giderme bilgilerinin yanı sıra tüm paket için eksiksiz bir API (uygulama programlama arayüzü) referans kılavuzu sağlar. Bu Python API'si, VISA cihaz komutlarının doğrudan Python koduna bire bir eşlenmesini içerir. Artık komutlar için string kullanmak yok! Bu ekstra API desteğine sahip modeller, belgelerin ana sayfasında belirtilmiştir ve ek modeller için destek planlanmaktadır.
tm_devices Mimarisi
Tüm tm_devices mimarisinin bel kemiği DeviceManager sınıfıdır. DeviceManager, kontrol etmek istediğiniz her cihaza bağlanma işlemini gerçekleştirdiği için örneklemeniz gereken ilk şeydir. DeviceManager, hangi cihaza bağlanacağını belirlemek üzere bir yapılandırma dosyasını veya ortam değişkenini okumak için bir yapılandırma ayrıştırıcısı kullanır. Bu yapılandırma cihaz türünün (örneğin SCOPE, AFG, SMU) yanı sıra adresi (örneğin USBTMC için ana bilgisayar adı, IP adresi, model ve seri numarası) içerir. Yapılandırma ayrıştırıcısı ayrıca, ayrıntılı VISA günlüğünün açılması gibi küresel olarak geçerli olan isteğe bağlı yapılandırma ayarlarını da okur. DeviceManager daha sonra config parser'ın listelediği tüm cihazlara bağlanır ve her cihaz için Python sürücüsüne erişim sağlar. Python aygıt sürücüsü, fiziksel (veya sanal) aygıtla gerçek iletişimden sorumlu olan sınıftır.

Şekil 1: DeviceManager mimari blok diyagramı.
Python Sürücü Sınıfları
Sürücüler paketin en büyük parçasıdır; her benzersiz cihaz serisi benzersiz bir şekilde adlandırılmış bir Python sürücü sınıfına sahiptir. Bu sınıflar nesne yönelimli programlama ilkeleri kullanılarak uygulanmakta ve kalıtımdan geniş ölçüde yararlanmaktadır. Bu, ortak niteliklerin ve yöntemlerin daha üst düzey, soyut sınıflarda tanımlanmasına ve daha sonra bireysel sürücü sınıfları tarafından miras alınmasına olanak tanır. Sürücülere daha fazla güncelleme eklenmekte ve yeni özelliklerin çoğu mixin sınıfları aracılığıyla miras alınmaktadır. Bu, birden fazla cihaz türünün aynı miras ağacını paylaşmadan aynı soyut temel sınıftan miras almasına olanak tanır (çünkü başka pek bir şey paylaşmayabilirler). Karışım sınıfları, bazıları sürücünün üzerine yazacağı veya kendisi için uygulayacağı nitelikleri ve yöntemleri tanımlar.
Tüm bu nesne yönelimli ilkeler, çok az sayıda gerçek kod satırına sahip oldukları için okunması oldukça basit olan bireysel sürücü sınıflarında toplanır. Sürücülerde kodu yeniden kullanmak için kullanılan bir diğer teknik de “aile temel sınıfı” dediğimiz bir sınıf oluşturmaktır. Her bir aile temel sınıfı, kendisinden miras alan tüm alt sınıflar için imzayı tanımlayan soyut bir sınıftır. Bazen bir alt sınıfın bir uygulamanın üzerine yazması gerekebilir, ancak bu, ortak bir aile temel sınıfından miras alan tüm sürücülerin aynı sınıf imzasına (nitelikler, yöntemler vb.) sahip olacağı anlamına gelir. Bu nesne yönelimli tasarım ilkeleri, kod tekrarının son derece düşük olduğu ve sürücülerin kolaylıkla oluşturulup güncellenebildiği anlamına gelir.
Python Paket Desteği, Bakım, Yeni Sürücüler ve Daha Fazlası
Bu paket Tektronix'te bizim tarafımızdan sürekli kullanılıyor, bu nedenle onu geliştirmek için tamamen yatırım yapıyoruz. Bu, katkıda bulunmayı kolaylaştırmak için kodun yeniden yapılandırılması ve yeniden düzenlenmesi gibi şeyleri içerecektir. Paketin olgunlaşmasını izledikçe, mixin sınıflarının daha değerli hale geldiğini gördük ve bunları daha fazla kullanmaya başlamak istiyoruz. Ayrıca sürücüleri ve ilgili bire bir komut API'lerini güncelleyerek mevcut cihazlar için desteği artıracağız. Ve elbette, yeni cihazlar piyasaya sürüldükçe, bunları kontrol etmek için sürücüler tm_devices'e eklenecektir.
Sonuç
tm_devices bugün mevcut olan en iyi cihaz kontrol Python paketlerinden biridir. Benzersiz Python sürücüleri aracılığıyla 90'dan fazla farklı cihaz serisini destekler, çapraz platformdur, Python'un birden çok sürümünü destekler ve modern entegre geliştirme ortamlarıyla sorunsuz bir şekilde entegre olur.
Geri bildirim sağlamak, mevcut açık sorunları görüntülemek ve/veya tartışmalara katılmak için GitHub sayfasını ziyaret edin. Özellikle ilgileniyorsanız, depoyu çatallamaktan ve kendi katkınızla bir Pull Request göndermekten çekinmeyin!