添加注释

This commit is contained in:
zqm
2026-01-05 16:23:46 +08:00
parent c781cda6de
commit 9ee598cc49
10 changed files with 1370 additions and 112 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -10,6 +10,9 @@ using System.Threading.Tasks;
namespace JoyD.Windows.CS.Toprie
{
/// <summary>
/// 相机控件类,用于显示和处理相机图像
/// </summary>
public partial class Camera : UserControl
{
// 测温区配置类
@@ -487,6 +490,9 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 相机控件构造函数
/// </summary>
public Camera()
{
InitializeComponent();
@@ -3145,7 +3151,6 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// <summary>
/// imageBox双击事件处理方法
/// 双击后弹出检测配置窗口

View File

@@ -16,9 +16,21 @@ namespace JoyD.Windows.CS.Toprie
/// </summary>
public enum ConnectionStatus
{
/// <summary>
/// 未连接状态
/// </summary>
Disconnected,
/// <summary>
/// 正在连接状态
/// </summary>
Connecting,
/// <summary>
/// 已连接状态
/// </summary>
Connected,
/// <summary>
/// 正在重连状态
/// </summary>
Reconnecting
}
@@ -29,7 +41,13 @@ namespace JoyD.Windows.CS.Toprie
/// </summary>
public enum ImageMode
{
/// <summary>
/// 红外模式
/// </summary>
Infrared, // 红外模式
/// <summary>
/// 自然模式
/// </summary>
Natural // 自然模式
}
@@ -39,13 +57,37 @@ namespace JoyD.Windows.CS.Toprie
/// </summary>
public enum PaletteType
{
/// <summary>
/// 白热对应SDK参数0
/// </summary>
WhiteHot, // 白热对应SDK参数0
/// <summary>
/// 黑热对应SDK参数1
/// </summary>
BlackHot, // 黑热对应SDK参数1
/// <summary>
/// 铁红对应SDK参数2
/// </summary>
IronRed, // 铁红对应SDK参数2
/// <summary>
/// 熔岩对应SDK参数3
/// </summary>
Lava, // 熔岩对应SDK参数3
/// <summary>
/// 彩虹对应SDK参数4
/// </summary>
Rainbow, // 彩虹对应SDK参数4
/// <summary>
/// 铁灰对应SDK参数5
/// </summary>
IronGray, // 铁灰对应SDK参数5
/// <summary>
/// 红热对应SDK参数6
/// </summary>
RedHot, // 红热对应SDK参数6
/// <summary>
/// 彩虹2对应SDK参数7
/// </summary>
Rainbow2 // 彩虹2对应SDK参数7
}
@@ -55,12 +97,33 @@ namespace JoyD.Windows.CS.Toprie
/// </summary>
public enum VideoMode
{
/// <summary>
/// 红外对应SDK参数0
/// </summary>
Infrared, // 红外对应SDK参数0
/// <summary>
/// 可见光对应SDK参数1
/// </summary>
VisibleLight, // 可见光对应SDK参数1
/// <summary>
/// 融合1对应SDK参数2
/// </summary>
Fusion1, // 融合1对应SDK参数2
/// <summary>
/// 融合2对应SDK参数3
/// </summary>
Fusion2, // 融合2对应SDK参数3
/// <summary>
/// 融合3对应SDK参数4
/// </summary>
Fusion3, // 融合3对应SDK参数4
/// <summary>
/// 融合4对应SDK参数5
/// </summary>
Fusion4, // 融合4对应SDK参数5
/// <summary>
/// 融合5对应SDK参数6
/// </summary>
Fusion5 // 融合5对应SDK参数6
}
@@ -88,9 +151,20 @@ namespace JoyD.Windows.CS.Toprie
/// </summary>
public class ConnectionStatusChangedEventArgs : EventArgs
{
/// <summary>
/// 连接状态
/// </summary>
public ConnectionStatus Status { get; set; }
/// <summary>
/// 设备信息
/// </summary>
public string DeviceInfo { get; set; }
/// <summary>
/// 初始化连接状态改变事件参数
/// </summary>
/// <param name="status">连接状态</param>
/// <param name="deviceInfo">设备信息</param>
public ConnectionStatusChangedEventArgs(ConnectionStatus status, string deviceInfo = null)
{
Status = status;
@@ -104,9 +178,20 @@ namespace JoyD.Windows.CS.Toprie
/// </summary>
public class ImageReceivedEventArgs : EventArgs
{
/// <summary>
/// 图像数据
/// </summary>
public byte[] ImageData { get; set; }
/// <summary>
/// 图像模式
/// </summary>
public ImageMode Mode { get; set; }
/// <summary>
/// 初始化图像接收事件参数
/// </summary>
/// <param name="imageData">图像数据</param>
/// <param name="mode">图像模式</param>
public ImageReceivedEventArgs(byte[] imageData, ImageMode mode)
{
ImageData = imageData;
@@ -119,9 +204,20 @@ namespace JoyD.Windows.CS.Toprie
/// </summary>
public class ConnectionExceptionEventArgs : EventArgs
{
/// <summary>
/// 异常对象
/// </summary>
public Exception Exception { get; set; }
/// <summary>
/// 异常消息
/// </summary>
public string Message { get; set; }
/// <summary>
/// 初始化连接异常事件参数
/// </summary>
/// <param name="ex">异常对象</param>
/// <param name="message">异常消息</param>
public ConnectionExceptionEventArgs(Exception ex, string message = null)
{
Exception = ex;
@@ -157,29 +253,64 @@ namespace JoyD.Windows.CS.Toprie
/// </summary>
public string SerialNumber { get; set; }
/// <summary>
/// 返回设备信息的字符串表示
/// </summary>
/// <returns>设备信息字符串</returns>
public override string ToString()
{
return $"设备 {DeviceID} ({IPAddress})";
}
}
// 测温区配置类
/// <summary>
/// 测温区配置类
/// </summary>
public class TemperatureZone
{
/// <summary>
/// 测温区索引
/// </summary>
public int Index { get; set; }
/// <summary>
/// 测温区X坐标
/// </summary>
public int X { get; set; }
/// <summary>
/// 测温区Y坐标
/// </summary>
public int Y { get; set; }
/// <summary>
/// 测温区宽度
/// </summary>
public int Width { get; set; }
/// <summary>
/// 测温区高度
/// </summary>
public int Height { get; set; }
/// <summary>
/// 测温区颜色
/// </summary>
public Color Color { get; set; }
}
// 温差配置类
/// <summary>
/// 温差配置类
/// </summary>
public class TemperatureDiffConfig
{
/// <summary>
/// 温度图例数据
/// </summary>
public List<Tuple<double, Color>> TemperatureLegend { get; set; }
/// <summary>
/// 像素温度数据
/// </summary>
public Dictionary<Point, double> PixelTemperatureData { get; set; }
/// <summary>
/// 初始化温差配置类
/// </summary>
public TemperatureDiffConfig()
{
TemperatureLegend = new List<Tuple<double, Color>>();
@@ -187,12 +318,19 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 设备管理器类,负责设备的连接、管理和通信
/// </summary>
public class DeviceManager : IDisposable
{
// 设计模式标志,用于在设计模式下跳过实际的设备连接和初始化
/// <summary>
/// 设计模式标志,用于在设计模式下跳过实际的设备连接和初始化
/// </summary>
public static bool IsDesignMode { get; set; } = true;
// 暂停检测标志,用于控制是否进行连接检测和重连操作
/// <summary>
/// 暂停检测标志,用于控制是否进行连接检测和重连操作
/// </summary>
public bool IsDetectionPaused { get; set; } = false;
/// <summary>
/// 最近检查到的温度
@@ -249,7 +387,9 @@ namespace JoyD.Windows.CS.Toprie
private int _reconnectInterval = 2000;
// 重连尝试次数
// 最大重连尝试次数
/// <summary>
/// 最大重连尝试次数
/// </summary>
public static int MaxReconnectAttempts = 5;
// 连接检查定时器
private System.Threading.Timer _connectionCheckTimer;
@@ -948,26 +1088,7 @@ namespace JoyD.Windows.CS.Toprie
}
}
}
/// <summary>
/// 启动温度数据清理定时器
/// </summary>
// 温度数据清理定时器相关方法已移除,改为直接在后台线程处理
/// <summary>
/// 停止温度数据清理定时器
/// </summary>
// 温度数据清理定时器相关方法已移除,改为直接在后台线程处理
/// <summary>
/// 清理温度数据
/// </summary>
/// <param name="state">定时器状态对象</param>
/// <summary>
/// 在后台线程处理温度帧数据
/// </summary>
/// <param name="frameData">温度帧数据</param>
/// <param name="width">宽度</param>
/// <param name="height">高度</param>
/// <summary>
/// 初始化温度数据处理线程
/// </summary>
@@ -1502,7 +1623,6 @@ namespace JoyD.Windows.CS.Toprie
const int RECEIVE_TIMEOUT = 30000; // 30秒超时
const int SLEEP_MS = 1000; // 标准等待时间
const int CONNECTION_CHECK_INTERVAL_MS = 15000; // 连接检查间隔5秒
const int LONG_SLEEP_MS = 5000; // 长等待时间
const int ERROR_SLEEP_MS = 3000; // 错误后等待时间
try
@@ -1921,9 +2041,6 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 设置温度接收状态标志
/// </summary>
// SetReceivingState方法已移除因为_isReceivingTemperatureData变量未被使用
/// <summary>
@@ -1936,7 +2053,6 @@ namespace JoyD.Windows.CS.Toprie
private const int FixedWidth = 512;
private const int FixedHeight = 384;
/// <param name="dataAccumulator">累积的温度数据包列表</param>
// 重入保护标志
private bool _isProcessingTemperatureData = false;
@@ -4617,6 +4733,10 @@ namespace JoyD.Windows.CS.Toprie
return _connectionStatus == ConnectionStatus.Connected;
}
/// <summary>
/// 连接指定ID的设备
/// </summary>
/// <param name="deviceId">设备ID</param>
public void ConnectDevice(int deviceId)
{
try
@@ -4695,7 +4815,6 @@ namespace JoyD.Windows.CS.Toprie
// 使用ManualResetEvent实现连接超时机制
var connectionCompleteEvent = new ManualResetEvent(false);
bool timeoutOccurred = false;
// 真实连接过程
System.Threading.ThreadPool.QueueUserWorkItem((state) =>
@@ -4884,8 +5003,6 @@ namespace JoyD.Windows.CS.Toprie
/// <summary>
/// 根据设备ID连接设备
/// </summary>
/// <param name="deviceId">设备ID</param>
// 该方法已在文件上方定义,删除重复实现
/// <summary>
/// 断开设备连接兼容Form1
@@ -4895,8 +5012,6 @@ namespace JoyD.Windows.CS.Toprie
Disconnect();
}
// TestTcpConnection方法不再需要由A8SDK内部处理连接测试
/// <summary>
/// 发送连接命令
/// </summary>
@@ -4992,6 +5107,9 @@ namespace JoyD.Windows.CS.Toprie
// 连接进行中标志(用于防止重连期间再次触发连接)
private volatile bool _isConnecting = false;
/// <summary>
/// 启动自动重连机制
/// </summary>
public void StartAutoReconnect()
{
Log($"[{DateTime.Now:HH:mm:ss.fff}] [线程:{Thread.CurrentThread.ManagedThreadId}] StartAutoReconnect() - 开始执行");
@@ -5856,6 +5974,65 @@ namespace JoyD.Windows.CS.Toprie
/// </summary>
/// <param name="filePath">CSV文件路径</param>
/// <returns>是否保存成功</returns>
public bool SaveTemperatureDataToCsv(string filePath)
{
try
{
// 检查文件路径是否有效
if (string.IsNullOrEmpty(filePath))
{
Console.WriteLine("文件路径无效");
return false;
}
// 获取目录路径
string directoryPath = Path.GetDirectoryName(filePath);
if (!Directory.Exists(directoryPath))
{
try
{
// 创建目录
Directory.CreateDirectory(directoryPath);
Console.WriteLine($"创建目录: {directoryPath}");
}
catch (Exception ex)
{
Console.WriteLine($"创建目录失败: {ex.Message}");
return false;
}
}
// 使用默认的LastTemperature数据
TemperatureData temperatureData = LastTemperature;
if (temperatureData == null)
{
Console.WriteLine("没有可用的温度数据");
return false;
}
// 准备CSV数据
List<string> csvLines = new List<string>();
csvLines.Add("时间,区域ID,点ID,温度,最高温度,最低温度,平均温度,区域类型");
DateTime timestamp = DateTime.Now;
foreach (var zoneTemp in temperatureData.ZoneTemperatures)
{
string line = $"{timestamp:yyyy-MM-dd HH:mm:ss},{zoneTemp.Value.AreaId},{zoneTemp.Value.SpotId},{zoneTemp.Value.Temperature:F2},{zoneTemp.Value.MaxTemperature:F2},{zoneTemp.Value.MinTemperature:F2},{zoneTemp.Value.AverageTemperature:F2},{zoneTemp.Value.AreaType}";
csvLines.Add(line);
}
// 写入CSV文件
File.WriteAllLines(filePath, csvLines, Encoding.UTF8);
Console.WriteLine($"温度数据已保存到: {filePath}");
return true;
}
catch (Exception ex)
{
Console.WriteLine($"保存温度数据失败: {ex.Message}");
return false;
}
}
/// <summary>
/// 保存温度数据到CSV文件接受已有的温度数据
/// </summary>

View File

@@ -10,7 +10,7 @@ using System.Runtime.InteropServices;
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("JoyD")]
[assembly: AssemblyProduct("com.joyd.toprie")]
[assembly: AssemblyCopyright("Copyright © 2025 JoyD")]
[assembly: AssemblyCopyright("Copyright © 2026 JoyD")]
[assembly: AssemblyTrademark("JoyD")]
[assembly: AssemblyCulture("")]

View File

@@ -1,7 +1,5 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
@@ -13,10 +11,16 @@ using System.Windows.Forms;
namespace JoyD.Windows.CS
{
/// <summary>
/// 设置窗口类,用于配置热成像设备的各种参数和检测区域
/// </summary>
public partial class Setting : Form
{
// 创建并显示检测配置窗口
private static Setting _formInstance;
/// <summary>
/// 获取Setting类的单例实例
/// </summary>
public static Setting Form
{
get
@@ -30,7 +34,7 @@ namespace JoyD.Windows.CS
}
// 定时器字段
private Timer _timer;
private readonly Timer _timer;
// 绘制模式标志
private bool _isDrawingMode = false;
@@ -73,6 +77,9 @@ namespace JoyD.Windows.CS
private bool _isEraseMode = false; // 擦除模式标志
private Rectangle _tempDiffTempRectangle = Rectangle.Empty; // 临时温差图矩形预览
/// <summary>
/// 初始化Setting窗体
/// </summary>
public Setting()
{
InitializeComponent();

View File

@@ -9,170 +9,482 @@ namespace JoyD.Windows.CS.Toprie
public static class SharedStructures
{
// 位置相关结构体
/// <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;
}
}

View File

@@ -75,9 +75,34 @@ namespace JoyD.Windows.CS.Toprie
/// </summary>
public class ZoneTemperatureData
{
/// <summary>
/// 区域ID
/// </summary>
public int AreaId { get; set; }
/// <summary>
/// 点ID
/// </summary>
public int SpotId { get; set; }
/// <summary>
/// 区域温度
/// </summary>
public float Temperature { get; set; }
/// <summary>
/// 区域最低温度
/// </summary>
public float MinTemperature { get; set; }
/// <summary>
/// 区域最高温度
/// </summary>
public float MaxTemperature { get; set; }
/// <summary>
/// 区域平均温度
/// </summary>
public float AverageTemperature { get; set; }
/// <summary>
/// 区域类型
/// </summary>
public int AreaType { get; set; }
}
/// <summary>

View File

@@ -267,10 +267,25 @@ namespace JoyD.Windows.CS.Toprie
/// </summary>
public enum RequestResult
{
/// <summary>
/// 请求成功
/// </summary>
Success,
/// <summary>
/// 请求超时
/// </summary>
Timeout,
/// <summary>
/// 网络错误
/// </summary>
NetworkError,
/// <summary>
/// 处理错误
/// </summary>
ProcessingError,
/// <summary>
/// 无效响应
/// </summary>
InvalidResponse
}

View File

@@ -1,27 +1,22 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.Threading;
using System.Net.Sockets;
using System.IO;
using System.Runtime.InteropServices;
// 导入UDP通信管理器
using JoyD.Windows.CS.Toprie;
using System.Threading;
namespace JoyD.Windows.CS.Toprie
{
/// <summary>
/// V8热成像设备SDK封装类
/// </summary>
public class V8
{
// 结构体引用已移至SharedStructures类
// 常量定义
private const int SDK_PORT = 8080;
private const int BUFFER_SIZE = 4096;
private const int TIMEOUT = 3000;
private const string CMD_HEAD = "+CMD";
private const int DISCOVERY_UDP_PORT = 18889;
private const int SEARCH_DEVICE_MAX_NUM = 99;
// 日志文件路径
private static readonly string LogFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Log.txt");
@@ -133,11 +128,18 @@ namespace JoyD.Windows.CS.Toprie
private static bool isSdkInitialized = false;
private static readonly Dictionary<string, V8> deviceInstances = new Dictionary<string, V8>();
/// <summary>
/// V8类构造函数
/// </summary>
/// <param name="ip">设备IP地址</param>
public V8(string ip)
{
deviceIp = ip;
}
/// <summary>
/// V8类析构函数
/// </summary>
~V8()
{
Disconnect();
@@ -279,6 +281,10 @@ namespace JoyD.Windows.CS.Toprie
}
// SDK核心功能实现 - 不使用DllImport
/// <summary>
/// 初始化SDK
/// </summary>
/// <returns>0表示成功-1表示失败</returns>
public static int SDK_initialize()
{
try
@@ -299,6 +305,10 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 销毁SDK资源
/// </summary>
/// <returns>0表示成功-1表示失败</returns>
public static int SDK_destroy()
{
try
@@ -323,6 +333,11 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 搜索设备
/// </summary>
/// <param name="list_len">设备列表长度(未使用)</param>
/// <returns>设备列表字符串</returns>
public static string SDK_serch_device(int list_len)
{
try
@@ -408,6 +423,9 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 执行快门校正
/// </summary>
public void Shutter_correction()
{
try
@@ -430,6 +448,9 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 获取快门校正次数
/// </summary>
public int Shutter_times
{
get
@@ -688,6 +709,9 @@ namespace JoyD.Windows.CS.Toprie
}
// 保留原属性以保持向后兼容性
/// <summary>
/// 获取或设置色彩板模式
/// </summary>
public int Color_plate
{
get => GetColorPlate();
@@ -724,6 +748,9 @@ namespace JoyD.Windows.CS.Toprie
/// <summary>
/// 获取或设置镜像模式
/// </summary>
public int Mirror_mode
{
get
@@ -965,12 +992,20 @@ namespace JoyD.Windows.CS.Toprie
}
// 保留原属性以保持向后兼容性
/// <summary>
/// 获取或设置视频模式
/// </summary>
public int Video_mode
{
get => GetVideoModeInternal();
set => SetVideoModeInternal(value);
}
/// <summary>
/// 设置区域位置
/// </summary>
/// <param name="index">区域索引</param>
/// <param name="area_data">区域位置数据</param>
public void Set_area_pos(int index, SharedStructures.AreaPos area_data)
{
try
@@ -986,6 +1021,11 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 获取区域位置
/// </summary>
/// <param name="index">区域索引</param>
/// <returns>区域位置数据</returns>
public SharedStructures.AreaPos Get_area_pos(int index)
{
try
@@ -1021,6 +1061,11 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 设置点位置
/// </summary>
/// <param name="index">点索引</param>
/// <param name="spot_data">点位置数据</param>
public void Set_spot_pos(int index, SharedStructures.SpotPos spot_data)
{
try
@@ -1036,6 +1081,11 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 获取点位置
/// </summary>
/// <param name="index">点索引</param>
/// <returns>点位置数据</returns>
public SharedStructures.SpotPos Get_spot_pos(int index)
{
try
@@ -1069,6 +1119,9 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 获取或设置线位置
/// </summary>
public SharedStructures.LinePos Line_pos
{
set
@@ -1121,6 +1174,9 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 获取所有位置信息
/// </summary>
public SharedStructures.ImagePos All_pos
{
get
@@ -1152,6 +1208,9 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 获取或设置温度范围
/// </summary>
public int Temp_range
{
set
@@ -1196,6 +1255,9 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 获取或设置视频ISP X偏移
/// </summary>
public int Video_isp_x_offset
{
set
@@ -1240,6 +1302,9 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 获取或设置视频ISP Y偏移
/// </summary>
public int Video_isp_y_offset
{
set
@@ -1284,6 +1349,9 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 获取或设置视频ISP X缩放
/// </summary>
public int Video_isp_x_scale
{
set
@@ -1328,6 +1396,9 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 获取或设置视频ISP Y缩放
/// </summary>
public int Video_isp_y_scale
{
set
@@ -1372,6 +1443,9 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 获取或设置LED状态
/// </summary>
public int Set_led
{
set
@@ -1416,6 +1490,9 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 获取或设置邮件服务器配置
/// </summary>
public SharedStructures.EmailServer Email_server
{
set
@@ -1466,6 +1543,9 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 获取或设置TFTP服务器配置
/// </summary>
public SharedStructures.TftpServer Tftp_server
{
set
@@ -1515,6 +1595,9 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 获取或设置网络配置
/// </summary>
public SharedStructures.NetworkEth Network_eth
{
set
@@ -1564,6 +1647,9 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 获取或设置融合距离
/// </summary>
public int Fusion_distance
{
set
@@ -1608,6 +1694,10 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 设置环境参数
/// </summary>
/// <param name="data">环境参数</param>
public void Set_envir_param(SharedStructures.EnvirParam data)
{
try
@@ -1632,6 +1722,11 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 获取区域环境参数
/// </summary>
/// <param name="index">区域索引</param>
/// <returns>环境参数</returns>
public SharedStructures.EnvirParam Get_area_envir_param(int index)
{
try
@@ -1656,6 +1751,11 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 获取点环境参数
/// </summary>
/// <param name="index">点索引</param>
/// <returns>环境参数</returns>
public SharedStructures.EnvirParam Get_spot_envir_param(int index)
{
try
@@ -1680,6 +1780,10 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 获取线环境参数
/// </summary>
/// <returns>环境参数</returns>
public SharedStructures.EnvirParam Get_line_envir_param()
{
try
@@ -1704,6 +1808,10 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 获取全局环境参数
/// </summary>
/// <returns>环境参数</returns>
public SharedStructures.EnvirParam Get_globa_envir_param()
{
try
@@ -1728,6 +1836,10 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 设置报警参数
/// </summary>
/// <param name="data">报警参数</param>
public void Set_alarm_param(SharedStructures.AlarmParam data)
{
try
@@ -1750,6 +1862,11 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 获取区域报警参数
/// </summary>
/// <param name="index">区域索引</param>
/// <returns>报警参数</returns>
public SharedStructures.AlarmParam Get_area_alarm_param(int index)
{
try
@@ -1773,6 +1890,11 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 获取点报警参数
/// </summary>
/// <param name="index">点索引</param>
/// <returns>报警参数</returns>
public SharedStructures.AlarmParam Get_spot_alarm_param(int index)
{
try
@@ -1797,6 +1919,10 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 获取全局报警参数
/// </summary>
/// <returns>报警参数</returns>
public SharedStructures.AlarmParam Get_globa_alarm_param()
{
try
@@ -1821,6 +1947,10 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 获取线报警参数
/// </summary>
/// <returns>报警参数</returns>
public SharedStructures.AlarmParam Get_line_alarm_param()
{
try
@@ -1845,6 +1975,11 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 获取区域温度
/// </summary>
/// <param name="index">区域索引</param>
/// <returns>区域温度数据</returns>
public SharedStructures.AreaTemp Get_area_temp(int index)
{
try
@@ -1869,6 +2004,11 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 获取点温度
/// </summary>
/// <param name="index">点索引</param>
/// <returns>点温度数据</returns>
public SharedStructures.SpotTemp Get_spot_temp(int index)
{
try
@@ -1893,6 +2033,10 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 获取线温度
/// </summary>
/// <returns>线温度数据</returns>
public SharedStructures.LineTemp Get_line_temp()
{
try
@@ -1917,6 +2061,10 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 获取全局温度
/// </summary>
/// <returns>全局温度数据</returns>
public SharedStructures.GlobaTemp Get_globa_temp()
{
try
@@ -1941,6 +2089,10 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 获取所有温度数据
/// </summary>
/// <returns>图像温度数据</returns>
public SharedStructures.ImageTemp Get_all_temp()
{
try
@@ -1965,6 +2117,9 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 设备重启
/// </summary>
public void Power_reboot()
{
try
@@ -1987,6 +2142,9 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 恢复默认参数
/// </summary>
public void Param_recover()
{
try
@@ -2009,6 +2167,9 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 设备固件更新
/// </summary>
public void Update()
{
try
@@ -2032,6 +2193,10 @@ namespace JoyD.Windows.CS.Toprie
}
// 使用SendCommand方法发送心跳命令与SDK保持一致
/// <summary>
/// 发送心跳命令
/// </summary>
/// <returns>心跳响应值</returns>
public int Heartbeat()
{
try
@@ -2076,6 +2241,13 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <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)
{
try
@@ -2098,6 +2270,10 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 发送串口命令
/// </summary>
/// <param name="cmd">命令字节数组</param>
public void Send_uart_command(byte[] cmd)
{
try
@@ -2115,6 +2291,10 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 自动对焦
/// </summary>
/// <param name="data">对焦参数</param>
public void Autofocus(SharedStructures.FocusParam data)
{
try
@@ -2137,6 +2317,10 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 设置设备名称
/// </summary>
/// <param name="data">设备名称</param>
public void Set_device_name(string data)
{
try
@@ -2159,6 +2343,10 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 获取设备名称
/// </summary>
/// <returns>设备名称</returns>
public string Get_device_name()
{
try
@@ -2191,6 +2379,10 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 获取检测编号
/// </summary>
/// <returns>检测编号字节数组</returns>
public byte[] Get_detect_number()
{
try
@@ -2226,6 +2418,9 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 获取或设置温度帧
/// </summary>
public char Temp_frame
{
set
@@ -2277,6 +2472,9 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 获取或设置报警输出
/// </summary>
public char Alarm
{
set
@@ -2331,6 +2529,9 @@ namespace JoyD.Windows.CS.Toprie
// 私有字段,用于存储最后一次成功获取的温补值
private int _lastSuccessfulCompTemp = 0;
/// <summary>
/// 获取或设置温补值
/// </summary>
public int Comp_temp
{
get
@@ -2373,6 +2574,10 @@ namespace JoyD.Windows.CS.Toprie
}
}
/// <summary>
/// 设置系统时间
/// </summary>
/// <param name="data">时间参数</param>
public void Set_time(SharedStructures.TimeParam data)
{
try
@@ -2395,18 +2600,30 @@ namespace JoyD.Windows.CS.Toprie
}
}
// 获取视频模式
/// <summary>
/// 获取视频模式
/// </summary>
/// <returns>视频模式值</returns>
public int GetVideoMode()
{
return GetVideoModeInternal();
}
// 设置视频模式
/// <summary>
/// 设置视频模式
/// </summary>
/// <param name="mode">视频模式值</param>
public void SetVideoMode(int mode)
{
SetVideoModeInternal(mode);
}
// 新增方法:获取图像数据
/// <summary>
/// 获取图像数据
/// </summary>
/// <returns>图像数据字节数组</returns>
public byte[] GetImageData()
{
try

View File

@@ -73,7 +73,7 @@ if (Test-Path "$output\$packageId.nuspec") { Remove-Item -Path "$output\$package
# 构建项目确保生成pdb和xml文件
Write-Host "1. 正在构建项目..."
Write-Host "当前目录: $scriptDir"
dotnet build "$scriptDir\Toprie\Toprie.csproj" -c Debug -o "$output" /p:DebugSymbols=true /p:DebugType=full /p:DocumentationFile=JoyD.Windows.CS.Toprie.xml
dotnet build "$scriptDir\Toprie\Toprie.csproj" -c Debug /p:DebugSymbols=true /p:DebugType=full
if ($LASTEXITCODE -ne 0) {
Write-Host "错误: 构建失败!" -ForegroundColor Red
@@ -81,11 +81,27 @@ if ($LASTEXITCODE -ne 0) {
}
# 验证DLL是否存在
if (!(Test-Path "$output\$actualDllName")) {
Write-Host "错误: 在输出目录中找不到$actualDllName!" -ForegroundColor Red
$binDebugPath = Join-Path "$scriptDir\Toprie" "bin\Debug"
if (!(Test-Path "$binDebugPath\$actualDllName")) {
Write-Host "错误: 在$binDebugPath目录中找不到$actualDllName!" -ForegroundColor Red
exit 1
}
# 将构建文件复制到Output目录
Write-Host "正在将构建文件复制到Output目录..."
Copy-Item -Path "$binDebugPath\$actualDllName" -Destination $output -Force
Write-Host "已复制$actualDllName到$output"
if (Test-Path "$binDebugPath\$actualPdbName") {
Copy-Item -Path "$binDebugPath\$actualPdbName" -Destination $output -Force
Write-Host "已复制$actualPdbName到$output"
}
if (Test-Path "$binDebugPath\$actualXmlName") {
Copy-Item -Path "$binDebugPath\$actualXmlName" -Destination $output -Force
Write-Host "已复制$actualXmlName到$output"
}
# 直接使用原始文件名,无需复制重命名
Write-Host "使用原始文件名: $actualDllName"
@@ -362,4 +378,4 @@ if (Test-Path $localNugetConfigPath) {
}
Write-Host "
发布过程完成"
发布过程完成"