联系人: 销售经理
手机: 150 0072 7503(微信同号)
邮箱: klaus@jnewtech.com
地址: 上海市杨浦区波阳路16号波阳创业园23幢A座207
光谱仪采集C#样例
- Hightlight:
- C, C++, JAVA, Python通用
- USB通讯
- 文档完善
- 思路清晰
邮件咨询与报价
klaus@jnewtech.com
- 产品介绍
本Demo基于 Visual Studio 2019 开发,c#开发, 如果您使用Visual studio 2015,需要自行修改适当的配置, 如果您使用VS2019以上版本,无需修改
需要技术支持,可加微信 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");
}
}
}
- 上一篇: 没有了!
- 下一篇: 没有了!