Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        private ECLib.ErrorCode loadTechnique()
        {
            // This function is special: we have to manually marshal the parameters structure,
            // because C# doesn't know how to correctly do it through automatic marshalling.
            // See ECLib.EccParams definition in ECLib.cs .
            string file = "";
            string tech = technique_combo.SelectedItem.ToString();

            ECLib.ErrorCode err        = ECLib.ErrorCode.ERR_NOERROR;
            ECLib.EccParams parameters = default(ECLib.EccParams);

            switch (tech)
            {
            case "OCV":                 err = setOCVParams(ref parameters, ref file); break;

            case "ChronoPotentiometry": err = setCPParams(ref parameters, ref file); break;

            case "ChronoAmperometry":   err = setCAParams(ref parameters, ref file); break;

            default: break;
            }

            // call LoadTechnique with the parameters that has been allocated through manual marshalling
            if (selected_channel != 0xff &&
                parameters.len != 0 &&
                file.Length != 0 &&
                err == ECLib.ErrorCode.ERR_NOERROR)
            {
                err = ECLib.BL_LoadTechnique(conn_id, selected_channel, file, parameters, true, true, show_params.Checked);
            }
            else
            {
                MessageBox.Show("Error setting a parameter: " + err.ToString());
            }

            // need to free the allocated memory
            if (parameters.pparams != null)
            {
                Marshal.FreeHGlobal(parameters.pparams);
            }

            return(err);
        }
Beispiel #4
0
        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);
        }