C3204
2025-12-25 32e832a898a6466369669717e7b11f7c957371bb
修复log显示以及文件大小问题。
已修改7个文件
322 ■■■■■ 文件已修改
LB_SmartVision/Forms/Pages/ProcessPage/ProcessControl.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/LB_SmartVision.csproj 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/VisionForm.cs 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/log4net.config 213 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Cameras/2DCameraForm.Designer.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Cameras/2DCameraForm.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Cameras/CameraConfig.cs 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/ProcessPage/ProcessControl.cs
@@ -166,7 +166,7 @@
                else
                {
                    isCircleRuning = false;
                    threadCircleRun.Abort();
                    //threadCircleRun.Abort();
                }
            }
            catch { }
LB_SmartVision/LB_SmartVision.csproj
@@ -59,6 +59,9 @@
  </ItemGroup>
  <ItemGroup>
    <None Update="log4net.config">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="ref\halcondotnet.dll">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
LB_SmartVision/VisionForm.cs
@@ -242,7 +242,7 @@
            {
                return;
            }
            string strInfo = DateTime.Now.ToString("[yyyy:MM:HH:mm:ss:fff] ");
            string strInfo = DateTime.Now.ToString("[yyyy:MM:dd:HH:mm:ss:fff] ");
            strInfo += strLog;
            if (infoType != LogInfoType.NOSHOW)
            {
@@ -258,19 +258,30 @@
                        switch (infoType)
                        {
                            case LogInfoType.INFO:
                                this.rich_Info.SelectionColor = Color.Wheat;
                                break;
                                {
                                    this.rich_Info.SelectionColor = Color.Wheat;
                                    AsyncLogHelper.Info(strLog);
                                    break;
                                }
                            case LogInfoType.WARN:
                                this.rich_Info.SelectionColor = Color.LightGoldenrodYellow;
                                break;
                                {
                                    this.rich_Info.SelectionColor = Color.Yellow;
                                    AsyncLogHelper.Warn(strLog);
                                    break;
                                }
                            case LogInfoType.PASS:
                                this.rich_Info.SelectionColor = Color.Green;
                                break;
                                {
                                    this.rich_Info.SelectionColor = Color.Green;
                                    AsyncLogHelper.Info(strLog);
                                    break;
                                }
                            case LogInfoType.ERROR:
                                this.rich_Info.SelectionColor = Color.Red;
                                break;
                                {
                                    this.rich_Info.SelectionColor = Color.Red;
                                    AsyncLogHelper.Error(strLog);
                                    break;
                                }
                        }
                        // 更新 UI 控件,比如显示接收到的消息
                        this.rich_Info.AppendText(strInfo);
                        this.rich_Info.AppendText("\r\n");
@@ -282,32 +293,43 @@
                {
                    if (this.rich_Info.Lines.Length > 1000)
                    {
                        this.rich_Info.Clear();
                    }
                    // 如果已经在 UI 线程上,直接更新 UI
                    switch (infoType)
                    {
                        case LogInfoType.INFO:
                            this.rich_Info.SelectionColor = Color.Wheat;
                            break;
                            {
                                this.rich_Info.SelectionColor = Color.Wheat;
                                AsyncLogHelper.Info(strLog);
                                break;
                            }
                        case LogInfoType.WARN:
                            this.rich_Info.SelectionColor = Color.Yellow;
                            break;
                            {
                                this.rich_Info.SelectionColor = Color.Yellow;
                                AsyncLogHelper.Warn(strLog);
                                break;
                            }
                        case LogInfoType.PASS:
                            this.rich_Info.SelectionColor = Color.Green;
                            break;
                            {
                                this.rich_Info.SelectionColor = Color.Green;
                                AsyncLogHelper.Info(strLog);
                                break;
                            }
                        case LogInfoType.ERROR:
                            this.rich_Info.SelectionColor = Color.Red;
                            break;
                            {
                                this.rich_Info.SelectionColor = Color.Red;
                                AsyncLogHelper.Error(strLog);
                                break;
                            }
                    }
                    this.rich_Info.AppendText(strInfo);
                    this.rich_Info.AppendText("\r\n");
                    this.rich_Info.SelectionStart = this.rich_Info.Text.Length;
                    this.rich_Info.ScrollToCaret();
                }
            }
            AsyncLogHelper.Info(strLog);
        }
        public static bool SaveAllLayout()
@@ -502,9 +524,9 @@
        {
            XmlConfigurator.Configure(new System.IO.FileInfo("log4net.config"));
            string[] paths = {
            @"生产日志\Run_Log",
            @"生产日志\Debug_Log",
            @"生产日志\Error_Log",
            @"生产日志\Run",
            @"生产日志\Debug",
            @"生产日志\Error",
            @"生产日志\Fatal",
            @"生产日志\Warn",
            };
LB_SmartVision/log4net.config
@@ -1,107 +1,112 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
    <root>
        <level value="ALL"/>
        <!-- 添加所有appender引用 -->
        <appender-ref ref="DebugLogger" />
        <appender-ref ref="InfoLogger" />
        <appender-ref ref="WarnLogger" />
        <appender-ref ref="ErrorLogger" />
        <appender-ref ref="FatalLogger" />
    </root>
    <appender name="DebugLogger" type="log4net.Appender.RollingFileAppender">
        <file value="生产日志\Debug_Log\"/>
        <appendToFile value="true" />
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <Encoding value="UTF-8" />
        <maxSizeRollBackups value="-1"/>
        <StaticLogFileName value="false"/>
        <rollingStyle value="Date" />
        <param name="datePattern" value="yyyy-MM/yyyy-MM-dd.'log'" />
        <createDirs value="true" />
        <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="DEBUG" />
            <levelMax value="DEBUG" />
        </filter>
        <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%date [%thread] %-5level %logger - %message%newline" />
        </layout>
    </appender>
    <appender name="InfoLogger" type="log4net.Appender.RollingFileAppender">
        <file value="生产日志\Run_Log\"/>
        <appendToFile value="true" />
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <Encoding value="UTF-8" />
        <maxSizeRollBackups value="-1"/>
        <StaticLogFileName value="false"/>
        <rollingStyle value="Date" />
        <param name="datePattern" value="yyyy-MM/yyyy-MM-dd.'log'" />
        <createDirs value="true" />
        <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="INFO" />
            <levelMax value="INFO" />
        </filter>
        <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%date [%thread] %-5level %logger - %message%newline" />
        </layout>
    </appender>
    <appender name="WarnLogger" type="log4net.Appender.RollingFileAppender">
        <file value="生产日志\Warn\"/>
        <appendToFile value="true" />
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <Encoding value="UTF-8" />
        <maxSizeRollBackups value="10"/>
        <StaticLogFileName value="false"/>
        <rollingStyle value="Date" />
        <param name="datePattern" value="yyyy-MM/yyyy-MM-dd.'log'" />
        <createDirs value="true" />
        <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="WARN" />
            <levelMax value="WARN" />
        </filter>
        <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%date [%thread] %-5level %logger - %message%newline" />
        </layout>
    </appender>
    <appender name="ErrorLogger" type="log4net.Appender.RollingFileAppender">
        <file value="生产日志\Error_Log\"/>
        <appendToFile value="true" />
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <Encoding value="UTF-8" />
        <maxSizeRollBackups value="-1"/>
        <StaticLogFileName value="false"/>
        <rollingStyle value="Date" />
        <param name="datePattern" value="yyyy-MM/yyyy-MM-dd.'log'" />
        <createDirs value="true" />
        <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="ERROR" />
            <levelMax value="ERROR" />
        </filter>
        <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%date [%thread] %-5level %logger - %message%newline" />
        </layout>
    </appender>
    <appender name="FatalLogger" type="log4net.Appender.RollingFileAppender">
        <file value="生产日志\Fatal\"/>
        <appendToFile value="true" />
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <Encoding value="UTF-8" />
        <maxSizeRollBackups value="-1"/>
        <StaticLogFileName value="false"/>
        <rollingStyle value="Date" />
        <param name="datePattern" value="yyyy-MM/yyyy-MM-dd.'log'" />
        <createDirs value="true" />
        <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="FATAL" />
            <levelMax value="FATAL" />
        </filter>
        <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%date [%thread] %-5level %logger - %message%newline" />
        </layout>
    </appender>
</log4net>
    <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    </configSections>
    <log4net>
        <root>
            <level value="ALL"/>
            <!-- 添加所有appender引用 -->
            <appender-ref ref="DebugLogger" />
            <appender-ref ref="InfoLogger" />
            <appender-ref ref="WarnLogger" />
            <appender-ref ref="ErrorLogger" />
            <appender-ref ref="FatalLogger" />
        </root>
        <appender name="DebugLogger" type="log4net.Appender.RollingFileAppender">
            <file value="生产日志\Debug\"/>
            <appendToFile value="true" />
            <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
            <Encoding value="UTF-8" />
            <rollingStyle value="Composite" />
            <datePattern value="yyyy-MM/yyyy-MM-dd.'log'" />
            <maximumFileSize value="10MB" />
            <maxSizeRollBackups value="-1" />
            <StaticLogFileName value="true" />
            <createDirs value="true" />
            <filter type="log4net.Filter.LevelRangeFilter">
                <levelMin value="DEBUG" />
                <levelMax value="DEBUG" />
            </filter>
            <layout type="log4net.Layout.PatternLayout">
                <param name="ConversionPattern" value="%date [%thread] %-5level %logger - %message%newline" />
            </layout>
        </appender>
        <appender name="InfoLogger" type="log4net.Appender.RollingFileAppender">
            <file value="生产日志\Run\"/>
            <appendToFile value="true" />
            <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
            <Encoding value="UTF-8" />
            <rollingStyle value="Composite" />
            <datePattern value="yyyy-MM/yyyy-MM-dd.'log'" />
            <maximumFileSize value="10MB" />
            <maxSizeRollBackups value="-1" />
            <StaticLogFileName value="true" />
            <createDirs value="true" />
            <filter type="log4net.Filter.LevelRangeFilter">
                <levelMin value="INFO" />
                <levelMax value="INFO" />
            </filter>
            <layout type="log4net.Layout.PatternLayout">
                <param name="ConversionPattern" value="%date [%thread] %-5level %logger - %message%newline" />
            </layout>
        </appender>
        <appender name="WarnLogger" type="log4net.Appender.RollingFileAppender">
            <file value="生产日志\Warn\"/>
            <appendToFile value="true" />
            <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
            <Encoding value="UTF-8" />
            <rollingStyle value="Composite" />
            <datePattern value="yyyy-MM/yyyy-MM-dd.'log'" />
            <maximumFileSize value="10MB" />
            <maxSizeRollBackups value="-1" />
            <StaticLogFileName value="true" />
            <createDirs value="true" />
            <filter type="log4net.Filter.LevelRangeFilter">
                <levelMin value="WARN" />
                <levelMax value="WARN" />
            </filter>
            <layout type="log4net.Layout.PatternLayout">
                <param name="ConversionPattern" value="%date [%thread] %-5level %logger - %message%newline" />
            </layout>
        </appender>
        <appender name="ErrorLogger" type="log4net.Appender.RollingFileAppender">
            <file value="生产日志\Error\"/>
            <appendToFile value="true" />
            <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
            <Encoding value="UTF-8" />
            <rollingStyle value="Composite" />
            <datePattern value="yyyy-MM/yyyy-MM-dd.'log'" />
            <maximumFileSize value="10MB" />
            <maxSizeRollBackups value="-1" />
            <StaticLogFileName value="true" />
            <createDirs value="true" />
            <filter type="log4net.Filter.LevelRangeFilter">
                <levelMin value="ERROR" />
                <levelMax value="ERROR" />
            </filter>
            <layout type="log4net.Layout.PatternLayout">
                <param name="ConversionPattern" value="%date [%thread] %-5level %logger - %message%newline" />
            </layout>
        </appender>
        <appender name="FatalLogger" type="log4net.Appender.RollingFileAppender">
            <file value="生产日志\Fatal\"/>
            <appendToFile value="true" />
            <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
            <Encoding value="UTF-8" />
            <rollingStyle value="Composite" />
            <datePattern value="yyyy-MM/yyyy-MM-dd.'log'" />
            <maximumFileSize value="10MB" />
            <maxSizeRollBackups value="-1" />
            <StaticLogFileName value="true" />
            <createDirs value="true" />
            <filter type="log4net.Filter.LevelRangeFilter">
                <levelMin value="FATAL" />
                <levelMax value="FATAL" />
            </filter>
            <layout type="log4net.Layout.PatternLayout">
                <param name="ConversionPattern" value="%date [%thread] %-5level %logger - %message%newline" />
            </layout>
        </appender>
    </log4net>
</configuration>
LB_VisionProcesses/Cameras/2DCameraForm.Designer.cs
@@ -466,7 +466,7 @@
            btnSaveImage.Dock = DockStyle.Fill;
            btnSaveImage.ForeColor = SystemColors.Desktop;
            btnSaveImage.Location = new Point(266, 2);
            btnSaveImage.Margin = new Padding(2, 2, 2, 2);
            btnSaveImage.Margin = new Padding(2);
            btnSaveImage.Name = "btnSaveImage";
            btnSaveImage.Size = new Size(84, 30);
            btnSaveImage.TabIndex = 8;
@@ -736,7 +736,7 @@
            controlBox1.EnableMaximizeButton = false;
            controlBox1.EnableMinimizeButton = false;
            controlBox1.ForeColor = Color.FromArgb(155, 155, 155);
            controlBox1.Location = new Point(807, 15);
            controlBox1.Location = new Point(785, 18);
            controlBox1.MaximizeHoverColor = Color.FromArgb(74, 74, 74);
            controlBox1.MinimizeHoverColor = Color.FromArgb(63, 63, 65);
            controlBox1.Name = "controlBox1";
@@ -752,7 +752,7 @@
            panel_2DCameraForm.EdgeColor = Color.FromArgb(32, 41, 50);
            panel_2DCameraForm.Location = new Point(10, 70);
            panel_2DCameraForm.Name = "panel_2DCameraForm";
            panel_2DCameraForm.Padding = new Padding(5, 5, 5, 5);
            panel_2DCameraForm.Padding = new Padding(5);
            panel_2DCameraForm.Size = new Size(865, 601);
            panel_2DCameraForm.SmoothingType = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            panel_2DCameraForm.TabIndex = 20;
LB_VisionProcesses/Cameras/2DCameraForm.cs
@@ -301,8 +301,9 @@
        private void btnEdit_Click(object sender, EventArgs e)
        {
            if (camera == null)
            {
                return;
            }
            using (Form editForm = new Form())
            {
                editForm.Text = "高级参数设置 - " + camera.SN;
LB_VisionProcesses/Cameras/CameraConfig.cs
@@ -256,12 +256,17 @@
                    {
                        times--;
                        if (TriggerSource == TriggerSource.Software)
                        {
                            Camera.GetImageWithSoftTrigger(out bitmap, timeout);
                        }
                        else
                        {
                            Camera.GetImage(out bitmap, timeout);
                        }
                        if (bitmap != null)
                        {
                            break;
                        }
                        else if (isRegrab)
                        {
                            Debug.WriteLine($"取图失败,重新取图,剩余次数:{times}");
@@ -269,8 +274,9 @@
                    } while (times > 0 && isRegrab);
                    if (isUpParams)
                    {
                        Camera.SetCamConfig(oriConfig);
                    }
                    OutputImage = bitmap;
                }
@@ -293,14 +299,23 @@
        {
            Result = true;
            Msg = "";
            OutputImage = null;
            if (OutputImage != null)
            {
                if (OutputImage is Bitmap)
                {
                    ((Bitmap)OutputImage).Dispose();
                }
                OutputImage = null;
            }
            if (Record != null)
            {
                Record.Dispose();
            }
        }
        public override void Dispose()
        {
            return;
        }
@@ -314,7 +329,9 @@
                if (OutputImage != null)
                {
                    if (OutputImage is Bitmap)
                    {
                        obj.OutputImage = ((Bitmap)OutputImage).Clone();
                    }
                }
                return obj;