Files
JoyD/Windows/CS/Framework4.0/Toprie/Toprie/A8SDK.cs
2026-01-05 16:23:46 +08:00

1172 lines
32 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
namespace JoyD.Windows.CS.Toprie
{
/// <summary>
/// A8SDK设备控制类用于与A8热成像设备进行通信和控制
/// </summary>
public class A8SDK
{
/// <summary>
/// 区域位置结构体,包含启用状态和位置坐标信息
/// </summary>
public struct AreaPos
{
/// <summary>
/// 启用状态0表示禁用1表示启用
/// </summary>
public int enable;
/// <summary>
/// 区域左上角X坐标
/// </summary>
public int x;
/// <summary>
/// 区域左上角Y坐标
/// </summary>
public int y;
/// <summary>
/// 区域宽度
/// </summary>
public int width;
/// <summary>
/// 区域高度
/// </summary>
public int height;
}
/// <summary>
/// 点位置结构体,用于定义测量点的位置
/// </summary>
public struct SpotPos
{
/// <summary>
/// 启用状态0表示禁用1表示启用
/// </summary>
public int enable;
/// <summary>
/// 点的X坐标
/// </summary>
public int x;
/// <summary>
/// 点的Y坐标
/// </summary>
public int y;
}
/// <summary>
/// 线位置结构体,用于定义测量线的起始和结束位置
/// </summary>
public struct LinePos
{
/// <summary>
/// 启用状态0表示禁用1表示启用
/// </summary>
public int enable;
/// <summary>
/// 起始点X坐标
/// </summary>
public int sta_x;
/// <summary>
/// 起始点Y坐标
/// </summary>
public int sta_y;
/// <summary>
/// 结束点X坐标
/// </summary>
public int end_x;
/// <summary>
/// 结束点Y坐标
/// </summary>
public int end_y;
}
/// <summary>
/// 图像位置结构体,包含所有测量区域、点和线的位置信息
/// </summary>
public struct ImagePos
{
/// <summary>
/// 区域位置数组最多支持6个区域
/// </summary>
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public AreaPos[] area;
/// <summary>
/// 点位置数组最多支持6个点
/// </summary>
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public SpotPos[] spot;
/// <summary>
/// 线位置
/// </summary>
public LinePos line;
}
/// <summary>
/// 区域温度结构体,包含区域的温度统计数据
/// </summary>
public struct AreaTemp
{
/// <summary>
/// 启用状态0表示禁用1表示启用
/// </summary>
public int enable;
/// <summary>
/// 最高温度值
/// </summary>
public int max_temp;
/// <summary>
/// 最高温度点的X坐标
/// </summary>
public int max_temp_x;
/// <summary>
/// 最高温度点的Y坐标
/// </summary>
public int max_temp_y;
/// <summary>
/// 最低温度值
/// </summary>
public int min_temp;
/// <summary>
/// 最低温度点的X坐标
/// </summary>
public int min_temp_x;
/// <summary>
/// 最低温度点的Y坐标
/// </summary>
public int min_temp_y;
/// <summary>
/// 平均温度值
/// </summary>
public int ave_temp;
}
/// <summary>
/// 点温度结构体,包含单个测量点的温度信息
/// </summary>
public struct SpotTemp
{
/// <summary>
/// 启用状态0表示禁用1表示启用
/// </summary>
public int enable;
/// <summary>
/// 温度值
/// </summary>
public int temp;
}
/// <summary>
/// 线温度结构体,包含测量线的温度统计数据
/// </summary>
public struct LineTemp
{
/// <summary>
/// 启用状态0表示禁用1表示启用
/// </summary>
public int enable;
/// <summary>
/// 最高温度值
/// </summary>
public int max_temp;
/// <summary>
/// 最高温度点的X坐标
/// </summary>
public int max_temp_x;
/// <summary>
/// 最高温度点的Y坐标
/// </summary>
public int max_temp_y;
/// <summary>
/// 最低温度值
/// </summary>
public int min_temp;
/// <summary>
/// 最低温度点的X坐标
/// </summary>
public int min_temp_x;
/// <summary>
/// 最低温度点的Y坐标
/// </summary>
public int min_temp_y;
/// <summary>
/// 平均温度值
/// </summary>
public int ave_temp;
}
/// <summary>
/// 全局温度结构体,包含整个图像的温度统计数据
/// </summary>
public struct GlobaTemp
{
/// <summary>
/// 最高温度值
/// </summary>
public int max_temp;
/// <summary>
/// 最高温度点的X坐标
/// </summary>
public int max_temp_x;
/// <summary>
/// 最高温度点的Y坐标
/// </summary>
public int max_temp_y;
/// <summary>
/// 最低温度值
/// </summary>
public int min_temp;
/// <summary>
/// 最低温度点的X坐标
/// </summary>
public int min_temp_x;
/// <summary>
/// 最低温度点的Y坐标
/// </summary>
public int min_temp_y;
}
/// <summary>
/// 图像温度结构体,包含所有温度测量数据
/// </summary>
public struct ImageTemp
{
/// <summary>
/// 区域温度数组最多支持6个区域
/// </summary>
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public AreaTemp[] area;
/// <summary>
/// 点温度数组最多支持6个点
/// </summary>
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public SpotTemp[] spot;
/// <summary>
/// 线温度
/// </summary>
public LineTemp line;
/// <summary>
/// 全局温度
/// </summary>
public GlobaTemp globa;
}
/// <summary>
/// 邮件服务器配置结构体
/// </summary>
public struct EmailServer
{
/// <summary>
/// 启用状态0表示禁用1表示启用
/// </summary>
public int enable;
/// <summary>
/// 收件人邮箱地址
/// </summary>
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public char[] recv_addr;
/// <summary>
/// 发件人邮箱地址
/// </summary>
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public char[] send_addr;
/// <summary>
/// 发件人邮箱密码
/// </summary>
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public char[] send_pwd;
}
/// <summary>
/// TFTP服务器配置结构体
/// </summary>
public struct TftpServer
{
/// <summary>
/// 启用状态0表示禁用1表示启用
/// </summary>
public int enable;
/// <summary>
/// TFTP服务器地址
/// </summary>
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public char[] tftp_addr;
}
/// <summary>
/// 网络以太网配置结构体
/// </summary>
public struct NetworkEth
{
/// <summary>
/// 启用状态0表示禁用1表示启用
/// </summary>
public int enable;
/// <summary>
/// 静态IP地址
/// </summary>
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public char[] static_ip;
/// <summary>
/// 子网掩码
/// </summary>
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public char[] netmask;
/// <summary>
/// 默认网关
/// </summary>
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public char[] gateway;
/// <summary>
/// 主DNS服务器地址
/// </summary>
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public char[] dns1;
/// <summary>
/// 备DNS服务器地址
/// </summary>
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public char[] dns2;
}
/// <summary>
/// 环境参数结构体,用于温度补偿计算
/// </summary>
public struct EnvirParam
{
/// <summary>
/// 计算方法
/// </summary>
public int method;
/// <summary>
/// 参数编号
/// </summary>
public int num;
/// <summary>
/// 发射率
/// </summary>
public float emissivity;
/// <summary>
/// 环境温度
/// </summary>
public float airTemp;
/// <summary>
/// 目标温度
/// </summary>
public float targetTemp;
/// <summary>
/// 大气透过率
/// </summary>
public float atmosTrans;
/// <summary>
/// 测量距离
/// </summary>
public float distance;
/// <summary>
/// 红外温度
/// </summary>
public float infraredTemp;
/// <summary>
/// 红外辐射率
/// </summary>
public float infraredRadia;
}
/// <summary>
/// 报警参数结构体,用于配置报警功能
/// </summary>
public struct AlarmParam
{
/// <summary>
/// 报警方法
/// </summary>
public int method;
/// <summary>
/// 参数编号
/// </summary>
public int num;
/// <summary>
/// 激活状态
/// </summary>
public int active;
/// <summary>
/// 报警条件
/// </summary>
public int condition;
/// <summary>
/// 截图功能
/// </summary>
public int captrue;
/// <summary>
/// 禁用校准
/// </summary>
public int disableCalib;
/// <summary>
/// 邮件报警
/// </summary>
public int email;
/// <summary>
/// 数字输出
/// </summary>
public int digital;
/// <summary>
/// FTP上传
/// </summary>
public int ftp;
/// <summary>
/// 报警阈值
/// </summary>
public float threshold;
/// <summary>
/// 滞后值
/// </summary>
public float hysteresis;
/// <summary>
/// 阈值时间
/// </summary>
public int thresholeTime;
}
/// <summary>
/// 焦距参数结构体,用于自动对焦功能
/// </summary>
public struct FocusParam
{
/// <summary>
/// 对焦方法
/// </summary>
public int method;
/// <summary>
/// 对焦区域X坐标
/// </summary>
public int x;
/// <summary>
/// 对焦区域Y坐标
/// </summary>
public int y;
/// <summary>
/// 对焦区域宽度
/// </summary>
public int width;
/// <summary>
/// 对焦区域高度
/// </summary>
public int height;
}
/// <summary>
/// 时间参数结构体,用于设备时间设置
/// </summary>
public struct TimeParam
{
/// <summary>
/// 年份
/// </summary>
public int year;
/// <summary>
/// 月份
/// </summary>
public char month;
/// <summary>
/// 日期
/// </summary>
public char day;
/// <summary>
/// 小时
/// </summary>
public char hour;
/// <summary>
/// 分钟
/// </summary>
public char minute;
/// <summary>
/// 秒
/// </summary>
public char second;
}
private readonly string deviceIp;
private readonly V8 v8Instance;
/// <summary>
/// 初始化A8SDK实例
/// </summary>
/// <param name="ip">设备IP地址</param>
public A8SDK(string ip)
{
deviceIp = ip;
v8Instance = new V8(ip);
}
/// <summary>
/// 析构函数,释放资源
/// </summary>
~A8SDK()
{
}
/// <summary>
/// 初始化SDK
/// </summary>
/// <returns>初始化结果0表示成功</returns>
public static int SDK_initialize()
{
return V8.SDK_initialize();
}
/// <summary>
/// 销毁SDK
/// </summary>
/// <returns>销毁结果0表示成功</returns>
public static int SDK_destroy()
{
return V8.SDK_destroy();
}
/// <summary>
/// 搜索设备
/// </summary>
/// <param name="list_len">最大搜索设备数量</param>
/// <returns>搜索结果字符串设备IP地址以分号分隔</returns>
public static String SDK_serch_device(int list_len)
{
return V8.SDK_serch_device(list_len);
}
/// <summary>
/// 执行快门校正
/// </summary>
public void Shutter_correction()
{
v8Instance.Shutter_correction();
}
/// <summary>
/// 获取或设置快门次数
/// </summary>
public int Shutter_times
{
get
{
return v8Instance.Shutter_times;
}
set
{
v8Instance.Shutter_times = value;
}
}
/// <summary>
/// 获取或设置色板模式
/// </summary>
public int Color_plate
{
get
{
return GetColorPlate();
}
set
{
SetColorPlate(value);
}
}
/// <summary>
/// 获取当前色彩模式
/// </summary>
/// <returns>当前色彩模式的值</returns>
public int GetColorPlate()
{
return v8Instance.GetColorPlate();
}
/// <summary>
/// 设置色彩模式
/// </summary>
/// <param name="value">要设置的色彩模式值</param>
/// <returns>设置是否成功</returns>
public bool SetColorPlate(int value)
{
return v8Instance.SetColorPlate(value);
}
/// <summary>
/// 获取或设置镜像模式
/// </summary>
public int Mirror_mode
{
get
{
return v8Instance.Mirror_mode;
}
set
{
v8Instance.Mirror_mode = value;
}
}
/// <summary>
/// 获取或设置视频模式
/// </summary>
public int Video_mode
{
get
{
return v8Instance.Video_mode;
}
set
{
v8Instance.Video_mode = value;
}
}
/// <summary>
/// 设置区域位置
/// </summary>
/// <param name="index">区域索引</param>
/// <param name="area_data">区域位置数据</param>
public void Set_area_pos(int index, SharedStructures.AreaPos area_data)
{
v8Instance.Set_area_pos(index, area_data);
}
/// <summary>
/// 获取区域位置
/// </summary>
/// <param name="index">区域索引</param>
/// <returns>区域位置数据</returns>
public SharedStructures.AreaPos Get_area_pos(int index)
{
return v8Instance.Get_area_pos(index);
}
/// <summary>
/// 设置点位置
/// </summary>
/// <param name="index">点索引</param>
/// <param name="spot_data">点位置数据</param>
public void Set_spot_pos(int index, SharedStructures.SpotPos spot_data)
{
v8Instance.Set_spot_pos(index, spot_data);
}
/// <summary>
/// 获取点位置
/// </summary>
/// <param name="index">点索引</param>
/// <returns>点位置数据</returns>
public SharedStructures.SpotPos Get_spot_pos(int index)
{
return v8Instance.Get_spot_pos(index);
}
/// <summary>
/// 获取或设置线位置
/// </summary>
public SharedStructures.LinePos Line_pos
{
set
{
v8Instance.Line_pos = value;
}
get
{
return v8Instance.Line_pos;
}
}
/// <summary>
/// 获取所有位置信息
/// </summary>
public SharedStructures.ImagePos All_pos
{
get
{
return v8Instance.All_pos;
}
}
/// <summary>
/// 获取或设置温度范围
/// </summary>
public int Temp_range
{
set
{
v8Instance.Temp_range = value;
}
get
{
return v8Instance.Temp_range;
}
}
/// <summary>
/// 获取或设置视频ISP X偏移
/// </summary>
public int Video_isp_x_offset
{
set
{
v8Instance.Video_isp_x_offset = value;
}
get
{
return v8Instance.Video_isp_x_offset;
}
}
/// <summary>
/// 获取或设置视频ISP Y偏移
/// </summary>
public int Video_isp_y_offset
{
set
{
v8Instance.Video_isp_y_offset = value;
}
get
{
return v8Instance.Video_isp_y_offset;
}
}
/// <summary>
/// 获取或设置视频ISP X缩放
/// </summary>
public int Video_isp_x_scale
{
set
{
v8Instance.Video_isp_x_scale = value;
}
get
{
return v8Instance.Video_isp_x_scale;
}
}
/// <summary>
/// 获取或设置视频ISP Y缩放
/// </summary>
public int Video_isp_y_scale
{
set
{
v8Instance.Video_isp_y_scale = value;
}
get
{
return v8Instance.Video_isp_y_scale;
}
}
/// <summary>
/// 获取或设置LED设置
/// </summary>
public int Set_led
{
set
{
v8Instance.Set_led = value;
}
get
{
return v8Instance.Set_led;
}
}
/// <summary>
/// 获取或设置邮件服务器配置
/// </summary>
public SharedStructures.EmailServer Email_server
{
set
{
v8Instance.Email_server = value;
}
get
{
return v8Instance.Email_server;
}
}
/// <summary>
/// 获取或设置TFTP服务器配置
/// </summary>
public SharedStructures.TftpServer Tftp_server
{
set
{
v8Instance.Tftp_server = value;
}
get
{
return v8Instance.Tftp_server;
}
}
/// <summary>
/// 获取或设置网络以太网配置
/// </summary>
public SharedStructures.NetworkEth Network_eth
{
set
{
v8Instance.Network_eth = value;
}
get
{
return v8Instance.Network_eth;
}
}
/// <summary>
/// 获取或设置融合距离
/// </summary>
public int Fusion_distance
{
set
{
v8Instance.Fusion_distance = value;
}
get
{
return v8Instance.Fusion_distance;
}
}
/// <summary>
/// 设置环境参数
/// </summary>
/// <param name="data">环境参数数据</param>
public void Set_envir_param(SharedStructures.EnvirParam data)
{
v8Instance.Set_envir_param(data);
}
/// <summary>
/// 获取区域环境参数
/// </summary>
/// <param name="index">区域索引</param>
/// <returns>环境参数数据</returns>
public SharedStructures.EnvirParam Get_area_envir_param(int index)
{
return v8Instance.Get_area_envir_param(index);
}
/// <summary>
/// 获取点环境参数
/// </summary>
/// <param name="index">点索引</param>
/// <returns>环境参数数据</returns>
public SharedStructures.EnvirParam Get_spot_envir_param(int index)
{
return v8Instance.Get_spot_envir_param(index);
}
/// <summary>
/// 获取线环境参数
/// </summary>
/// <returns>环境参数数据</returns>
public SharedStructures.EnvirParam Get_line_envir_param()
{
return v8Instance.Get_line_envir_param();
}
/// <summary>
/// 获取全局环境参数
/// </summary>
/// <returns>环境参数数据</returns>
public SharedStructures.EnvirParam Get_globa_envir_param()
{
return v8Instance.Get_globa_envir_param();
}
/// <summary>
/// 设置报警参数
/// </summary>
/// <param name="data">报警参数数据</param>
public void Set_alarm_param(SharedStructures.AlarmParam data)
{
v8Instance.Set_alarm_param(data);
}
/// <summary>
/// 获取区域报警参数
/// </summary>
/// <param name="index">区域索引</param>
/// <returns>报警参数数据</returns>
public SharedStructures.AlarmParam Get_area_alarm_param(int index)
{
return v8Instance.Get_area_alarm_param(index);
}
/// <summary>
/// 获取点报警参数
/// </summary>
/// <param name="index">点索引</param>
/// <returns>报警参数数据</returns>
public SharedStructures.AlarmParam Get_spot_alarm_param(int index)
{
return v8Instance.Get_spot_alarm_param(index);
}
/// <summary>
/// 获取全局报警参数
/// </summary>
/// <returns>报警参数数据</returns>
public SharedStructures.AlarmParam Get_globa_alarm_param()
{
return v8Instance.Get_globa_alarm_param();
}
/// <summary>
/// 获取线报警参数
/// </summary>
/// <returns>报警参数数据</returns>
public SharedStructures.AlarmParam Get_line_alarm_param()
{
return v8Instance.Get_line_alarm_param();
}
/// <summary>
/// 获取区域温度
/// </summary>
/// <param name="index">区域索引</param>
/// <returns>区域温度数据</returns>
public SharedStructures.AreaTemp Get_area_temp(int index)
{
return v8Instance.Get_area_temp(index);
}
/// <summary>
/// 获取点温度
/// </summary>
/// <param name="index">点索引</param>
/// <returns>点温度数据</returns>
public SharedStructures.SpotTemp Get_spot_temp(int index)
{
return v8Instance.Get_spot_temp(index);
}
/// <summary>
/// 获取线温度
/// </summary>
/// <returns>线温度数据</returns>
public SharedStructures.LineTemp Get_line_temp()
{
return v8Instance.Get_line_temp();
}
/// <summary>
/// 获取全局温度
/// </summary>
/// <returns>全局温度数据</returns>
public SharedStructures.GlobaTemp Get_globa_temp()
{
return v8Instance.Get_globa_temp();
}
/// <summary>
/// 获取所有温度数据
/// </summary>
/// <returns>图像温度数据</returns>
public SharedStructures.ImageTemp Get_all_temp()
{
return v8Instance.Get_all_temp();
}
/// <summary>
/// 设备电源重启
/// </summary>
public void Power_reboot()
{
v8Instance.Power_reboot();
}
/// <summary>
/// 参数恢复
/// </summary>
public void Param_recover()
{
v8Instance.Param_recover();
}
/// <summary>
/// 更新设备配置
/// </summary>
public void Update()
{
v8Instance.Update();
}
/// <summary>
/// 心跳检测
/// </summary>
/// <returns>心跳状态1表示正常</returns>
public int Heartbeat()
{
return v8Instance.Heartbeat();
}
/// <summary>
/// 设置串口参数
/// </summary>
/// <param name="nSpeed">波特率</param>
/// <param name="nBits">数据位</param>
/// <param name="nEvent">校验位</param>
/// <param name="nStop">停止位</param>
public void Set_uart(int nSpeed, int nBits, char nEvent, int nStop)
{
v8Instance.Set_uart(nSpeed, nBits, nEvent, nStop);
}
/// <summary>
/// 发送串口命令
/// </summary>
/// <param name="cmd">命令字节数组</param>
public void Send_uart_command(byte[] cmd)
{
v8Instance.Send_uart_command(cmd);
}
/// <summary>
/// 自动对焦
/// </summary>
/// <param name="data">焦距参数</param>
public void Autofocus(SharedStructures.FocusParam data)
{
v8Instance.Autofocus(data);
}
/// <summary>
/// 设置设备名称
/// </summary>
/// <param name="data">设备名称字符串</param>
public void Set_device_name(string data)
{
v8Instance.Set_device_name(data);
}
/// <summary>
/// 获取设备名称
/// </summary>
/// <returns>设备名称字符串</returns>
public string Get_device_name()
{
return v8Instance.Get_device_name();
}
/// <summary>
/// 获取检测数量
/// </summary>
/// <returns>检测数量字节数组</returns>
public byte[] Get_detect_number()
{
return v8Instance.Get_detect_number();
}
/// <summary>
/// 获取或设置温度帧
/// </summary>
public char Temp_frame
{
set
{
v8Instance.Temp_frame = value;
}
get
{
return v8Instance.Temp_frame;
}
}
/// <summary>
/// 获取或设置报警状态
/// </summary>
public char Alarm
{
set
{
v8Instance.Alarm = value;
}
get
{
return v8Instance.Alarm;
}
}
/// <summary>
/// 获取补偿温度
/// </summary>
public float Comp_temp
{
get
{
return v8Instance.Comp_temp;
}
}
/// <summary>
/// 设置设备时间
/// </summary>
/// <param name="data">时间参数</param>
public void Set_time(SharedStructures.TimeParam data)
{
v8Instance.Set_time(data);
}
/// <summary>
/// 获取视频模式
/// </summary>
/// <returns>视频模式值</returns>
public int GetVideoMode()
{
return v8Instance.GetVideoMode();
}
/// <summary>
/// 设置视频模式
/// </summary>
/// <param name="mode">视频模式值</param>
public void SetVideoMode(int mode)
{
v8Instance.SetVideoMode(mode);
}
/// <summary>
/// 获取图像数据
/// </summary>
/// <returns>图像数据字节数组</returns>
public byte[] GetImageData()
{
return v8Instance.GetImageData();
}
/// <summary>
/// 搜索可用设备
/// </summary>
/// <returns>设备IP地址列表</returns>
public static List<string> SearchDevices()
{
List<string> devices = new List<string>();
const int maxDevices = 10;
string searchResult = SDK_serch_device(maxDevices);
if (!string.IsNullOrEmpty(searchResult))
{
string[] deviceList = searchResult.Split(';');
foreach (string device in deviceList)
{
if (!string.IsNullOrEmpty(device))
{
devices.Add(device);
}
}
}
return devices;
}
}
}