Files
usb-6009/NI-VISA/Examples/.NET/RegisterBasedOperations/MainForm.cs
2024-11-01 11:47:29 -07:00

574 lines
25 KiB
C#

//==================================================================================================
//
// Title : MainForm.cs
// Purpose : This application illustrates how to use In/Out/MoveIn/MoveOut on register-based
// sessions.
//
//==================================================================================================
using System;
using System.Windows.Forms;
using Ivi.Visa;
using NationalInstruments.Visa;
namespace NationalInstruments.Examples.RegisterBasedOperations
{
/// <summary>
/// Summary description for Form1.
/// </summary>
public class MainForm : System.Windows.Forms.Form
{
private PxiSession pxiSession;
private System.Windows.Forms.Button closeButton;
private System.Windows.Forms.Button openButton;
private System.Windows.Forms.NumericUpDown[] numOutputArray;
private System.Windows.Forms.Label resourceNameLabel;
private System.Windows.Forms.ComboBox resourceNameComboBox;
private System.Windows.Forms.Label resultLabel;
private System.Windows.Forms.TextBox resultTextBox;
private System.Windows.Forms.Button clearButton;
private System.Windows.Forms.Button moveInButton;
private System.Windows.Forms.Button inButton;
private System.Windows.Forms.Label spaceLabel;
private System.Windows.Forms.Label offsetLabel;
private System.Windows.Forms.Label widthLabel;
private System.Windows.Forms.ComboBox spaceComboBox;
private System.Windows.Forms.NumericUpDown offsetNumericUpDown;
private System.Windows.Forms.ComboBox widthComboBox;
private System.Windows.Forms.NumericUpDown numElementsNumericUpDown;
private System.Windows.Forms.Label numElementsLabel;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;
public MainForm()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
SetupUI(false);
PopulateComboBoxes();
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
if (pxiSession != null)
{
pxiSession.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
this.resourceNameLabel = new System.Windows.Forms.Label();
this.offsetNumericUpDown = new System.Windows.Forms.NumericUpDown();
this.numElementsNumericUpDown = new System.Windows.Forms.NumericUpDown();
this.offsetLabel = new System.Windows.Forms.Label();
this.numElementsLabel = new System.Windows.Forms.Label();
this.moveInButton = new System.Windows.Forms.Button();
this.inButton = new System.Windows.Forms.Button();
this.resultTextBox = new System.Windows.Forms.TextBox();
this.resultLabel = new System.Windows.Forms.Label();
this.clearButton = new System.Windows.Forms.Button();
this.spaceComboBox = new System.Windows.Forms.ComboBox();
this.spaceLabel = new System.Windows.Forms.Label();
this.widthLabel = new System.Windows.Forms.Label();
this.widthComboBox = new System.Windows.Forms.ComboBox();
this.resourceNameComboBox = new System.Windows.Forms.ComboBox();
this.closeButton = new System.Windows.Forms.Button();
this.openButton = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.offsetNumericUpDown)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.numElementsNumericUpDown)).BeginInit();
this.SuspendLayout();
//
// resourceNameLabel
//
this.resourceNameLabel.Location = new System.Drawing.Point(20, 8);
this.resourceNameLabel.Name = "resourceNameLabel";
this.resourceNameLabel.Size = new System.Drawing.Size(96, 16);
this.resourceNameLabel.TabIndex = 0;
this.resourceNameLabel.Text = "Resource Name:";
//
// offsetNumericUpDown
//
this.offsetNumericUpDown.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.offsetNumericUpDown.Hexadecimal = true;
this.offsetNumericUpDown.Location = new System.Drawing.Point(20, 169);
this.offsetNumericUpDown.Maximum = new decimal(new int[] {
65535,
0,
0,
0});
this.offsetNumericUpDown.Name = "offsetNumericUpDown";
this.offsetNumericUpDown.Size = new System.Drawing.Size(137, 20);
this.offsetNumericUpDown.TabIndex = 8;
//
// numElementsNumericUpDown
//
this.numElementsNumericUpDown.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.numElementsNumericUpDown.Location = new System.Drawing.Point(174, 169);
this.numElementsNumericUpDown.Name = "numElementsNumericUpDown";
this.numElementsNumericUpDown.Size = new System.Drawing.Size(137, 20);
this.numElementsNumericUpDown.TabIndex = 8;
this.numElementsNumericUpDown.Value = new decimal(new int[] {
1,
0,
0,
0});
//
// offsetLabel
//
this.offsetLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.offsetLabel.Location = new System.Drawing.Point(21, 150);
this.offsetLabel.Name = "offsetLabel";
this.offsetLabel.Size = new System.Drawing.Size(72, 16);
this.offsetLabel.TabIndex = 9;
this.offsetLabel.Text = "Offset:";
//
// numElementsLabel
//
this.numElementsLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.numElementsLabel.Location = new System.Drawing.Point(171, 150);
this.numElementsLabel.Name = "numElementsLabel";
this.numElementsLabel.Size = new System.Drawing.Size(112, 16);
this.numElementsLabel.TabIndex = 10;
this.numElementsLabel.Text = "Number of Elements:";
//
// moveInButton
//
this.moveInButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.moveInButton.Location = new System.Drawing.Point(172, 219);
this.moveInButton.Name = "moveInButton";
this.moveInButton.Size = new System.Drawing.Size(139, 24);
this.moveInButton.TabIndex = 11;
this.moveInButton.Text = "Move In";
this.moveInButton.Click += new System.EventHandler(this.moveInButton_Click);
//
// inButton
//
this.inButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.inButton.Location = new System.Drawing.Point(20, 219);
this.inButton.Name = "inButton";
this.inButton.Size = new System.Drawing.Size(128, 24);
this.inButton.TabIndex = 13;
this.inButton.Text = "In";
this.inButton.Click += new System.EventHandler(this.inButton_Click);
//
// resultTextBox
//
this.resultTextBox.AcceptsReturn = true;
this.resultTextBox.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.resultTextBox.Location = new System.Drawing.Point(23, 276);
this.resultTextBox.Multiline = true;
this.resultTextBox.Name = "resultTextBox";
this.resultTextBox.ReadOnly = true;
this.resultTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
this.resultTextBox.Size = new System.Drawing.Size(292, 242);
this.resultTextBox.TabIndex = 17;
//
// resultLabel
//
this.resultLabel.Location = new System.Drawing.Point(20, 257);
this.resultLabel.Name = "resultLabel";
this.resultLabel.Size = new System.Drawing.Size(64, 16);
this.resultLabel.TabIndex = 18;
this.resultLabel.Text = "Result:";
//
// clearButton
//
this.clearButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.clearButton.Location = new System.Drawing.Point(235, 522);
this.clearButton.Name = "clearButton";
this.clearButton.Size = new System.Drawing.Size(80, 24);
this.clearButton.TabIndex = 24;
this.clearButton.Text = "Clear";
this.clearButton.Click += new System.EventHandler(this.clearButton_Click);
//
// spaceComboBox
//
this.spaceComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.spaceComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.spaceComboBox.Location = new System.Drawing.Point(20, 121);
this.spaceComboBox.Name = "spaceComboBox";
this.spaceComboBox.Size = new System.Drawing.Size(137, 21);
this.spaceComboBox.TabIndex = 25;
//
// spaceLabel
//
this.spaceLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.spaceLabel.Location = new System.Drawing.Point(20, 104);
this.spaceLabel.Name = "spaceLabel";
this.spaceLabel.Size = new System.Drawing.Size(52, 14);
this.spaceLabel.TabIndex = 26;
this.spaceLabel.Text = "Space:";
//
// widthLabel
//
this.widthLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.widthLabel.Location = new System.Drawing.Point(171, 104);
this.widthLabel.Name = "widthLabel";
this.widthLabel.Size = new System.Drawing.Size(40, 16);
this.widthLabel.TabIndex = 27;
this.widthLabel.Text = "Width:";
//
// widthComboBox
//
this.widthComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.widthComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.widthComboBox.Location = new System.Drawing.Point(174, 121);
this.widthComboBox.Name = "widthComboBox";
this.widthComboBox.Size = new System.Drawing.Size(137, 21);
this.widthComboBox.TabIndex = 28;
//
// resourceNameComboBox
//
this.resourceNameComboBox.FormattingEnabled = true;
this.resourceNameComboBox.Location = new System.Drawing.Point(20, 24);
this.resourceNameComboBox.Name = "resourceNameComboBox";
this.resourceNameComboBox.Size = new System.Drawing.Size(291, 21);
this.resourceNameComboBox.TabIndex = 29;
//
// 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(173, 55);
this.closeButton.Name = "closeButton";
this.closeButton.Size = new System.Drawing.Size(137, 24);
this.closeButton.TabIndex = 30;
this.closeButton.Text = "Close Session";
this.closeButton.Click += new System.EventHandler(this.closeButton_Click);
//
// openButton
//
this.openButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.openButton.Location = new System.Drawing.Point(20, 55);
this.openButton.Name = "openButton";
this.openButton.Size = new System.Drawing.Size(137, 24);
this.openButton.TabIndex = 30;
this.openButton.Text = "Open Session";
this.openButton.Click += new System.EventHandler(this.openButton_Click);
//
// MainForm
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(327, 558);
this.Controls.Add(this.openButton);
this.Controls.Add(this.closeButton);
this.Controls.Add(this.resourceNameComboBox);
this.Controls.Add(this.widthComboBox);
this.Controls.Add(this.widthLabel);
this.Controls.Add(this.spaceLabel);
this.Controls.Add(this.spaceComboBox);
this.Controls.Add(this.clearButton);
this.Controls.Add(this.resultLabel);
this.Controls.Add(this.resultTextBox);
this.Controls.Add(this.inButton);
this.Controls.Add(this.moveInButton);
this.Controls.Add(this.numElementsLabel);
this.Controls.Add(this.offsetLabel);
this.Controls.Add(this.offsetNumericUpDown);
this.Controls.Add(this.resourceNameLabel);
this.Controls.Add(this.numElementsNumericUpDown);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.MinimumSize = new System.Drawing.Size(300, 440);
this.Name = "MainForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Register-Based Operations";
((System.ComponentModel.ISupportInitialize)(this.offsetNumericUpDown)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.numElementsNumericUpDown)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new MainForm());
}
private void openButton_Click(object sender, System.EventArgs e)
{
if(pxiSession != null)
{
pxiSession.Dispose();
}
try
{
using (var rmSession = new ResourceManager())
{
pxiSession = (PxiSession)rmSession.Open(resourceNameComboBox.Text);
SetupUI(true);
}
}
catch(Exception exp)
{
MessageBox.Show(exp.Message);
}
}
private void closeButton_Click(object sender, System.EventArgs e)
{
try
{
if(pxiSession != null)
{
pxiSession.Dispose();
SetupUI(false);
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void clearButton_Click(object sender, System.EventArgs e)
{
resultTextBox.Clear();
}
// Performs an "InXX" operation
private void inButton_Click(object sender, System.EventArgs e)
{
try
{
AddressSpace space = (AddressSpace)spaceComboBox.SelectedItem;
int offset = (int)offsetNumericUpDown.Value;
DataWidth width = (DataWidth)widthComboBox.SelectedItem;
switch (width)
{
case DataWidth.Width8:
resultTextBox.AppendText(GetOperationText("In8"));
byte data8 = pxiSession.In8(space, offset);
resultTextBox.AppendText(GetDataText(data8.ToString("x")));
break;
case DataWidth.Width16:
resultTextBox.AppendText(GetOperationText("In16"));
short data16 = pxiSession.In16(space, offset);
resultTextBox.AppendText(GetDataText(data16.ToString("x")));
break;
case DataWidth.Width32:
resultTextBox.AppendText(GetOperationText("In32"));
int data32 = pxiSession.In32(space, offset);
resultTextBox.AppendText(GetDataText(data32.ToString("x")));
break;
case DataWidth.Width64:
resultTextBox.AppendText(GetOperationText("In64"));
long data64 = pxiSession.In64(space, offset);
resultTextBox.AppendText(GetDataText(data64.ToString("x")));
break;
}
}
catch (Exception ex)
{
resultTextBox.AppendText(GetOperationText(ex.Message));
}
ScrollToBottomOfResultTextBox();
}
// Perform a "MoveInXX" operation.
private void moveInButton_Click(object sender, System.EventArgs e)
{
try
{
AddressSpace space = (AddressSpace)spaceComboBox.SelectedItem;
int offset = (int)offsetNumericUpDown.Value;
DataWidth width = (DataWidth)widthComboBox.SelectedItem;
int length = (int)numElementsNumericUpDown.Value;
switch (width)
{
case DataWidth.Width8:
resultTextBox.AppendText(GetOperationText("MoveIn8"));
byte[] data8 = pxiSession.MoveIn8(space, offset, length);
ShowArray(data8);
break;
case DataWidth.Width16:
resultTextBox.AppendText(GetOperationText("MoveIn16"));
short[] data16 = pxiSession.MoveIn16(space, offset, length);
ShowArray(data16);
break;
case DataWidth.Width32:
resultTextBox.AppendText(GetOperationText("MoveIn32"));
int[] data32 = pxiSession.MoveIn32(space, offset, length);
ShowArray(data32);
break;
case DataWidth.Width64:
resultTextBox.AppendText(GetOperationText("MoveIn64"));
long[] data64 = pxiSession.MoveIn64(space, offset, length);
ShowArray(data64);
break;
}
}
catch(Exception ex)
{
resultTextBox.AppendText(GetOperationText(ex.Message));
}
ScrollToBottomOfResultTextBox();
}
private void PopulateComboBoxes()
{
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 pxiResources = rmSession.Find("PXI?*INSTR");
foreach (var resource in pxiResources)
{
resourceNameComboBox.Items.Add(resource);
}
// Add PXI specific address spaces only
for (AddressSpace space = AddressSpace.PxiConfiguration; space <= AddressSpace.PxiBar5; ++space)
{
spaceComboBox.Items.Add(space);
}
spaceComboBox.SelectedIndex = 0;
foreach (DataWidth width in Enum.GetValues(typeof(DataWidth)))
{
widthComboBox.Items.Add(width);
}
widthComboBox.SelectedIndex = 0;
}
}
catch (Exception)
{
resourceNameComboBox.Items.Add("No PXI Resource found on the system");
resourceNameComboBox.Enabled = false;
openButton.Enabled = false;
}
resourceNameComboBox.SelectedIndex = 0;
}
private void SetupUI(bool sessionActive)
{
resourceNameComboBox.Enabled = !sessionActive;
openButton.Enabled = !sessionActive;
closeButton.Enabled = sessionActive;
moveInButton.Enabled = sessionActive;
inButton.Enabled = sessionActive;
spaceLabel.Enabled = sessionActive;
spaceComboBox.Enabled = sessionActive;
widthLabel.Enabled = sessionActive;
widthComboBox.Enabled = sessionActive;
offsetLabel.Enabled = sessionActive;
offsetNumericUpDown.Enabled = sessionActive;
numElementsLabel.Enabled = sessionActive;
numElementsNumericUpDown.Enabled = sessionActive;
}
private void ScrollToBottomOfResultTextBox()
{
resultTextBox.SelectAll();
}
private string GetOperationText(string operation)
{
return operation + Environment.NewLine;
}
private string GetDataText(string data)
{
return (string.Format("Data = {0}", data) + Environment.NewLine);
}
private void ShowArray(Array data)
{
int i=0;
foreach(object o in data)
{
string formattedValue = string.Empty;
if(o is byte)
{
formattedValue = ((byte)o).ToString("x");
}
else if(o is short)
{
formattedValue = ((short)o).ToString("x");
}
else if(o is int)
{
formattedValue = ((int)o).ToString("x");
}
else if (o is long)
{
formattedValue = ((long)o).ToString("x");
}
resultTextBox.AppendText(string.Format("Data({0} = {1})", i++, formattedValue) + Environment.NewLine);
}
}
private byte[] BuildByteOutputdata()
{
int numElements = (int)numElementsNumericUpDown.Value;
byte[] od = new byte[numElements];
for (int i = 0; i<numElements; i++)
{
od[i] = (byte)numOutputArray[i].Value;
}
return od;
}
private short[] BuildShortOutputdata()
{
int numElements = (int)numElementsNumericUpDown.Value;
short[] od = new short[numElements];
for (int i = 0; i<numElements; i++)
{
od[i] = (short)numOutputArray[i].Value;
}
return od;
}
private int[] BuildIntOutputdata()
{
int numElements = (int)numElementsNumericUpDown.Value;
int[] od = new int[numElements];
for (int i = 0; i<numElements; i++)
{
od[i] = (int)numOutputArray[i].Value;
}
return od;
}
}
}