private ECLib.ErrorCode setCPParams(ref ECLib.EccParams parameters, ref string file) { ECLib.ErrorCode err = ECLib.ErrorCode.ERR_NOERROR; int structsize = Marshal.SizeOf(typeof(ECLib.EccParam)); // size of a parameter file = ECLib.is_vmp4(infos.DeviceCode) ? "cp4.ecc" : "cp.ecc"; // allocate N parameters in memory for the unmanaged call. parameters.len = 16; parameters.pparams = Marshal.AllocHGlobal(parameters.len * structsize); ECLib.BL_DefineSglParameter("Current_step", 0.002f, 0, parameters.pparams + structsize * 0); // {I0 (A)} ECLib.BL_DefineBoolParameter("vs_initial", false, 0, parameters.pparams + structsize * 1); // {vs. init} ECLib.BL_DefineSglParameter("Duration_step", 0.1f, 0, parameters.pparams + structsize * 2); //{Step duration (s)} //{Step #1} ECLib.BL_DefineSglParameter("Current_step", -0.001f, 1, parameters.pparams + structsize * 3); // {I1 (A)} ECLib.BL_DefineBoolParameter("vs_initial", false, 1, parameters.pparams + structsize * 4); // {scan to E1 s. init} ECLib.BL_DefineSglParameter("Duration_step", 0.2f, 1, parameters.pparams + structsize * 5); // {Step duration (s) //{Step #2} ECLib.BL_DefineSglParameter("Current_step", 0.004f, 2, parameters.pparams + structsize * 6); // {I2 (A)} ECLib.BL_DefineBoolParameter("vs_initial", false, 2, parameters.pparams + structsize * 7); // {vs. init} ECLib.BL_DefineSglParameter("Duration_step", 0.1f, 2, parameters.pparams + structsize * 8); // {Step duration (s)} //{others} ECLib.BL_DefineIntParameter("Step_number", 2, 0, parameters.pparams + structsize * 9); // {step number} ECLib.BL_DefineIntParameter("N_Cycles", 0, 0, parameters.pparams + structsize * 10); // {cycle Nc time} ECLib.BL_DefineSglParameter("Record_every_dE", 0.1f, 0, parameters.pparams + structsize * 11); // {record every dE (V)} ECLib.BL_DefineSglParameter("Record_every_dT", 0.01f, 0, parameters.pparams + structsize * 12); // {or every dT (s)} ECLib.BL_DefineIntParameter("I_Range", (int)ECLib.IntensityRange.KBIO_IRANGE_10mA, 0, parameters.pparams + structsize * 13); // {I Range} ECLib.BL_DefineIntParameter("E_Range", (int)ECLib.VoltageRange.KBIO_ERANGE_AUTO, 0, parameters.pparams + structsize * 14); //{E Range} ECLib.BL_DefineIntParameter("Bandwidth", (int)ECLib.Bandwidth.KBIO_BW_5, 0, parameters.pparams + structsize * 15); //{bandwidth} return(err); }
private ECLib.ErrorCode setCAParams(ref ECLib.EccParams parameters, ref string file) { ECLib.ErrorCode err = ECLib.ErrorCode.ERR_NOERROR; int structsize = Marshal.SizeOf(typeof(ECLib.EccParam)); // size of a parameter file = ECLib.is_vmp4(infos.DeviceCode) ? "ca4.ecc" : "ca.ecc"; // allocate parameters in memory for the unmanaged call. parameters.len = 16; parameters.pparams = Marshal.AllocHGlobal(parameters.len * structsize); err |= ECLib.BL_DefineSglParameter("Voltage_step", 1.5f, 0, parameters.pparams + structsize * 0); // E0 (V) err |= ECLib.BL_DefineBoolParameter("vs_initial", false, 0, parameters.pparams + structsize * 1); // vs. init err |= ECLib.BL_DefineSglParameter("Duration_step", 0.1f, 0, parameters.pparams + structsize * 2); // Step duration (s) // Step #1 err |= ECLib.BL_DefineSglParameter("Voltage_step", -1.0f, 1, parameters.pparams + structsize * 3); // E1 (V) err |= ECLib.BL_DefineBoolParameter("vs_initial", false, 1, parameters.pparams + structsize * 4); // scan to E1 s. init err |= ECLib.BL_DefineSglParameter("Duration_step", 0.2f, 1, parameters.pparams + structsize * 5); // Step duration (s) // Step #2 err |= ECLib.BL_DefineSglParameter("Voltage_step", 2.0f, 2, parameters.pparams + structsize * 6); // E2 (V) err |= ECLib.BL_DefineBoolParameter("vs_initial", false, 2, parameters.pparams + structsize * 7); // vs. init err |= ECLib.BL_DefineSglParameter("Duration_step", 0.1f, 2, parameters.pparams + structsize * 8); // Step duration (s) // others err |= ECLib.BL_DefineIntParameter("Step_number", 2, 0, parameters.pparams + structsize * 9); // step number err |= ECLib.BL_DefineIntParameter("N_Cycles", 0, 0, parameters.pparams + structsize * 10); // cycle Nc time err |= ECLib.BL_DefineSglParameter("Record_every_dI", 0.1f, 0, parameters.pparams + structsize * 11); // record every dI (A) err |= ECLib.BL_DefineSglParameter("Record_every_dT", 0.01f, 0, parameters.pparams + structsize * 12); // or every dT (s) err |= ECLib.BL_DefineIntParameter("I_Range", (int)ECLib.IntensityRange.KBIO_IRANGE_AUTO, 0, parameters.pparams + structsize * 13); // I Range err |= ECLib.BL_DefineIntParameter("E_Range", (int)ECLib.VoltageRange.KBIO_ERANGE_AUTO, 0, parameters.pparams + structsize * 14); // E Range err |= ECLib.BL_DefineIntParameter("Bandwidth", (int)ECLib.Bandwidth.KBIO_BW_5, 0, parameters.pparams + structsize * 15); // bandwidth return(err); }
private string[] parseChronoData(ECLibData data, int idx) { bool vmp4 = ECLib.is_vmp4(infos.DeviceCode); int base_offset = idx * data.Infos.NbCols; string[] row = new string[0]; int t_high = data.Buf[base_offset + 0]; int t_low = data.Buf[base_offset + 1]; int ewe = data.Buf[base_offset + 2]; int I = data.Buf[base_offset + 3]; int cycle = data.Buf[base_offset + 4]; long t_64 = (((long)t_high) << 32) + t_low; double time = data.Infos.StartTime + data.Curr.TimeBase * t_64; float f_ewe = 0.0f, f_I = 0.0f; if (ECLib.BL_ConvertNumericIntoSingle(ewe, ref f_ewe) == ECLib.ErrorCode.ERR_NOERROR && ECLib.BL_ConvertNumericIntoSingle(I, ref f_I) == ECLib.ErrorCode.ERR_NOERROR) { row = new string[4]; row[0] = time.ToString("F6"); row[1] = f_ewe.ToString("F6"); row[2] = f_I.ToString("F6"); row[3] = cycle.ToString(); } return(row); }
private string[] parseOcvData(ECLibData data, int idx) { bool vmp4 = ECLib.is_vmp4(infos.DeviceCode); int base_offset = idx * data.Infos.NbCols; string[] row = vmp4 ? new string[2] : new string[3]; int t_high = data.Buf[base_offset + 0]; int t_low = data.Buf[base_offset + 1]; int ewe = data.Buf[base_offset + 2]; long t_64 = (((long)t_high) << 32) + t_low; double time = data.Infos.StartTime + data.Curr.TimeBase * t_64; float f_ewe = 0.0f; if (ECLib.BL_ConvertNumericIntoSingle(ewe, ref f_ewe) == ECLib.ErrorCode.ERR_NOERROR) { row[0] = time.ToString("F6"); row[1] = f_ewe.ToString("F6"); if (!vmp4) { // VMP3 sends an additional row of data int ece = data.Buf[base_offset + 3]; float f_ece = 0.0f; if (ECLib.BL_ConvertNumericIntoSingle(ece, ref f_ece) == ECLib.ErrorCode.ERR_NOERROR) { row[2] = f_ece.ToString("F6"); } } } return(row); }
private void setupDataGrid() { bool vmp4 = ECLib.is_vmp4(infos.DeviceCode); data_grid.Rows.Clear(); data_grid.Columns.Clear(); switch (technique_combo.SelectedItem.ToString()) { case "OCV": data_grid.ColumnCount = (vmp4) ? 2 : 3; data_grid.Columns[0].Name = "Time"; data_grid.Columns[1].Name = "Ewe"; if (!vmp4) // one extra column for vmp3 devices { data_grid.Columns[2].Name = "Ece"; } break; default: data_grid.ColumnCount = 4; data_grid.Columns[0].Name = "Time"; data_grid.Columns[1].Name = "Ewe"; data_grid.Columns[2].Name = "I"; data_grid.Columns[3].Name = "cycle"; break; } }
private ECLib.ErrorCode setOCVParams(ref ECLib.EccParams parameters, ref string file) { ECLib.ErrorCode err = ECLib.ErrorCode.ERR_NOERROR; int structsize = Marshal.SizeOf(typeof(ECLib.EccParam)); // size of a parameter file = ECLib.is_vmp4(infos.DeviceCode) ? "ocv4.ecc" : "ocv.ecc"; // allocate N (=4 for OCV) parameters in memory for the unmanaged call. parameters.len = 4; parameters.pparams = Marshal.AllocHGlobal(parameters.len * structsize); // BL_Define[sgl,bool,int]Parameter all take a pointer to a memory space equivalent to a ECLib.EccParam structure err = ECLib.BL_DefineSglParameter("Rest_time_T", 3.0f, 0, parameters.pparams + 0 * structsize); err = ECLib.BL_DefineSglParameter("Record_every_dE", 0.1f, 0, parameters.pparams + 1 * structsize); err = ECLib.BL_DefineSglParameter("Record_every_dT", 0.01f, 0, parameters.pparams + 2 * structsize); err = ECLib.BL_DefineIntParameter("E_Range", (int)ECLib.VoltageRange.KBIO_ERANGE_AUTO, 0, parameters.pparams + 3 * structsize); return(err); }