Init commit
This commit is contained in:
@@ -0,0 +1,222 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using NationalInstruments.Visa;
|
||||
using Ivi.Visa;
|
||||
using System.Runtime.InteropServices;
|
||||
using Testrong.Core.Primitives.TestrongSystem.Obsolete;
|
||||
using System.Threading;
|
||||
using System.Linq;
|
||||
|
||||
namespace Testrong.User.Program
|
||||
{
|
||||
public class NiVisaComms
|
||||
{
|
||||
public enum Dmm3458AMeasureMode
|
||||
{
|
||||
VOLT,
|
||||
CURR,
|
||||
RES,
|
||||
INIT,
|
||||
STBY
|
||||
}
|
||||
|
||||
|
||||
private ResourceManager rm;
|
||||
private MessageBasedSession mbs;
|
||||
public string exceptionTrace;
|
||||
private bool connected;
|
||||
private bool isSetup;
|
||||
private Dmm3458AMeasureMode currentMode;
|
||||
public NiVisaComms()
|
||||
{
|
||||
exceptionTrace = string.Empty;
|
||||
connected = false;
|
||||
isSetup = false;
|
||||
currentMode = Dmm3458AMeasureMode.STBY;
|
||||
}
|
||||
public bool Init(string deviceAddress)
|
||||
{
|
||||
ResourceOpenStatus deviceStatus;
|
||||
try
|
||||
{
|
||||
rm = new ResourceManager();
|
||||
mbs = (MessageBasedSession)rm.Open(deviceAddress, AccessModes.None, 1000, out deviceStatus);
|
||||
mbs.TerminationCharacterEnabled = true;
|
||||
currentMode = Dmm3458AMeasureMode.INIT;
|
||||
if (deviceStatus == ResourceOpenStatus.Success)
|
||||
{
|
||||
mbs.FormattedIO.WriteLine("ID?");
|
||||
string deviceID = mbs.FormattedIO.ReadLine();
|
||||
if (deviceID.IndexOf("3458A") < 0)
|
||||
{
|
||||
connected = false;
|
||||
return false;
|
||||
}
|
||||
connected = true;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
connected = false;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
exceptionTrace = ex.StackTrace;
|
||||
connected = false;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
public bool Setup(Dmm3458AMeasureMode mode, double range = -1, double nplc = 0.04)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!connected || currentMode == Dmm3458AMeasureMode.STBY)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (currentMode == Dmm3458AMeasureMode.INIT || currentMode != mode)
|
||||
{
|
||||
string measComm;
|
||||
string nplcSet = $"NPLC {nplc:F2}";
|
||||
switch (mode)
|
||||
{
|
||||
case Dmm3458AMeasureMode.VOLT:
|
||||
{
|
||||
measComm = $"DCV,{range:F2}";
|
||||
break;
|
||||
}
|
||||
case Dmm3458AMeasureMode.CURR:
|
||||
{
|
||||
measComm = $"DCI,{range:F2}";
|
||||
break;
|
||||
}
|
||||
case Dmm3458AMeasureMode.RES:
|
||||
{
|
||||
measComm = $"OHM,{range:F2}";
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
mbs.FormattedIO.WriteLine("PRESET NORM");
|
||||
mbs.FormattedIO.WriteLine("DISP OFF");
|
||||
mbs.FormattedIO.WriteLine("BEEP OFF");
|
||||
mbs.FormattedIO.WriteLine("TARM AUTO");
|
||||
mbs.FormattedIO.WriteLine("TRIG HOLD");
|
||||
mbs.FormattedIO.WriteLine("NRDGS 1,AUTO");
|
||||
mbs.FormattedIO.WriteLine("MFORMAT DREAL");
|
||||
mbs.FormattedIO.WriteLine("OFORMAT DREAL");
|
||||
mbs.FormattedIO.WriteLine("MEM FIFO");
|
||||
//mbs.FormattedIO.WriteLine("NPLC 0.04");
|
||||
mbs.FormattedIO.WriteLine(nplcSet);
|
||||
mbs.FormattedIO.WriteLine(measComm);
|
||||
mbs.FormattedIO.WriteLine("AZERO OFF");
|
||||
mbs.FormattedIO.WriteLine("ARANGE OFF");
|
||||
mbs.FormattedIO.WriteLine("END ALWAYS");
|
||||
}
|
||||
isSetup = true;
|
||||
return true;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
exceptionTrace = e.StackTrace;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
public bool TriggerSingleMeasure()
|
||||
{
|
||||
try
|
||||
{
|
||||
mbs.FormattedIO.WriteLine("TRIG SGL");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
exceptionTrace = e.StackTrace;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
public double SingleRead()
|
||||
{
|
||||
try
|
||||
{
|
||||
byte[] readOut = mbs.RawIO.Read(8);
|
||||
Array.Reverse(readOut);
|
||||
double value = BitConverter.ToDouble(readOut, 0);
|
||||
//double value = mbs.FormattedIO.ReadDouble();
|
||||
return value;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
exceptionTrace = e.StackTrace;
|
||||
return double.MinValue;
|
||||
}
|
||||
}
|
||||
public double[] MultiRead(int count)
|
||||
{
|
||||
try
|
||||
{
|
||||
double[] ans = new double[count];
|
||||
mbs.FormattedIO.WriteLine("MCOUNT?");
|
||||
int mCount = int.Parse(mbs.FormattedIO.ReadLine());
|
||||
if (mCount < count)
|
||||
{
|
||||
count = mCount;
|
||||
}
|
||||
TimeSpan readDelay = new TimeSpan(20000); // 1ms
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//ans[i] = mbs.FormattedIO.ReadDouble();
|
||||
byte[] readOut = mbs.RawIO.Read(8);
|
||||
while (readOut.Length < 8)
|
||||
{
|
||||
int readLength = 8 - readOut.Length;
|
||||
byte[] nextRead = mbs.RawIO.Read(readLength);
|
||||
readOut = readOut.Concat(nextRead).ToArray();
|
||||
}
|
||||
Array.Reverse(readOut);
|
||||
ans[i] = BitConverter.ToDouble(readOut, 0);
|
||||
//Thread.Sleep(1);
|
||||
}
|
||||
return ans;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
exceptionTrace = e.StackTrace;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
public bool ClearReadingMemory()
|
||||
{
|
||||
try
|
||||
{
|
||||
mbs.FormattedIO.WriteLine("TRIG HOLD");
|
||||
mbs.FormattedIO.WriteLine("MEM FIFO");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
exceptionTrace = e.StackTrace;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
public bool ResetInstrument()
|
||||
{
|
||||
try
|
||||
{
|
||||
mbs.FormattedIO.WriteLine("RESET");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
exceptionTrace = e.StackTrace;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user