ยินดีต้อนรับสู่ Scpi.NET ไลบรารี .NET ล้วนๆ สำหรับควบคุมอุปกรณ์ SCPI หากคุณเคยพยายามควบคุมออสซิลโลสโคปหรือมัลติมิเตอร์แบบดิจิทัลจากคอมพิวเตอร์ของคุณ คุณอาจเจอคำสั่ง SCPI ที่อนุญาตให้ควบคุมอุปกรณ์ดังกล่าว
แม้ว่ามาตรฐานนี้ดูเหมือนการสื่อสารด้วยข้อความธรรมดา แต่การใช้งานจริงไม่ใช่เรื่องง่าย เนื่องจากคำสั่งข้อความเหล่านี้ต้องรวมอยู่ในโปรโตคอลการสื่อสารระดับล่าง เช่น TCP/IP หรือ USBTMC ซึ่งอุปกรณ์เข้าใจ ผู้ผลิตส่วนใหญ่จัดหาห้องสมุดของตนเอง เช่น TekVISA ของ Tektronix หรือ NI-VISA ของ National Instruments น่าเสียดายที่ในความคิดของฉัน ไลบรารีเหล่านี้มีน้ำหนักมากเกินไป สร้างการพึ่งพาซอฟต์แวร์ที่ไม่พึงประสงค์ ทำให้แพ็คเกจการติดตั้งมีขนาดใหญ่ขึ้น โดยปกติจะเน้นที่ฮาร์ดแวร์ของผู้ผลิตรายเดียวเท่านั้น และในท้ายที่สุดไลบรารีเหล่านี้จะมีเพียง "ไปป์" ซึ่งสามารถถ่ายโอนคำสั่ง SCPI ได้ เป้าหมายของโปรเจ็กต์นี้คือการสร้างไลบรารีที่เรียบง่าย น้ำหนักเบา และเป็นอิสระจากผู้ผลิต ซึ่งสามารถพูดคุยกับอุปกรณ์ SCPI ใดๆ ผ่านทาง USB หรืออีเธอร์เน็ต
นี่เป็นส่วนที่ง่ายของไลบรารี และฉันได้นำไปใช้เพื่อให้อินเทอร์เฟซการควบคุมเดียวกันกับทั้งอุปกรณ์ USB และอีเธอร์เน็ตเท่านั้น อุปกรณ์รับฟังพอร์ต TCP 4000
และคำสั่ง SCPI จะถูกส่งโดยตรงในเพย์โหลดโดยไม่มีส่วนหัวใดๆ
นี่เป็นส่วนที่ยากของห้องสมุด อุปกรณ์เหล่านี้ใช้ USB Test & Measuring Class (TMC) ซึ่งต้องใช้การสื่อสาร USB ในระดับต่ำ คำขอทั้งการอ่านและเขียนมีส่วนหัวของตัวเองซึ่งสร้างระดับความซับซ้อนเพิ่มเติม แม้ว่าฉันจะอ่านเอกสารหลายฉบับเกี่ยวกับ TMC แต่ฉันก็ยังต้องทำวิศวกรรมย้อนกลับการสื่อสารของออสซิลโลสโคปของฉันเพื่อให้มันทำงานได้ พบโค้ดที่มีประโยชน์อีกบิตหนึ่งในไดรเวอร์เคอร์เนล Linux แม้ว่ายังมีบางจุดที่ฉันไม่แน่ใจว่าการใช้งานถูกต้องหรือไม่ แต่ไลบรารีก็ทำงานได้ดีกับออสซิลโลสโคป 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 ( ) ;
.. .
}
การอ่าน ID อุปกรณ์เป็นเรื่องปกติ แต่คุณอาจต้องการส่งคำสั่ง SCPI เพิ่มเติมไปยังอุปกรณ์ เพื่อรักษาสถาปัตยกรรมแอปพลิเคชันให้สะอาด คุณควรสร้างคลาสแยกต่างหากสำหรับเครื่องมือที่คุณควบคุม ซึ่งสามารถทำได้โดยการสืบทอดจากคลาส ScpiDevice
ซึ่งมีวิธีการที่เป็นประโยชน์บางอย่างอยู่แล้ว เช่น Query()
โปรดดูไดเรกทอรี SampleApp
สำหรับรายละเอียดเพิ่มเติม
ห้องสมุดนี้เน้นเฉพาะการส่งคำสั่งและการตอบกลับของ SCPI ไม่มีฟังก์ชันการทำงานระดับสูงกว่าเช่นไดรเวอร์อุปกรณ์ เหตุผลก็คือ การใช้งานไดรเวอร์ดังกล่าวเป็นงานที่ซับซ้อนมาก: