using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;
///I-8024W version 0.2.0.7, 2011/07/05
///I-8024W version 0.2.0.8, 2011/07/19
///just update the version
namespace pac8024WNet
{
public class pac8024W
{
private class ICPDAS
{
// for I/O version management
[DllImport("pac_i8024W.dll", EntryPoint = "pac_i8024W_GetLibVersion")]
public static extern Int16 pac_i8024W_GetLibVersion();
// for I/O version management
[DllImport("pac_i8024W.dll", EntryPoint = "pac_i8024W_GetLibDate")]
public static extern void pac_i8024W_GetLibDate(byte[] libDate);
// for I/O version management
[DllImport("pac_i8024W.dll", EntryPoint = "pac_i8024W_Initial")]
public static extern Int16 pac_i8024W_Initial(Int16 slot);
//iData: -32768 ~ +32767
// for I/O version management
[DllImport("pac_i8024W.dll", EntryPoint = "pac_i8024W_VoltageOut")]
public static extern void pac_i8024W_VoltageOut(Int16 slot, Int16 ch, float fData);
//fData: -10.0 ~ +10.0
[DllImport("pac_i8024W.dll", EntryPoint = "pac_i8024W_VoltageOut_Hex")]
public static extern void pac_i8024W_VoltageOut_Hex(Int16 slot, Int16 ch, Int16 hData);
[DllImport("pac_i8024W.dll", EntryPoint = "pac_i8024W_CurrentOut")]
public static extern void pac_i8024W_CurrentOut(Int16 slot, Int16 ch, float fData);
//fData: 0.0 ~ +20.0
[DllImport("pac_i8024W.dll", EntryPoint = "pac_i8024W_CurrentOut_Hex")]
public static extern void pac_i8024W_CurrentOut_Hex(Int16 slot, Int16 ch, Int16 hData);
//Voltage output readback (software readback)
[DllImport("pac_i8024W.dll", EntryPoint = "pac_i8024W_VoltageOut_Readback")]
public static extern float pac_i8024W_VoltageOut_Readback(int slot,int ch);
//fData: -10.0 ~ +10.0
[DllImport("pac_i8024W.dll", EntryPoint = "pac_i8024W_VoltageOut_Hex_Readback")]
public static extern int pac_i8024W_VoltageOut_Hex_Readback(int slot,int ch);
//iData: -32768 ~ +32767
[DllImport("pac_i8024W.dll", EntryPoint = "pac_i8024W_CurrentOut_Readback")]
public static extern float pac_i8024W_CurrentOut_Readback(int slot,int ch);
//fData: 0.0 ~ +20.0
[DllImport("pac_i8024W.dll", EntryPoint = "pac_i8024W_CurrentOut_Hex_Readback")]
public static extern int pac_i8024W_CurrentOut_Hex_Readback(int slot, int ch);
//iData: 0 ~ +32767
//iData: 0 ~ +32767
}
///
/// Get the library version of this DLL (pac_i8024W.dll)
///
/// library version
public static Int16 LibVersion()
{
return ICPDAS.pac_i8024W_GetLibVersion();
}
//
/// Get the building date of this DLL (pac_i8024W.dll)
///
/// library building date
public static string LibDate()
{
byte[] libDate= new byte[32] ;
ICPDAS.pac_i8024W_GetLibDate(libDate);
return AscArr2Str(libDate);
}
///
/// Initialize the I-8024W in the specified slot
///
/// 1 ~ 7 (the slot which I-8024W is inserted)
/// no error, return 0
public static Int16 Init(Int16 slot)
{
return ICPDAS.pac_i8024W_Initial(slot);
}
///
/// Output the voltage of hex format to the specified channel.
///
/// 1 ~ 7 (the slot which I-8024W is inserted)
/// 0 ~ 7 (to where the output goes)
/// the output value in hex format, -32768 ~ +32767
public static void VoltageOut_Hex(Int16 slot, Int16 ch, Int16 hData)
{
ICPDAS.pac_i8024W_VoltageOut_Hex(slot, ch,hData);
}
///
/// Output the voltage of floating-point format to the specified channel.
///
/// 1 ~ 7 (the slot which I-8024W is inserted)
/// 0 ~ 7 (to where the output goes)
/// the output value in floating-point format, -10.0 ~ +10.0 V
public static void VoltageOut(Int16 slot, Int16 ch, float fData)
{
ICPDAS.pac_i8024W_VoltageOut(slot, ch, fData);
}
///
/// Output the current of floating-point format to the specified channel.
///
/// 1 ~ 7 (the slot which I-8024W is inserted)
/// 0 ~ 7 (to where the output goes)
/// the output value in floating-point format, 0.0 ~ +20.0 mA
public static void CurrentOut(Int16 slot, Int16 ch, float fData)
{
ICPDAS.pac_i8024W_CurrentOut(slot, ch, fData);
}
///
/// Output the current of hex format to the specified channel.
///
/// 1 ~ 7 (the slot which I-8024W is inserted)
/// 0 ~ 7 (to where the output goes)
/// the output value in hex format, 0 ~ +32767
public static void CurrentOut_Hex(Int16 slot, Int16 ch, Int16 hData)
{
ICPDAS.pac_i8024W_CurrentOut_Hex(slot, ch, hData);
}
///
/// Read voltage in floating-point format from the specified channel.
/// Note: the value is not read from the hardware of I-8024W, but memory.
/// Close the program makes reading fail.
///
/// 1 ~ 7 (the slot which I-8024W is inserted)
/// 0 ~ 7 (to where the output goes)
/// the voltage in floating-point format read from the specified channel
public static float VoltageOut_Readback(Int16 slot, Int16 ch)
{
return ICPDAS.pac_i8024W_VoltageOut_Readback(slot, ch);
}
///
/// Read current in floating-point format from the specified channel.
/// Note: the value is not read from the hardware of I-8024W, but memory.
/// Close the program makes reading fail.
///
/// 1 ~ 7 (the slot which I-8024W is inserted)
/// 0 ~ 7 (to where the output goes)
/// the current in floating-point format read from the specified channel
public static float CurrentOut_Readback(Int16 slot, Int16 ch)
{
return ICPDAS.pac_i8024W_CurrentOut_Readback(slot, ch);
}
///
/// Read voltage in hex format from the specified channel.
/// Note: the value is not read from the hardware of I-8024W, but memory.
/// Close the program makes reading fail.
///
/// 1 ~ 7 (the slot which I-8024W is inserted)
/// 0 ~ 7 (to where the output goes)
/// the voltage in hex format read from the specified channel
public static Int16 VoltageOut_Hex_Readback(Int16 slot, Int16 ch)
{
return (Int16)ICPDAS.pac_i8024W_VoltageOut_Hex_Readback(slot, ch);
}
///
/// Read current in hex format from the specified channel.
/// Note: the value is not read from the hardware of I-8024W, but memory.
/// Close the program makes reading fail.
///
/// 1 ~ 7 (the slot which I-8024W is inserted)
/// 0 ~ 7 (to where the output goes)
/// the current in hex format read from the specified channel
public static Int16 CurrentOut_Hex_Readback(Int16 slot, Int16 ch)
{
return (Int16)ICPDAS.pac_i8024W_CurrentOut_Hex_Readback(slot, ch);
}
private static string AscArr2Str(byte[] b)
{
return System.Text.UnicodeEncoding.Unicode.GetString(
System.Text.ASCIIEncoding.Convert(System.Text.Encoding.ASCII,
System.Text.Encoding.Unicode, b), 0, b.Length);
}
public static string Arr2Str(byte[] buffer)
{
return (new UnicodeEncoding()).GetString(buffer, 0, buffer.Length);
}
}
}