From dfd6bc425253f0bb24ddf13328d61f7d64808742 Mon Sep 17 00:00:00 2001 From: kje97 Date: Thu, 12 Jun 2025 11:46:45 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EC=98=A4=EC=B0=A8=20=EA=B3=84=EC=82=B0?= =?UTF-8?q?=20=EB=B0=A9=EB=B2=95=20=EA=B3=A0=EC=A0=95=20=EB=B0=A9=EC=8B=9D?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EC=88=98=EC=A0=95=20-=20=EC=9D=B4?= =?UTF-8?q?=EC=A0=84=20=ED=91=9C=EC=A4=80=ED=8E=B8=EC=B0=A8=20=EA=B3=84?= =?UTF-8?q?=EC=82=B0=20=EB=B0=A9=EC=8B=9D=20=EC=A3=BC=EC=84=9D=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=20-=20=EC=98=A4=EC=B0=A8=EB=B2=94=EC=9C=84=20?= =?UTF-8?q?=ED=91=9C=EC=8B=9C=20UI=20=ED=8F=B0=ED=8A=B8=20=ED=81=AC?= =?UTF-8?q?=EA=B8=B0=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../weightForm.Designer.vb | 87 +++++++++++-------- SalesPacking_MES_API_Project/weightForm.resx | 5 +- SalesPacking_MES_API_Project/weightForm.vb | 71 +++++++++------ 3 files changed, 99 insertions(+), 64 deletions(-) diff --git a/SalesPacking_MES_API_Project/weightForm.Designer.vb b/SalesPacking_MES_API_Project/weightForm.Designer.vb index 5582552..29d0f67 100644 --- a/SalesPacking_MES_API_Project/weightForm.Designer.vb +++ b/SalesPacking_MES_API_Project/weightForm.Designer.vb @@ -45,6 +45,7 @@ Partial Class weightForm Me.playTimer = New System.Windows.Forms.Timer(Me.components) Me.statusTimer = New System.Windows.Forms.Timer(Me.components) Me.cmdSerialPort = New System.IO.Ports.SerialPort(Me.components) + Me.ToolTip1 = New System.Windows.Forms.ToolTip(Me.components) Me.pnWeightTop.SuspendLayout() Me.pnWeightMid.SuspendLayout() Me.gbWeightBot.SuspendLayout() @@ -59,9 +60,10 @@ Partial Class weightForm ' Me.pnWeightTop.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle Me.pnWeightTop.Controls.Add(Me.lbWeightTop) - Me.pnWeightTop.Location = New System.Drawing.Point(12, 7) + Me.pnWeightTop.Location = New System.Drawing.Point(14, 9) + Me.pnWeightTop.Margin = New System.Windows.Forms.Padding(3, 4, 3, 4) Me.pnWeightTop.Name = "pnWeightTop" - Me.pnWeightTop.Size = New System.Drawing.Size(940, 85) + Me.pnWeightTop.Size = New System.Drawing.Size(1074, 106) Me.pnWeightTop.TabIndex = 17 ' 'lbWeightTop @@ -69,9 +71,9 @@ Partial Class weightForm Me.lbWeightTop.AutoSize = True Me.lbWeightTop.Font = New System.Drawing.Font("함초롬바탕", 36.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(129, Byte)) Me.lbWeightTop.ForeColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(0, Byte), Integer), CType(CType(192, Byte), Integer)) - Me.lbWeightTop.Location = New System.Drawing.Point(215, 9) + Me.lbWeightTop.Location = New System.Drawing.Point(246, 11) Me.lbWeightTop.Name = "lbWeightTop" - Me.lbWeightTop.Size = New System.Drawing.Size(501, 62) + Me.lbWeightTop.Size = New System.Drawing.Size(623, 78) Me.lbWeightTop.TabIndex = 3 Me.lbWeightTop.Text = "패 킹 박 스 무 게 측 정" ' @@ -79,9 +81,10 @@ Partial Class weightForm ' Me.pnWeightMid.BackColor = System.Drawing.Color.Black Me.pnWeightMid.Controls.Add(Me.lbWeight) - Me.pnWeightMid.Location = New System.Drawing.Point(12, 100) + Me.pnWeightMid.Location = New System.Drawing.Point(14, 125) + Me.pnWeightMid.Margin = New System.Windows.Forms.Padding(3, 4, 3, 4) Me.pnWeightMid.Name = "pnWeightMid" - Me.pnWeightMid.Size = New System.Drawing.Size(940, 168) + Me.pnWeightMid.Size = New System.Drawing.Size(1074, 210) Me.pnWeightMid.TabIndex = 18 ' 'lbWeight @@ -89,9 +92,9 @@ Partial Class weightForm Me.lbWeight.BackColor = System.Drawing.Color.Gold Me.lbWeight.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D Me.lbWeight.Font = New System.Drawing.Font("함초롬바탕", 69.74999!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(129, Byte)) - Me.lbWeight.Location = New System.Drawing.Point(51, 14) + Me.lbWeight.Location = New System.Drawing.Point(58, 18) Me.lbWeight.Name = "lbWeight" - Me.lbWeight.Size = New System.Drawing.Size(842, 139) + Me.lbWeight.Size = New System.Drawing.Size(962, 174) Me.lbWeight.TabIndex = 14 Me.lbWeight.Text = "측정중" Me.lbWeight.TextAlign = System.Drawing.ContentAlignment.TopCenter @@ -105,62 +108,67 @@ Partial Class weightForm Me.gbWeightBot.Controls.Add(Me.lbNowg) Me.gbWeightBot.Controls.Add(Me.lbNowWeight) Me.gbWeightBot.Controls.Add(Me.picb_scale) - Me.gbWeightBot.Location = New System.Drawing.Point(12, 270) + Me.gbWeightBot.Location = New System.Drawing.Point(14, 338) + Me.gbWeightBot.Margin = New System.Windows.Forms.Padding(3, 4, 3, 4) Me.gbWeightBot.Name = "gbWeightBot" - Me.gbWeightBot.Size = New System.Drawing.Size(940, 279) + Me.gbWeightBot.Padding = New System.Windows.Forms.Padding(3, 4, 3, 4) + Me.gbWeightBot.Size = New System.Drawing.Size(1074, 349) Me.gbWeightBot.TabIndex = 23 Me.gbWeightBot.TabStop = False ' 'pnNow ' Me.pnNow.Controls.Add(Me.lbNow) - Me.pnNow.Location = New System.Drawing.Point(7, 54) + Me.pnNow.Location = New System.Drawing.Point(8, 68) + Me.pnNow.Margin = New System.Windows.Forms.Padding(3, 4, 3, 4) Me.pnNow.Name = "pnNow" - Me.pnNow.Size = New System.Drawing.Size(264, 72) + Me.pnNow.Size = New System.Drawing.Size(302, 90) Me.pnNow.TabIndex = 21 ' 'lbNow ' Me.lbNow.AutoSize = True Me.lbNow.Font = New System.Drawing.Font("함초롬바탕", 36.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(129, Byte)) - Me.lbNow.Location = New System.Drawing.Point(3, 5) + Me.lbNow.Location = New System.Drawing.Point(3, 6) Me.lbNow.Name = "lbNow" - Me.lbNow.Size = New System.Drawing.Size(258, 62) + Me.lbNow.Size = New System.Drawing.Size(320, 78) Me.lbNow.TabIndex = 7 Me.lbNow.Text = "현재 무게 :" ' 'pnExpect ' Me.pnExpect.Controls.Add(Me.lbExpect) - Me.pnExpect.Location = New System.Drawing.Point(21, 149) + Me.pnExpect.Location = New System.Drawing.Point(24, 186) + Me.pnExpect.Margin = New System.Windows.Forms.Padding(3, 4, 3, 4) Me.pnExpect.Name = "pnExpect" - Me.pnExpect.Size = New System.Drawing.Size(213, 76) + Me.pnExpect.Size = New System.Drawing.Size(243, 95) Me.pnExpect.TabIndex = 18 ' 'lbExpect ' Me.lbExpect.AutoSize = True Me.lbExpect.Font = New System.Drawing.Font("함초롬바탕", 27.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(129, Byte)) - Me.lbExpect.Location = New System.Drawing.Point(11, 13) + Me.lbExpect.Location = New System.Drawing.Point(13, 16) Me.lbExpect.Name = "lbExpect" - Me.lbExpect.Size = New System.Drawing.Size(200, 49) + Me.lbExpect.Size = New System.Drawing.Size(254, 61) Me.lbExpect.TabIndex = 9 Me.lbExpect.Text = "예상 무게 :" ' 'pnError ' Me.pnError.Controls.Add(Me.lbError) - Me.pnError.Location = New System.Drawing.Point(292, 214) + Me.pnError.Location = New System.Drawing.Point(334, 268) + Me.pnError.Margin = New System.Windows.Forms.Padding(3, 4, 3, 4) Me.pnError.Name = "pnError" - Me.pnError.Size = New System.Drawing.Size(329, 62) + Me.pnError.Size = New System.Drawing.Size(376, 78) Me.pnError.TabIndex = 20 ' 'lbError ' - Me.lbError.Font = New System.Drawing.Font("함초롬바탕", 27.75!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(129, Byte)) - Me.lbError.Location = New System.Drawing.Point(1, 4) + Me.lbError.Font = New System.Drawing.Font("함초롬바탕", 25.0!, System.Drawing.FontStyle.Bold) + Me.lbError.Location = New System.Drawing.Point(1, 5) Me.lbError.Name = "lbError" - Me.lbError.Size = New System.Drawing.Size(339, 52) + Me.lbError.Size = New System.Drawing.Size(387, 65) Me.lbError.TabIndex = 15 Me.lbError.Text = "(오차: +100, -100)" ' @@ -168,17 +176,18 @@ Partial Class weightForm ' Me.pnWeightEX.Controls.Add(Me.lbWeightEX) Me.pnWeightEX.Controls.Add(Me.lbWeightEXg) - Me.pnWeightEX.Location = New System.Drawing.Point(240, 149) + Me.pnWeightEX.Location = New System.Drawing.Point(274, 186) + Me.pnWeightEX.Margin = New System.Windows.Forms.Padding(3, 4, 3, 4) Me.pnWeightEX.Name = "pnWeightEX" - Me.pnWeightEX.Size = New System.Drawing.Size(197, 76) + Me.pnWeightEX.Size = New System.Drawing.Size(225, 95) Me.pnWeightEX.TabIndex = 19 ' 'lbWeightEX ' Me.lbWeightEX.Font = New System.Drawing.Font("함초롬바탕", 32.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(129, Byte)) - Me.lbWeightEX.Location = New System.Drawing.Point(6, 10) + Me.lbWeightEX.Location = New System.Drawing.Point(7, 12) Me.lbWeightEX.Name = "lbWeightEX" - Me.lbWeightEX.Size = New System.Drawing.Size(151, 57) + Me.lbWeightEX.Size = New System.Drawing.Size(173, 71) Me.lbWeightEX.TabIndex = 13 Me.lbWeightEX.Text = "0" Me.lbWeightEX.TextAlign = System.Drawing.ContentAlignment.MiddleRight @@ -187,9 +196,9 @@ Partial Class weightForm ' Me.lbWeightEXg.AutoSize = True Me.lbWeightEXg.Font = New System.Drawing.Font("함초롬바탕", 24.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(129, Byte)) - Me.lbWeightEXg.Location = New System.Drawing.Point(152, 19) + Me.lbWeightEXg.Location = New System.Drawing.Point(174, 24) Me.lbWeightEXg.Name = "lbWeightEXg" - Me.lbWeightEXg.Size = New System.Drawing.Size(36, 41) + Me.lbWeightEXg.Size = New System.Drawing.Size(44, 52) Me.lbWeightEXg.TabIndex = 8 Me.lbWeightEXg.Text = "g" ' @@ -197,9 +206,9 @@ Partial Class weightForm ' Me.lbNowg.AutoSize = True Me.lbNowg.Font = New System.Drawing.Font("함초롬바탕", 36.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(129, Byte)) - Me.lbNowg.Location = New System.Drawing.Point(587, 64) + Me.lbNowg.Location = New System.Drawing.Point(671, 80) Me.lbNowg.Name = "lbNowg" - Me.lbNowg.Size = New System.Drawing.Size(54, 62) + Me.lbNowg.Size = New System.Drawing.Size(67, 78) Me.lbNowg.TabIndex = 2 Me.lbNowg.Text = "g" ' @@ -208,9 +217,9 @@ Partial Class weightForm Me.lbNowWeight.BackColor = System.Drawing.SystemColors.Control Me.lbNowWeight.Font = New System.Drawing.Font("함초롬바탕", 60.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(129, Byte)) Me.lbNowWeight.ForeColor = System.Drawing.Color.DarkBlue - Me.lbNowWeight.Location = New System.Drawing.Point(274, 29) + Me.lbNowWeight.Location = New System.Drawing.Point(313, 36) Me.lbNowWeight.Name = "lbNowWeight" - Me.lbNowWeight.Size = New System.Drawing.Size(313, 104) + Me.lbNowWeight.Size = New System.Drawing.Size(358, 130) Me.lbNowWeight.TabIndex = 12 Me.lbNowWeight.Text = "0" Me.lbNowWeight.TextAlign = System.Drawing.ContentAlignment.MiddleRight @@ -218,9 +227,10 @@ Partial Class weightForm 'picb_scale ' Me.picb_scale.Image = CType(resources.GetObject("picb_scale.Image"), System.Drawing.Image) - Me.picb_scale.Location = New System.Drawing.Point(627, 42) + Me.picb_scale.Location = New System.Drawing.Point(717, 52) + Me.picb_scale.Margin = New System.Windows.Forms.Padding(3, 4, 3, 4) Me.picb_scale.Name = "picb_scale" - Me.picb_scale.Size = New System.Drawing.Size(284, 231) + Me.picb_scale.Size = New System.Drawing.Size(325, 289) Me.picb_scale.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom Me.picb_scale.TabIndex = 11 Me.picb_scale.TabStop = False @@ -242,14 +252,14 @@ Partial Class weightForm ' 'weightForm ' - Me.AutoScaleDimensions = New System.Drawing.SizeF(7.0!, 12.0!) + Me.AutoScaleDimensions = New System.Drawing.SizeF(8.0!, 15.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font - Me.ClientSize = New System.Drawing.Size(964, 561) + Me.ClientSize = New System.Drawing.Size(1102, 701) Me.Controls.Add(Me.gbWeightBot) Me.Controls.Add(Me.pnWeightMid) Me.Controls.Add(Me.pnWeightTop) Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) - Me.Margin = New System.Windows.Forms.Padding(4, 3, 4, 3) + Me.Margin = New System.Windows.Forms.Padding(5, 4, 5, 4) Me.MaximizeBox = False Me.MinimizeBox = False Me.Name = "weightForm" @@ -293,4 +303,5 @@ Partial Class weightForm Friend WithEvents playTimer As Timer Friend WithEvents statusTimer As Timer Friend WithEvents cmdSerialPort As IO.Ports.SerialPort + Friend WithEvents ToolTip1 As ToolTip End Class diff --git a/SalesPacking_MES_API_Project/weightForm.resx b/SalesPacking_MES_API_Project/weightForm.resx index 2f24d88..78fc0da 100644 --- a/SalesPacking_MES_API_Project/weightForm.resx +++ b/SalesPacking_MES_API_Project/weightForm.resx @@ -121,7 +121,7 @@ iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vgAADr4B6kKxwAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAACe7SURBVHhe7d0J + vQAADr0BR/uQrQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAACe7SURBVHhe7d0J tHx5Wd/rbpp5FEQZBEEUiOIVRUER4YYh2JggieAN0wWH4HgTE5BJBBGDoKKi4MQSBBQVMAy5IsqgDRgg CUYcEEEZjMzIPA/NzfddYje5vr/6n33Oqdq7aj/PWp+1WNr/ql/Vqar9VtWuvc8CAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAB25krphumm6TbSCrp5ulG6agJYjUulu6anprem/09ace9Nv52+J9Uw @@ -306,6 +306,9 @@ 348, 17 + + 503, 17 + AAABAAEApa4AAAEAIAAQ0QEAFgAAACgAAAClAAAAXAEAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA diff --git a/SalesPacking_MES_API_Project/weightForm.vb b/SalesPacking_MES_API_Project/weightForm.vb index c90566d..e38bea2 100644 --- a/SalesPacking_MES_API_Project/weightForm.vb +++ b/SalesPacking_MES_API_Project/weightForm.vb @@ -1,4 +1,5 @@ Imports System.Windows.Forms +Imports System.Windows.Forms.VisualStyles.VisualStyleElement Public Class weightForm Private weightSum As Integer @@ -18,13 +19,13 @@ Public Class weightForm Private weight(2) - Dim weights As New List(Of Double)() ' 실측 측정값 저장용 - Dim avg As Double = 0.0 ' 평균 - Dim stdDev As Double = 0.0 ' 표준편차 - Dim k As Double = 2.0 ' 오차 계수 - Dim errorRate As Double = 0.0 ' 허용 오차 비율 - Dim weightErrorPlus As Double = 0.0 ' 허용 오차 상한 - Dim weightErrorMinus As Double = 0.0 ' 허용 오차 하한 + 'Dim weights As New List(Of Double)() ' 실측 측정값 저장용 + 'Dim avg As Double = 0.0 ' 평균 + 'Dim stdDev As Double = 0.0 ' 표준편차 + 'Dim k As Double = 2.0 ' 오차 계수 + 'Dim errorRate As Double = 0.0 ' 허용 오차 비율 + 'Dim weightErrorPlus As Double = 0.0 ' 허용 오차 상한 + 'Dim weightErrorMinus As Double = 0.0 ' 허용 오차 하한 Private Sub weightForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load ZeroTimer.Enabled = True @@ -157,19 +158,31 @@ Public Class weightForm End Try End Sub - Private Sub UpdateErrorRange() - If weights.Count >= 2 Then - avg = weights.Average() - stdDev = Math.Sqrt(weights.Select(Function(x) (x - avg) ^ 2).Average()) - errorRate = (k * stdDev) / avg + 'Private Sub UpdateErrorRange() + ' If mainForm.rdbWeightAuto.Checked = True Then + ' ' 자동 모드: 오차 계수(k)로 오차 범위 산출 + ' Dim autoErrorRate As Double = 0.02 ' 예: 2% 오차 + ' weightErrorPlus = weightSum * autoErrorRate + ' weightErrorMinus = weightSum * autoErrorRate - weightErrorPlus = weightSum * errorRate - weightErrorMinus = weightSum * errorRate + ' 'If lbNowWeight.Text >= weightSum - weightErrorMinus And + ' ' lbNowWeight.Text <= weightSum + weightErrorPlus Then + ' 'End If - ' 폼에 오차 범위 표시 - lbError.Text = "(오차: +" & weightErrorPlus.ToString() & ", -" & weightErrorMinus.ToString() & ")" - End If - End Sub + ' Else + ' ' 수동 모드: 평균, 표준편차 기반 오차 범위 산출 + ' If weights.Count >= 2 Then + ' avg = weights.Average() + ' stdDev = Math.Sqrt(weights.Select(Function(x) (x - avg) ^ 2).Average()) + ' errorRate = (k * stdDev) / avg + ' weightErrorPlus = weightSum * errorRate + ' weightErrorMinus = weightSum * errorRate + + ' '폼에 오차 범위 표시 + ' lbError.Text = "(오차: +" & weightErrorPlus.ToString() & ", -" & weightErrorMinus.ToString() & ")" + ' End If + ' End If + 'End Sub 'Private Function weight_compare() As Boolean ' If lbNowWeight.Text >= weightSum - weightErrorMinus And lbNowWeight.Text <= weightSum + weightErrorPlus Then @@ -180,17 +193,25 @@ Public Class weightForm 'End Function Private Function weight_compare() As Boolean + Dim tip As New System.Windows.Forms.ToolTip() Dim nowWeight As Double = Double.Parse(lbNowWeight.Text) + Dim autoErrorRate As Double = 0.02 '오차 계수(k)로 오차 범위 산출 2% 오차 - ' 기준 무게 기반 허용 오차 범위 계산 완료된 상태에서 비교 - Dim upperBound As Double = weightSum + weightErrorPlus - Dim lowerBound As Double = weightSum - weightErrorMinus + Dim weightError As Double = weightSum * autoErrorRate + + Dim upperBound As Double = weightSum + weightError + Dim lowerBound As Double = weightSum - weightError + + ' 라벨 텍스트 간결하게 + lbError.Text = "(오차: ±" & weightError.ToString("F2") & ")" + + ' 툴팁에 상세 정보 표시 + tip.SetToolTip(lbError, "허용구간: " & lowerBound.ToString("F2") & " ~ " & upperBound.ToString("F2")) Return (nowWeight >= lowerBound) AndAlso (nowWeight <= upperBound) End Function - Public Sub delay(ByVal milliSecond As Double) Dim delayTime As Date = Now.AddSeconds(milliSecond / 1000) Do Until Now > delayTime @@ -214,9 +235,9 @@ Public Class weightForm Next Loop - weights.Add(Double.Parse(weight(0))) - weights.Add(Double.Parse(weight(1))) - UpdateErrorRange() + 'weights.Add(Double.Parse(weight(0))) + 'weights.Add(Double.Parse(weight(1))) + 'UpdateErrorRange() If weight(0) - weight(1) < 10 And weight(0) - weight(1) > -10 Then Return True