مرحبًا بك في Scpi.NET، مكتبة .NET خالصة للتحكم في أجهزة SCPI. إذا سبق لك أن حاولت التحكم في راسم الذبذبات أو مقياس رقمي متعدد من جهاز الكمبيوتر الخاص بك، فمن المحتمل أنك صادفت أوامر SCPI التي تسمح بالتحكم في مثل هذه الأجهزة.
على الرغم من أن هذا المعيار يبدو وكأنه اتصال نصي بسيط، إلا أن الاستخدام الحقيقي ليس بهذه السهولة لأن هذه الأوامر النصية يجب أن تكون مغلفة في بروتوكول اتصال منخفض المستوى مثل TCP/IP أو USBTMC الذي يفهمه الجهاز. توفر معظم الشركات المصنعة مكتباتها الخاصة مثل TekVISA من Tektronix أو NI-VISA من National Instruments. لسوء الحظ، في رأيي، هذه المكتبات ثقيلة جدًا، وتنشئ تبعيات برامج غير مرغوب فيها، وتجعل حزم التثبيت أكبر، وتركز عادةً على جهاز مصنع واحد فقط وفي النهاية توفر فقط "أنبوبًا" قادرًا على نقل أوامر SCPI. الهدف من هذا المشروع هو إنشاء مكتبة بسيطة وخفيفة الوزن ومستقلة عن الشركة المصنعة يمكنها التحدث إلى أي جهاز SCPI عبر USB أو Ethernet.
هذا هو الجزء السهل من المكتبة وقد قمت بتنفيذه فقط لإعطاء نفس واجهة التحكم لكل من أجهزة USB وEthernet. تستمع الأجهزة إلى منفذ TCP 4000
ويتم إرسال أوامر SCPI مباشرة في الحمولة دون أي رؤوس.
هذا هو الجزء الصعب من المكتبة. تنفذ الأجهزة فئة اختبار وقياس USB (TMC) التي تتطلب اتصال USB منخفض المستوى تمامًا. تحتوي كل من طلبات القراءة والكتابة على رؤوس خاصة بها مما يخلق مستوى إضافيًا من التعقيد. على الرغم من أنني قرأت العديد من المستندات حول TMC، إلا أنه لا يزال يتعين علي إجراء هندسة عكسية لاتصالات راسم الذبذبات الخاص بي حتى يعمل. تم العثور على أجزاء أخرى مفيدة من التعليمات البرمجية في برامج تشغيل Linux kernel. على الرغم من أنه لا تزال هناك بعض الأماكن التي لست متأكدًا من صحة التنفيذ فيها، إلا أن المكتبة تعمل بشكل جيد مع العديد من أجهزة قياس الذبذبات Tektronix والمقياس الرقمي المتعدد من Keysight.
يعتمد برنامج تشغيل USB TMC الخاص بي على استدعاءات Windows API إلى مكتبات kernel32.dll
و SetupApi.dll
التي تعد جزءًا لا يتجزأ من نظام التشغيل Windows، بحيث لا تكون هناك حاجة إلى تبعيات برامج إضافية.
لكي يعمل جهاز USB TMC، تحتاج إلى تثبيت برنامج تشغيل USB الصحيح. من الصعب جدًا الحصول على برنامج التشغيل لأنه عادةً ما يكون جزءًا من مكتبات VISA ولا يمكن تنزيله بشكل منفصل. لا يمكنني مشاركة برنامج التشغيل الذي أستخدمه بسبب قيود الترخيص، ولكن كنقطة بداية، يمكنني أن أوصي بالرابط أدناه حيث يتم استخدام نفس برنامج التشغيل تمامًا وتكون قائمة التحقق من الاتصال صالحة تمامًا لجميع أجهزة USB TMC:
قائمة التحقق من اتصال USB
ما عليك سوى تثبيت حزمة NuGet أو استنساخ المستودع وإضافة مرجع لذلك. ثم يمكنك البدء بالأمثلة أدناه.
using ScpiNet ;
.. .
// List available USB devices. We will get back USB identifiers which can be used to open the device.
List < string > devices = UsbScpiConnection . GetUsbDeviceList ( ) ;
// In order to get instrument name from the USB identifier, we need to open the device and ask it for
// the name. The connection implements IDisposable, so it's recommended to use it in the using block.
using ( IScpiConnection connection = new UsbScpiConnection ( devices [ 0 ] ) )
{
// Create the connection:
await connection . Open ( ) ;
// Get the instrument name:
string id = await connection . GetId ( ) ;
// Send some SCPI command:
await Connection . WriteString ( " My special SCPI command " , true ) ;
// Read the response:
string response = await Connection . ReadString ( ) ;
.. .
}
// Connecting the TCP/IP device is even easier because there is always one device listening
// on the port 4000:
using ( IScpiConnection connection = TcpScpiConnection ( " 192.168.1.100 " , 4000 ) )
{
// The rest is same as with the USB connection:
await connection . Open ( ) ;
string id = await connection . GetId ( ) ;
.. .
}
تعد قراءة معرف الأداة أمرًا جيدًا، ولكن ربما ترغب في إرسال المزيد من أوامر SCPI إلى الجهاز. من أجل الحفاظ على نظافة بنية التطبيق، يجب عليك إنشاء فئة منفصلة للأداة التي تتحكم فيها. يمكن القيام بذلك عن طريق الوراثة من فئة ScpiDevice
التي توفر بالفعل بعض الأساليب المفيدة مثل Query()
. يرجى الاطلاع على دليل SampleApp
لمزيد من التفاصيل.
تركز هذه المكتبة فقط على نقل أوامر واستجابات SCPI. لا يوفر أي وظائف ذات مستوى أعلى مثل برامج تشغيل الأجهزة. والسبب هو أن تنفيذ برامج التشغيل هذه مهمة معقدة للغاية: