WIN32-C#语言二次开发

光谱仪采集C#样例

Hightlight:
C, C++, JAVA, Python通用
USB通讯
文档完善
思路清晰

邮件咨询与报价

klaus@jnewtech.com

电话/微信 咨询报价:150 0072 7503(微信同号)

  • 产品介绍

本Demo基于 Visual Studio 2019 开发,c#开发, 如果您使用Visual studio 2015,需要自行修改适当的配置, 如果您使用VS2019以上版本,无需修改


点击此处下载Demo


需要技术支持,可加微信 13801997980 (微信同号)王工


这个demo只是展示,如果使用C#调用dll, 更多库函数需要自己引申出来,这里不再举例


更多用法,请参照C语言demo, 关于 透射率,吸光度,拉曼等二次开发


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;





using System.Runtime.InteropServices;



using System.Diagnostics;



namespace ConsoleApplication1

{

    public class libSpectrometerHelper

    {

        const int MAX_DEVICE_COUNT = 16;

        int last_err = 0;


        int[] probe_device_list = new int[MAX_DEVICE_COUNT];

        List<long> specified_device_list = new List<long>(MAX_DEVICE_COUNT);


        [DllImport("libspectrometer.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]

        public extern static int libspectrometer_open_spectrometer(int index, ref int error_code);


        [DllImport("libspectrometer.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]

        public extern static int libspectrometer_set_trigger_mode(int index, ref int error_code, int v);


        [DllImport("libspectrometer.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]

        public extern static int libspectrometer_close_spectrometer(long index, ref int error_code);


        [DllImport("libspectrometer.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]

        public extern static void libspectrometer_set_integration_time_microsec(int index, ref int error_code, long integration_time_micros);



        [DllImport("libspectrometer.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]

        public extern static int libspectrometer_get_serial_number(int index, ref int error_code, ref byte buffer, int buffer_length);


        [DllImport("libspectrometer.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]

        public extern static int libspectrometer_get_model(int index, ref int errorCode, ref byte buffer, int buffer_length);



        [DllImport("libspectrometer.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]

        public extern static int libspectrometer_get_wavelengths(int index, ref int error_code, ref double wavelengths, int length);



        [DllImport("libspectrometer.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]

        public extern static void  libspectrometer_set_average(int index, ref int error_code, int length);




        [DllImport("libspectrometer.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]

        public extern static int libspectrometer_get_raw_spectrum(int index, ref int error_code, ref double buffer, int buffer_length);



      

   


        public libSpectrometerHelper()

        {

            Trace.Write("LOG: libPsectrometerHelper ");

            byte[] str = new byte[100];

            libspectrometer_get_serial_number(0, ref last_err, ref str[0], 100);

        }


        public void setTriggerMode(int Index, int v)

        {

            last_err = 0;


            libspectrometer_set_trigger_mode(Index, ref last_err, v);

        }


        public void setAverage(int Index, int v)

        {

            libspectrometer_set_average(Index, ref last_err, v);

        }


        public string getFirmwareVersion(int Index)

        {

            Trace.Write("LOG: getFirmwareVersion");


            return "";

        }


        public string convertToString(byte[] str)

        {


            string ret = "";

            for (int i = 0; i < 100; i++)

            {

                if (str[i] != 0)

                {

                    ret = ret + (char)str[i];

                }

            }


            return ret;

        }



        public string getName(int Index)

        {

            Trace.Write("LOG: getName ");

            byte[] str = new byte[100];

            libspectrometer_get_model(Index, ref last_err, ref str[0], 100);


            string s = convertToString(str);



            return s;


        }

        public string getSerialNumber(int Index)

        {

            Trace.Write("LOG: getSerialNumber ");

            byte[] str = new byte[100];

            libspectrometer_get_serial_number(Index, ref last_err, ref str[0], 100);



            string s = convertToString(str);


            return s;


        }

        public double[] getWavelengths(int Index)

        {

            Trace.Write("LOG: getWavelengths ");


            double[] tmp = new double[4096];

            int count = libspectrometer_get_wavelengths(Index, ref last_err, ref tmp[0], 4096);


            int val = 0;

            for (int i = 0; i < 4096; i++)

            {

                if (tmp[i] != 0)

                    val++;

            }


            double[] wavelengths = new double[val];

            for (int i = 0; i < val; i++)

            {

                wavelengths[i] = tmp[i];

            }


            return wavelengths;

        }

        public double[] getSpectrum(int Index)

        {

            Trace.Write("LOG: getSpectrum ");

            //char[] spec = new char[2048];

            //libspectrometer_get_unformatted_spectrum(0, ref last_err, ref spec[0], 2048);

            double[] tmp = new double[4096];

            int count = libspectrometer_get_raw_spectrum(Index, ref last_err, ref tmp[0], 4096);


            int val = count;



            double[] intensity = new double[val];

            for (int i = 0; i < val; i++)

            {

                intensity[i] = tmp[i];

            }



            return intensity;

        }


        public long getMaxIntegrationTime(int Index)

        {

            long time = 65535 * 1000;


            Trace.Write("LOG: getIntegrationTime ");

            return time;

        }


        public void setIntegrationTime(int Index, long IntegrationTime)

        {

            Trace.Write("LOG: setIntegrationTime ");


            libspectrometer_set_integration_time_microsec(Index, ref last_err, (int)IntegrationTime);


        }

      

        

        //DLL文件提供的底层方法,第二个参数是微秒,而我们程序用毫秒,故此处乘以1000

 

        public int openAllSpectrometers()

        {

            Trace.Write("LOG: openAllSpectrometers");

            int count = 0;


            int ret1 = libspectrometer_open_spectrometer(0, ref last_err);


            if (ret1 == 1)

                count++;



            return count;


        }



        public void closeAllSpectrometers()

        {

            Trace.Write("LOG: closeAllSpectrometers");

            libspectrometer_close_spectrometer(0, ref last_err);

        }


        public void Dispose()

        {

            libspectrometer_close_spectrometer(0, ref last_err);

            Trace.Write("LOG: Dispose");


        }


      

    }

}


相关标签:
  • 上一篇: 没有了!
  • 下一篇: 没有了!
相关产品
在线客服
联系方式

热线电话

150 0072 7503(微信同号)

上班时间

Monday to Saturday

公司电话

二维码
线