using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.IO; using System.Runtime.InteropServices; using System.Drawing; using System.Text; using System.Windows.Forms; using pac8014WNet; namespace pac_i8014W_Utility { public partial class Form1 : Form { [System.Runtime.InteropServices.DllImport("coredll.dll")] private static extern UInt32 GetTickCount(); [System.Runtime.InteropServices.DllImport("coredll.dll")] private static extern uint GetModuleFileName(IntPtr hModule, System.Text.StringBuilder lpFileName, int nSize); private string GetAppPath() { string csCurDir = ""; System.Text.StringBuilder sb = new System.Text.StringBuilder(256); if (GetModuleFileName(IntPtr.Zero, sb, sb.Capacity) > 0) csCurDir = sb.ToString(); else return string.Empty; int iStart = 0; while (!csCurDir.EndsWith(@"\")) { iStart = csCurDir.Length - 1; csCurDir = csCurDir.Remove(iStart, 1); } return csCurDir; } private static Int16 slotIndex = 0, jumper = 0, maxCh = 8; Int16[] chArr = new Int16[16]; Int16[] gainArr = new Int16[16]; string[] SingleEndedStr = new string[2]; UInt32 T1, T2; Int16[] hArr; float[] fArr; UInt32 cnt = 1000; int fmt = 0; public Form1() { InitializeComponent(); SingleEndedStr[0] = "Differential"; SingleEndedStr[1] = "Single Ended"; } private void cboSlot_SelectedIndexChanged(object sender, EventArgs e) { int ret = -1; Int16 firmware, isofirm, libVer; UInt16 gainValue = 0; Int16 offsetValue = 0; ret = pac8014W.Init((Int16)cboSlot.SelectedIndex); if (ret == 0) { slotIndex = (Int16)cboSlot.SelectedIndex; libVer = pac8014W.LibVersion(); lbVer.Text = libVer.ToString("X"); gainValue = 0; offsetValue = 0; firmware = pac8014W.FirmwareVer_L1(slotIndex);// pac8014W.FirmwareVer_L1(slotIndex); lbFirm1.Text = firmware.ToString(); isofirm = pac8014W.FirmwareVer_L2(slotIndex); lbFirm2.Text = isofirm.ToString(); gainValue = 0; offsetValue = 0; jumper = pac8014W.SingleEndJumper(slotIndex); lbJumper.Text = SingleEndedStr[jumper]; if (jumper == 0) maxCh = 8; else maxCh = 16; gainValue = 0; offsetValue = 0; pac8014W.ReadGainOffset(slotIndex, 0, ref gainValue, ref offsetValue); lbGain0.Text = gainValue.ToString(); lbOffset0.Text = offsetValue.ToString(); gainValue = 0; offsetValue = 0; pac8014W.ReadGainOffset(slotIndex, 1, ref gainValue, ref offsetValue); lbGain1.Text = gainValue.ToString(); lbOffset1.Text = offsetValue.ToString(); gainValue = 0; offsetValue = 0; pac8014W.ReadGainOffset(slotIndex, 2, ref gainValue, ref offsetValue); lbGain2.Text = gainValue.ToString(); lbOffset2.Text = offsetValue.ToString(); gainValue = 0; offsetValue = 0; pac8014W.ReadGainOffset(slotIndex, 3, ref gainValue, ref offsetValue); lbGain3.Text = gainValue.ToString(); lbOffset3.Text = offsetValue.ToString(); gainValue = 0; offsetValue = 0; pac8014W.ReadGainOffset(slotIndex, 4, ref gainValue, ref offsetValue); lbGain4.Text = gainValue.ToString(); lbOffset4.Text = offsetValue.ToString(); } else { MessageBox.Show("I-8014W is not at slot " + cboSlot.SelectedIndex.ToString()); } } private void btnRefresh_Click(object sender, EventArgs e) { Int16 firmware, isofirm, libVer; Label[] lbGain = { lbGain0, lbGain1, lbGain2, lbGain3, lbGain4 }; Label[] lbOff = { lbOffset0, lbOffset1, lbOffset2, lbOffset3, lbOffset4 }; bool err = false; UInt16 gainValue = 0; Int16 offsetValue = 0; UInt16[] gainArray = new UInt16[5]; Int16[] offsetArray = new Int16[5]; slotIndex = (Int16)cboSlot.SelectedIndex; libVer = pac8014W.LibVersion(); lbVer.Text = libVer.ToString("X"); gainValue = 0; offsetValue = 0; firmware = pac8014W.FirmwareVer_L1(slotIndex);// pac8014W.FirmwareVer_L1(slotIndex); lbFirm1.Text = firmware.ToString(); isofirm = pac8014W.FirmwareVer_L2(slotIndex); lbFirm2.Text = isofirm.ToString(); gainValue = 0; offsetValue = 0; jumper = pac8014W.SingleEndJumper(slotIndex); lbJumper.Text = SingleEndedStr[jumper]; for (int g = 0; g < 5; g++) { gainValue = 0; offsetValue = 0; pac8014W.ReadGainOffset(slotIndex, (Int16)g, ref gainValue, ref offsetValue); lbGain[g].Text = gainValue.ToString(); lbOff[g].Text = offsetValue.ToString(); } } private void btnSaveInfo_Click(object sender, EventArgs e) { string fPath = GetAppPath() + "\\Slot" + slotIndex.ToString() + "_8014W_Info.txt"; string data = string.Empty; StreamWriter Dsw = new StreamWriter(fPath, false, System.Text.Encoding.Default); Dsw.WriteLine("Library Version ={0}", lbVer.Text); Dsw.WriteLine("Primary FPGA Version ={0}", lbFirm1.Text); Dsw.WriteLine("Secondary FPGA Version ={0}", lbFirm1.Text); Dsw.WriteLine("Single-Ended//Differential Jumper ={0}", lbJumper.Text); Dsw.WriteLine("+//-10V Gain={0}, Offset={1}", lbGain0.Text, lbOffset0.Text); Dsw.WriteLine("+//-5V Gain={0}, Offset={1}", lbGain1.Text, lbOffset1.Text); Dsw.WriteLine("+//-2.5V Gain={0}, Offset={1}", lbGain2.Text, lbOffset2.Text); Dsw.WriteLine("+//-1.25V Gain={0}, Offset={1}", lbGain3.Text, lbOffset3.Text); Dsw.WriteLine("+//-20mA Gain={0}, Offset={1}", lbGain4.Text, lbOffset4.Text); Dsw.Flush(); Dsw.Close(); } private void btnSaveAI_Click(object sender, EventArgs e) { UInt32 i; TextBox[] txtAI = { txtAI0, txtAI1, txtAI2, txtAI3, txtAI4, txtAI5, txtAI6, txtAI7, txtAI8, txtAI9, txtAI10, txtAI11, txtAI12, txtAI13, txtAI14, txtAI15 }; TextBox[] txtMax = { txtMax0, txtMax1, txtMax2, txtMax3, txtMax4, txtMax5, txtMax6, txtMax7, txtMax8, txtMax9, txtMax10, txtMax11, txtMax12, txtMax13, txtMax14, txtMax15 }; TextBox[] txtMin = { txtMin0, txtMin1, txtMin2, txtMin3, txtMin4, txtMin5, txtMin6, txtMin7, txtMin8, txtMin9, txtMin10, txtMin11, txtMin12, txtMin13, txtMin14, txtMin15 }; TextBox[] txtDelta = { txtDelta0, txtDelta1, txtDelta2, txtDelta3, txtDelta4, txtDelta5, txtDelta6, txtDelta7, txtDelta8, txtDelta9, txtDelta10, txtDelta11, txtDelta12, txtDelta13, txtDelta14, txtDelta15 }; string fPath = GetAppPath() + "\\SampleData.csv"; string data = string.Empty; string tStr = String.Format("{0:00}_{1:00}_{2:00}_{3:00}_{4:00}", DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second); if (fmt == 0) fPath = GetAppPath() + "\\SampleData_Hex_" + tStr + ".csv"; else fPath = GetAppPath() + "\\SampleData_Float_" + tStr + ".csv"; StreamWriter Dsw = new StreamWriter(fPath, false, System.Text.Encoding.Default); Dsw.WriteLine("Data," + cnt.ToString() +",Time," + txtTime.Text +"ms"); Dsw.WriteLine("CH,Data0,Max,Min,Delta"); for (Int16 ch = 0; ch < maxCh; ch++) { if(fmt ==0) Dsw.WriteLine("{0},{1},{2},{3},{4}", ch, txtAI[ch].Text, txtMax[ch].Text, txtMin[ch].Text, txtDelta[ch].Text); else Dsw.WriteLine("{0},{1},{2},{3},{4}", ch, txtAI[ch].Text, txtMax[ch].Text, txtMin[ch].Text, txtDelta[ch].Text); } UInt32 u =(UInt32)( cnt / maxCh); cnt = (UInt32)(u * maxCh); if (jumper == 0) { Dsw.WriteLine("AI List,CH:0,CH:1,CH:2,CH:3,CH:4,CH:5,CH:6,CH:7"); for (i = 0; i < cnt; i += (UInt32)maxCh) { if (fmt == 0) Dsw.WriteLine("{0},{1:X4},{2:X4},{3:X4},{4:X4},{5:X4},{6:X4},{7:X4},{8:X4}", i, hArr[i], hArr[i + 1], hArr[i + 2], hArr[i + 3], hArr[i + 4], hArr[i + 5], hArr[i + 6], hArr[i + 7]); else Dsw.WriteLine("{0},{1:00.0000},{2:00.0000},{3:00.0000},{4:00.0000},{5:00.0000},{6:00.0000},{7:00.0000},{8:00.0000}", i, fArr[i], fArr[i + 1], fArr[i + 2], fArr[i + 3], fArr[i + 4], fArr[i + 5], fArr[i + 6], fArr[i + 7]); } } else { Dsw.WriteLine("AI List,CH:0,CH:1,CH:2,CH:3,CH:4,CH:5,CH:6,CH:7,CH:8,CH:9,CH:10,CH:11,CH:12,CH:13,CH:14,CH:15"); for (i = 0; i < cnt; i += (UInt32)maxCh) { if (fmt == 0) Dsw.WriteLine("{0},{1:X4},{2:X4},{3:X4},{4:X4},{5:X4},{6:X4},{7:X4},{8:X4},{9:X4},{10:X4},{11:X4},{12:X4},{13:X4},{14:X4},{15:X4},{16:X4}", i, hArr[i], hArr[i + 1], hArr[i + 2], hArr[i + 3], hArr[i + 4], hArr[i + 5], hArr[i + 6], hArr[i + 7], hArr[i+8], hArr[i + 9], hArr[i + 10], hArr[i + 11], hArr[i + 12], hArr[i + 13], hArr[i + 14], hArr[i + 15]); else Dsw.WriteLine("{0},{1:00.0000},{2:00.0000},{3:00.0000},{4:00.0000},{5:00.0000},{6:00.0000},{7:00.0000},{8:00.0000},{9:00.0000},{10:00.0000},{11:00.0000},{12:00.0000},{13:00.0000},{14:00.0000},{15:00.0000},{16:00.0000}", i, fArr[i], fArr[i + 1], fArr[i + 2], fArr[i + 3], fArr[i + 4], fArr[i + 5], fArr[i + 6], fArr[i + 7], fArr[i+8], fArr[i + 9], fArr[i + 10], fArr[i + 11], fArr[i + 12], fArr[i + 13], fArr[i + 14], fArr[i + 15]); } } Dsw.Flush(); Dsw.Close(); } private void btnStart_Click(object sender, EventArgs e) { TextBox[] txtAI = { txtAI0, txtAI1, txtAI2, txtAI3, txtAI4, txtAI5, txtAI6, txtAI7, txtAI8, txtAI9, txtAI10, txtAI11, txtAI12, txtAI13, txtAI14, txtAI15 }; TextBox[] txtMax = { txtMax0, txtMax1, txtMax2, txtMax3, txtMax4, txtMax5, txtMax6, txtMax7, txtMax8, txtMax9, txtMax10, txtMax11, txtMax12, txtMax13, txtMax14, txtMax15 }; TextBox[] txtMin = { txtMin0, txtMin1, txtMin2, txtMin3, txtMin4, txtMin5, txtMin6, txtMin7, txtMin8, txtMin9, txtMin10, txtMin11, txtMin12, txtMin13, txtMin14, txtMin15 }; TextBox[] txtDelta = { txtDelta0, txtDelta1, txtDelta2, txtDelta3, txtDelta4, txtDelta5, txtDelta6, txtDelta7, txtDelta8, txtDelta9, txtDelta10, txtDelta11, txtDelta12, txtDelta13, txtDelta14, txtDelta15 }; int i; float fVal = 0; Int16 hVal = 0; txtTime.Text = "0"; cnt = Convert.ToUInt32(txtCnt.Text); fmt = cboFormat.SelectedIndex; Int16 gain =(Int16) cboType0.SelectedIndex; if (fmt == 0) { hArr = new Int16[cnt]; T1 = GetTickCount(); for (i = 0; i < cnt; i++) { pac8014W.ReadAIHex(slotIndex,(Int16)( i % maxCh), gain, ref hVal); hArr[i] = hVal; } T2 = GetTickCount() - T1; } else { fArr = new float[cnt]; T1 = GetTickCount(); for ( i = 0; i < cnt; i++) { pac8014W.ReadAI(slotIndex, (Int16)(i % maxCh), gain, ref fVal); fArr[i] = fVal; } T2 = GetTickCount() - T1; } Int16[] hMax = new Int16[maxCh]; Int16[] hMin = new Int16[maxCh]; float[] fMax = new float[maxCh]; float[] fMin = new float[maxCh]; for (i = 0; i < cnt; i++) { if (fmt == 0) { if (i < maxCh) { hMax[i % maxCh] = hArr[i]; hMin[i % maxCh] = hArr[i]; } else { if (hArr[i] > hMax[i % maxCh]) hMax[i % maxCh] = hArr[i]; if (hArr[i] < hMin[i % maxCh]) hMin[i % maxCh] = hArr[i]; } } else { if (i < maxCh) { fMax[i % maxCh] = fArr[i]; fMin[i % maxCh] = fArr[i]; } else { if (fArr[i] > fMax[i % maxCh]) fMax[i % maxCh] = fArr[i]; if (fArr[i] < fMin[i % maxCh]) fMin[i % maxCh] = fArr[i]; } } } for (Int16 ch = 0; ch < maxCh; ch++) { if (fmt == 0) { txtAI[ch].Text = hArr[ch].ToString("X"); txtMax[ch].Text = hMax[ch].ToString("X"); txtMin[ch].Text = hMin[ch].ToString("X"); txtDelta[ch].Text =(Convert.ToInt16(txtMax[ch].Text,16)- Convert.ToInt16(txtMin[ch].Text ,16)).ToString(); } else { txtAI[ch].Text = fArr[ch].ToString("00.0000"); txtMax[ch].Text = fMax[ch].ToString("00.0000"); txtMin[ch].Text = fMin[ch].ToString("00.0000"); txtDelta[ch].Text = (Convert.ToSingle(txtMax[ch].Text) - Convert.ToSingle(txtMin[ch].Text)).ToString("00.0000"); } } txtTime.Text = T2.ToString(); // MessageBox.Show("I-8014W Sample "+ cnt.ToString() + " data takes " + T2.ToString() +" ms " ); } private void cboType0_SelectedIndexChanged(object sender, EventArgs e) { } } }