//================================================================================================== // // Title : MainForm.cs // Purpose : This application illustrates how to use the service request event and // the service request status byte to determine when generated data is ready // and how to read it. // //================================================================================================== using System; using System.Windows.Forms; using Ivi.Visa; using NationalInstruments.Visa; namespace NationalInstruments.Examples.ServiceRequest { /// /// Summary description for Form1. /// public class MainForm : System.Windows.Forms.Form { private IMessageBasedSession mbSession; private System.Windows.Forms.ToolTip toolTip; private System.Windows.Forms.Label selectResourceLabel; private System.Windows.Forms.GroupBox configuringGroupBox; private System.Windows.Forms.GroupBox writingGroupBox; private System.Windows.Forms.GroupBox readingGroupBox; private System.Windows.Forms.Button clearButton; private System.Windows.Forms.Label resourceNameLabel; private System.Windows.Forms.Button openButton; private System.Windows.Forms.Button closeButton; private System.Windows.Forms.TextBox commandTextBox; private System.Windows.Forms.Label commandLabel; private System.Windows.Forms.Button enableSRQButton; private System.Windows.Forms.TextBox writeTextBox; private System.Windows.Forms.Button writeButton; private System.Windows.Forms.TextBox readTextBox; private System.Windows.Forms.ComboBox resourceNameComboBox; private System.ComponentModel.IContainer components; public MainForm() { // // Required for Windows Form Designer support // InitializeComponent(); InitializeUI(); toolTip.SetToolTip(enableSRQButton, "Enable the instrument's SRQ event on MAV by sending the following command (varies by instrument):"); toolTip.SetToolTip(writeButton, "Send string to device"); toolTip.SetToolTip(closeButton, "Causes the control to release its handle to the device"); toolTip.SetToolTip(openButton, "The resource name of the device is set and the control attempts to connect to the device"); try { // This example uses an instance of the NationalInstruments.Visa.ResourceManager class to find resources on the system. // Alternatively, static methods provided by the Ivi.Visa.ResourceManager class may be used when an application // requires additional VISA .NET implementations. using (var rmSession = new ResourceManager()) { var validResources = rmSession.Find("(GPIB|TCPIP|USB)?*INSTR"); foreach (var resource in validResources) { resourceNameComboBox.Items.Add(resource); } } } catch (Exception) { resourceNameComboBox.Items.Add("No 488.2 INSTR resource found on the system"); updateResourceNameControls(false); closeButton.Enabled = false; } resourceNameComboBox.SelectedIndex = 0; } /// /// Clean up any resources being used. /// protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } if (mbSession != null) { mbSession.Dispose(); } } base.Dispose( disposing ); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); this.resourceNameLabel = new System.Windows.Forms.Label(); this.openButton = new System.Windows.Forms.Button(); this.closeButton = new System.Windows.Forms.Button(); this.commandLabel = new System.Windows.Forms.Label(); this.commandTextBox = new System.Windows.Forms.TextBox(); this.enableSRQButton = new System.Windows.Forms.Button(); this.configuringGroupBox = new System.Windows.Forms.GroupBox(); this.resourceNameComboBox = new System.Windows.Forms.ComboBox(); this.selectResourceLabel = new System.Windows.Forms.Label(); this.writingGroupBox = new System.Windows.Forms.GroupBox(); this.writeTextBox = new System.Windows.Forms.TextBox(); this.writeButton = new System.Windows.Forms.Button(); this.readingGroupBox = new System.Windows.Forms.GroupBox(); this.clearButton = new System.Windows.Forms.Button(); this.readTextBox = new System.Windows.Forms.TextBox(); this.toolTip = new System.Windows.Forms.ToolTip(this.components); this.configuringGroupBox.SuspendLayout(); this.writingGroupBox.SuspendLayout(); this.readingGroupBox.SuspendLayout(); this.SuspendLayout(); // // resourceNameLabel // this.resourceNameLabel.Location = new System.Drawing.Point(16, 80); this.resourceNameLabel.Name = "resourceNameLabel"; this.resourceNameLabel.Size = new System.Drawing.Size(112, 16); this.resourceNameLabel.TabIndex = 1; this.resourceNameLabel.Text = "Resource Name:"; // // openButton // this.openButton.Location = new System.Drawing.Point(16, 128); this.openButton.Name = "openButton"; this.openButton.Size = new System.Drawing.Size(104, 23); this.openButton.TabIndex = 2; this.openButton.Text = "Open Session"; this.openButton.Click += new System.EventHandler(this.openButton_Click); // // closeButton // this.closeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.closeButton.Location = new System.Drawing.Point(160, 64); this.closeButton.Name = "closeButton"; this.closeButton.Size = new System.Drawing.Size(104, 23); this.closeButton.TabIndex = 3; this.closeButton.Text = "Close Session"; this.closeButton.Click += new System.EventHandler(this.closeButton_Click); // // commandLabel // this.commandLabel.Location = new System.Drawing.Point(16, 160); this.commandLabel.Name = "commandLabel"; this.commandLabel.Size = new System.Drawing.Size(256, 32); this.commandLabel.TabIndex = 4; this.commandLabel.Text = "Type the command to enable the instrument\'s SRQ event on MAV:"; // // commandTextBox // this.commandTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.commandTextBox.Location = new System.Drawing.Point(16, 200); this.commandTextBox.Name = "commandTextBox"; this.commandTextBox.Size = new System.Drawing.Size(152, 20); this.commandTextBox.TabIndex = 5; this.commandTextBox.Text = "*SRE 16"; // // enableSRQButton // this.enableSRQButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.enableSRQButton.Location = new System.Drawing.Point(168, 200); this.enableSRQButton.Name = "enableSRQButton"; this.enableSRQButton.Size = new System.Drawing.Size(104, 24); this.enableSRQButton.TabIndex = 6; this.enableSRQButton.Text = "Enable SRQ"; this.enableSRQButton.Click += new System.EventHandler(this.enableSRQButton_Click); // // configuringGroupBox // this.configuringGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.configuringGroupBox.Controls.Add(this.resourceNameComboBox); this.configuringGroupBox.Controls.Add(this.closeButton); this.configuringGroupBox.Location = new System.Drawing.Point(8, 64); this.configuringGroupBox.Name = "configuringGroupBox"; this.configuringGroupBox.Size = new System.Drawing.Size(272, 168); this.configuringGroupBox.TabIndex = 7; this.configuringGroupBox.TabStop = false; this.configuringGroupBox.Text = "Configuring"; // // resourceNameComboBox // this.resourceNameComboBox.FormattingEnabled = true; this.resourceNameComboBox.Location = new System.Drawing.Point(11, 35); this.resourceNameComboBox.Name = "resourceNameComboBox"; this.resourceNameComboBox.Size = new System.Drawing.Size(255, 21); this.resourceNameComboBox.TabIndex = 4; // // selectResourceLabel // this.selectResourceLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.selectResourceLabel.Location = new System.Drawing.Point(8, 8); this.selectResourceLabel.Name = "selectResourceLabel"; this.selectResourceLabel.Size = new System.Drawing.Size(272, 56); this.selectResourceLabel.TabIndex = 8; this.selectResourceLabel.Text = "Select the Resource Name associated with your device and press the Configure Devi" + "ce button. Then enter the command string that enables SRQ and click the Enable S" + "RQ button."; // // writingGroupBox // this.writingGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.writingGroupBox.Controls.Add(this.writeTextBox); this.writingGroupBox.Controls.Add(this.writeButton); this.writingGroupBox.Location = new System.Drawing.Point(8, 240); this.writingGroupBox.Name = "writingGroupBox"; this.writingGroupBox.Size = new System.Drawing.Size(272, 56); this.writingGroupBox.TabIndex = 9; this.writingGroupBox.TabStop = false; this.writingGroupBox.Text = "Writing"; // // writeTextBox // this.writeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.writeTextBox.Location = new System.Drawing.Point(8, 24); this.writeTextBox.Name = "writeTextBox"; this.writeTextBox.Size = new System.Drawing.Size(152, 20); this.writeTextBox.TabIndex = 2; this.writeTextBox.Text = "*IDN?\\n"; // // writeButton // this.writeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.writeButton.Location = new System.Drawing.Point(160, 24); this.writeButton.Name = "writeButton"; this.writeButton.Size = new System.Drawing.Size(104, 23); this.writeButton.TabIndex = 1; this.writeButton.Text = "Write"; this.writeButton.Click += new System.EventHandler(this.writeButton_Click); // // readingGroupBox // this.readingGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.readingGroupBox.Controls.Add(this.clearButton); this.readingGroupBox.Controls.Add(this.readTextBox); this.readingGroupBox.Location = new System.Drawing.Point(8, 312); this.readingGroupBox.Name = "readingGroupBox"; this.readingGroupBox.Size = new System.Drawing.Size(272, 120); this.readingGroupBox.TabIndex = 10; this.readingGroupBox.TabStop = false; this.readingGroupBox.Text = "Reading"; // // clearButton // this.clearButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.clearButton.Location = new System.Drawing.Point(8, 88); this.clearButton.Name = "clearButton"; this.clearButton.Size = new System.Drawing.Size(104, 23); this.clearButton.TabIndex = 1; this.clearButton.Text = "Clear"; this.clearButton.Click += new System.EventHandler(this.clearButton_Click); // // readTextBox // this.readTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.readTextBox.Location = new System.Drawing.Point(8, 24); this.readTextBox.Multiline = true; this.readTextBox.Name = "readTextBox"; this.readTextBox.ReadOnly = true; this.readTextBox.Size = new System.Drawing.Size(256, 56); this.readTextBox.TabIndex = 0; // // MainForm // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(288, 448); this.Controls.Add(this.readingGroupBox); this.Controls.Add(this.writingGroupBox); this.Controls.Add(this.selectResourceLabel); this.Controls.Add(this.enableSRQButton); this.Controls.Add(this.commandTextBox); this.Controls.Add(this.commandLabel); this.Controls.Add(this.openButton); this.Controls.Add(this.resourceNameLabel); this.Controls.Add(this.configuringGroupBox); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.MaximizeBox = false; this.MinimumSize = new System.Drawing.Size(296, 482); this.Name = "MainForm"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "Service Request"; this.configuringGroupBox.ResumeLayout(false); this.writingGroupBox.ResumeLayout(false); this.writingGroupBox.PerformLayout(); this.readingGroupBox.ResumeLayout(false); this.readingGroupBox.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); } #endregion /// /// The main entry point for the application. /// [STAThread] static void Main() { Application.Run(new MainForm()); } private void updateResourceNameControls(bool enable) { resourceNameComboBox.Enabled = enable; openButton.Enabled = enable; closeButton.Enabled = !enable; if (enable) openButton.Focus(); } private void updateSRQControls(bool enable) { commandTextBox.Enabled = enable; enableSRQButton.Enabled = enable; if (enable) enableSRQButton.Focus(); } private void updateWriteControls(bool enable) { writeTextBox.Enabled = enable; writeButton.Enabled = enable; if (enable) writeButton.Focus(); } private void InitializeUI() { updateResourceNameControls(true); updateSRQControls(false); updateWriteControls(false); } // When the Open Session button is pressed, the resource name of the // device is set and the control attempts to connect to the device private void openButton_Click(object sender, System.EventArgs e) { try { using (var rmSession = new ResourceManager()) { mbSession = (MessageBasedSession)rmSession.Open(resourceNameComboBox.Text); // Use SynchronizeCallbacks to specify that the object marshals callbacks across threads appropriately. mbSession.SynchronizeCallbacks = true; updateResourceNameControls(false); updateSRQControls(true); } } catch (Exception exp) { MessageBox.Show(exp.Message); } } // The Enable SRQ button writes the string that tells the instrument to // enable the SRQ bit private void enableSRQButton_Click(object sender, System.EventArgs e) { try { // Registering a handler for an event automatically enables that event. mbSession.ServiceRequest += OnServiceRequest; WriteToSession(commandTextBox.Text); updateSRQControls(false); updateWriteControls(true); } catch(Exception exp) { MessageBox.Show(exp.Message); } } // Pressing Close Session causes the control to release its handle to the device private void closeButton_Click(object sender, System.EventArgs e) { mbSession.ServiceRequest -= OnServiceRequest; mbSession.Dispose(); InitializeUI(); } // Clicking the Write Button causes the Send String to be written to the device private void writeButton_Click(object sender, System.EventArgs e) { WriteToSession(writeTextBox.Text); } // Pressing the Clear button clears the read textbox private void clearButton_Click(object sender, System.EventArgs e) { readTextBox.Clear(); } private string ReplaceCommonEscapeSequences(string s) { return s.Replace("\\n", "\n").Replace("\\r", "\r"); } private string InsertCommonEscapeSequences(string s) { return s.Replace("\n", "\\n").Replace("\r", "\\r"); } private void WriteToSession(string txtWrite) { try { string textToWrite = ReplaceCommonEscapeSequences(txtWrite); mbSession.RawIO.Write(textToWrite); } catch(Exception exp) { MessageBox.Show(exp.Message); } } private void OnServiceRequest(object sender, VisaEventArgs e) { try { var mbs = (MessageBasedSession)sender; StatusByteFlags sb = mbs.ReadStatusByte(); if ((sb & StatusByteFlags.MessageAvailable) != 0) { string textRead = mbs.RawIO.ReadString(); readTextBox.Text = InsertCommonEscapeSequences(textRead); } else { MessageBox.Show("MAV in status register is not set, which means that message is not available. Make sure the command to enable SRQ is correct, and the instrument is 488.2 compatible."); } } catch(Exception exp) { MessageBox.Show(exp.Message); } } } }