using System; using System.IO; using System.Linq; using System.Text; using System.Windows.Forms; using NationalInstruments.VisaNS; // Add Reference for National Instrument Common and Nation Instrument VisaNS namespace Example6_Send2MDOarb { public partial class Form1 : Form { private MessageBasedSession mbSession; // Instrument VISA address string resourceString = "USB0::0x0699::0x0408::C011373::INSTR"; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { // example waveform: sine wave using 8 sample points, floating points between -1.00 to // 1.00 (range of AFG). float[] FArray = { 0.78f, 0.00f, -0.78f, 0.00f, 0.78f, 0.00f, -0.78f, 0.00f }; // pre-processing // encode float 'FArray' into binary waveform data for AFG. This is // the same as AWG5000B but marker bits are ignored. see AWG5000B series // programmer manual for bit definitions. byte[] Str2Byt = FArray.SelectMany(value => BitConverter.GetBytes(value)).ToArray(); string EnCdStr = System.Text.Encoding.UTF7.GetString(Str2Byt); // build binary block header int bytes = EnCdStr.Length; string header = "#" + Convert.ToString(Convert.ToString(bytes).Length) + Convert.ToString(bytes); // Send BINary waveform to MDO AFG SendBINary(header, EnCdStr); // Send ASCii waveform to MDO AFG SendASCii(FArray); } private void SendBINary(string header, string EnCdStr) { // Open connection to instrument mbSession = (MessageBasedSession)ResourceManager.GetLocalManager().Open(resourceString); // Write commands as stated in programmers manual mbSession.Write("*rst"); mbSession.Write("*cls"); mbSession.Write("AFG:ARBitrary:EMEM:POINTS:ENCdg BINary"); mbSession.Write("AFG:ARBitrary:EMEM:POINTS:BYTEORDer LSB"); mbSession.Write("AFG:ARBitrary:EMEM:POINTS " + header + EnCdStr); mbSession.Write("AFG:FUNCtion ARBitrary"); mbSession.Write("AFG:OUTPut:STATE 1"); // Close instrument connection mbSession.Dispose(); } private void SendASCii(float[] FArray) { // Make CSV from floating point array string CSV = string.Join(",", FArray); // Open connection to instrument mbSession = (MessageBasedSession)ResourceManager.GetLocalManager().Open(resourceString); // Write commands as stated in programmers manual mbSession.Write("*rst"); mbSession.Write("*cls"); mbSession.Write("AFG:ARBitrary:EMEM:POINTS:ENCdg ASCii"); mbSession.Write("AFG:ARBitrary:EMEM:POINTS " + CSV); mbSession.Write("AFG:FUNCtion ARBitrary"); mbSession.Write("AFG:OUTPut:STATE 1"); // Close instrument connection mbSession.Dispose(); } } }