Imports System.IO Imports System.IO.Ports Imports System.Text Imports System.Threading Imports System.Windows.Forms.VisualStyles.VisualStyleElement.ProgressBar Imports uPLibrary.Networking.M2Mqtt Public Class Main_Form Public Const programName As String = "DUALSONIC Cartridge Film Pressing JIG Program_" Public Const programVer As String = "Ver 1.1.0" Private Const ch20FullCount As Int16 = 20 Private Const ch10FullCount As Int16 = 10 'Private stateCount As Int32 = 1023 Private Enum chState wait start play middleStop endStop End Enum Private runState(portCount) As Int16 ''각 채널 동작 상태 Private openStart As Boolean = False Private portCount As Int16 Private defSecond As Integer Private startTime(portCount) As Integer ''시작시간 Private nowTime(portCount) As Integer ''현재시간 Private runColor(portCount) As Boolean ''동작 시 색상 변화 Private playDate(portCount) As String '' 제조일자(mqtt) Private playTime(portCount) As String '' 제조시간(mqtt) Private playNumber(portCount) As String '' 카트리지 번호(mqtt) Private playOKNG(portCount) As Boolean ''합불판정(mqtt) Private runTime(portCount) As String '' 필름부착시간(mqtt) Private makeCount As Integer = 0 '' 제작개수 (카트리지번호에 사용) Private chTimeText(portCount) As TextBox Private chTimePanel(portCount) As Panel Private chTimeMin(portCount) As NumericUpDown Private chTimeSec(portCount) As NumericUpDown Private chTimebtn(portCount) As Button Private chStartbtn(portCount) As Button Private chResetbtn(portCount) As Button Private chGroup(portCount) As GroupBox Private Enum serialList serial1 serial2 End Enum Private chSerial(serialList.serial2) As SerialPort Private chSerialCbb(serialList.serial2) As ComboBox Private Enum saveList min sec chCount com1 com2 End Enum Private Enum commandList nowState upState downState emoState End Enum Private commandSelect(commandList.emoState) As String ''thread Private runCH1_Thread As Thread Private runCH2_Thread As Thread Private Delegate Sub uploadDelegate(serialNum As Int16, thName As String) Private uploadDelegateFunc As uploadDelegate Private rxMessage, cmdMessage, tmpCmdMessage As String ''MQTT Public mqttBroker As String = String.Empty Public mqttTopic As String = String.Empty Private mqttSendData As String = String.Empty Private MQTClient As MqttClient ''LocalFile 저장 Private filePath As String = System.AppDomain.CurrentDomain.BaseDirectory & "\TestCount" Private Const csvSaveForm As String = "TestDate,RunCount" Private Sub Main_Form_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.Text = programName & programVer formSetting() ReDim chSerial(serialList.serial2) chSerial(serialList.serial1) = Serial_1Port chSerial(serialList.serial2) = Serial_2Port loadConfig() formLoad() If mqttConnection() = False Then MqttForm.txbMqttAd.Text = String.Empty MqttForm.txbMqttTp.Text = String.Empty mqttBroker = String.Empty mqttTopic = String.Empty End If If loadLocalFile() = False Then makeCount = 0 End If txbToday.Text = makeCount End Sub Private Sub ch1_ThreadRun() runCH1_Thread = New Thread(New ParameterizedThreadStart(AddressOf threadFunc)) If runCH1_Thread.IsAlive = True Then runCH1_Thread.Abort() End If runCH1_Thread.Name = "TH1" runCH1_Thread.IsBackground = True runCH1_Thread.Start(runCH1_Thread.Name) End Sub Private Sub ch2_ThreadRun() runCH2_Thread = New Thread(AddressOf threadFunc) If runCH2_Thread.IsAlive = True Then runCH2_Thread.Abort() End If runCH2_Thread.Name = "TH2" runCH2_Thread.IsBackground = True runCH2_Thread.Start(runCH2_Thread.Name) End Sub Private Sub threadFunc(name As String) Dim serialNum As Int16 Do If name = "TH1" Then serialNum = serialList.serial1 Else serialNum = serialList.serial2 End If uploadDelegateFunc = New uploadDelegate(AddressOf ReceiveData) Me.Invoke(uploadDelegateFunc, serialNum, name) Thread.Sleep(500) Loop End Sub Private Sub ReceiveData(serialNum As Int16, thName As String) Try Dim cmdVal() As String If chSerial(serialNum).IsOpen = True Then rxMessage = String.Empty cmdMessage = String.Empty rxMessage = chSerial(serialNum).ReadExisting If rxMessage <> "" Then ManagerForm.rtbState.AppendText(thName & ". " & rxMessage) ManagerForm.rtbState.ScrollToCaret() Dim commandCount As Integer = UBound(Split(rxMessage, vbCr)) - 1 For i = 0 To commandCount Dim nowMessage As String = Mid(rxMessage, 1, InStr(rxMessage, vbCr) - 1) If i <> commandCount Then rxMessage = Mid(rxMessage, InStr(rxMessage, vbCr) + 1, rxMessage.Length) End If cmdMessage = Mid(rxMessage, 1, InStr(rxMessage, vbCr) + 1) nowMessage = Mid(nowMessage, InStr(nowMessage, "[") + 1, nowMessage.Length) Dim rsCommand As String = Mid(nowMessage, 1, InStr(nowMessage, " ") - 1) nowMessage = Mid(nowMessage, InStr(nowMessage, " ") + 1, nowMessage.Length) nowMessage = Mid(nowMessage, 1, InStr(nowMessage, "]") - 1) Dim cmdCount As Int16 = UBound(Split(nowMessage, ",")) ReDim cmdVal(cmdCount) For cnt = 0 To cmdCount If cnt = cmdCount Then cmdVal(cnt) = Mid(nowMessage, 1, nowMessage.Length) Else cmdVal(cnt) = Mid(nowMessage, 1, InStr(nowMessage, ",") - 1) nowMessage = Mid(nowMessage, InStr(nowMessage, ",") + 1, nowMessage.Length) End If Next Select Case rsCommand Case commandSelect(commandList.nowState) txbState.BackColor = Color.Green 'If cmdVal(1) = stateCount Then ' Dim stopBol As Boolean = False ' Dim runNum() As Int16 = chRunParsing(cmdVal(0)) ' If runNum(0) = -1 Then ' Exit Sub ' End If ' Dim chRunNum As Int16 = 0 ' For cnt = ch10FullCount To 1 Step -1 ' stopBol = False ' For run = 0 To runNum.Length - 1 ' If thName = "TH2" Then ' chRunNum = chRunNum + ch10FullCount ' End If ' If cnt = runNum(run) Then ' If runState(chRunNum) <> chState.wait Then ' runState(chRunNum) = chState.wait ' stopBol = True ' Exit For ' End If ' End If ' Next ' If stopBol = False Then ' If runState(chRunNum) <> chState.play Then ' runState(chRunNum) = chState.play ' End If ' End If ' Next 'End If Case commandSelect(commandList.upState) If cmdVal(0) > 0 Then Dim runNum() As Int16 = chRunParsing(cmdVal(0)) If runNum(0) = -1 Then Exit Sub End If Dim chRunNum As Int16 For run = 0 To runNum.Length - 1 chRunNum = runNum(run) If thName = "TH2" Then chRunNum = chRunNum + ch10FullCount End If If runState(chRunNum) = chState.start Or runState(chRunNum) = chState.play Then If nowTime(chRunNum) = 0 Then runState(chRunNum) = chState.endStop Else runState(chRunNum) = chState.middleStop End If End If Next End If Case commandSelect(commandList.downState) If cmdVal(0) > 0 Then Dim runNum() As Int16 = chRunParsing(cmdVal(0)) If runNum(0) = -1 Then Exit Sub End If Dim chRunNum As Int16 For run = 0 To runNum.Length - 1 chRunNum = runNum(run) If thName = "TH2" Then chRunNum = chRunNum + ch10FullCount End If If runState(chRunNum) = chState.wait Then runState(chRunNum) = chState.start End If Next End If Case commandSelect(commandList.emoState) Dim runNum As Int16 For emo = 1 To ch10FullCount If thName = "TH2" Then runNum = emo + ch10FullCount Else runNum = emo End If runState(runNum) = chState.middleStop Next End Select Next chSerial(serialNum).DiscardInBuffer() chSerial(serialNum).DiscardOutBuffer() rxMessage = String.Empty cmdMessage = String.Empty Else txbState.BackColor = Color.Red chSerial(serialNum).DiscardInBuffer() chSerial(serialNum).DiscardOutBuffer() End If Else txbState.BackColor = Color.Red End If Catch ex As Exception MsgBox("데이터 불러오기 에러 발생 ::" & ex.Message, vbCritical) End Try End Sub Private Function chRunParsing(chBinary As Int16) As Int16() Dim SetUpList(0) As Int16 Dim Count, ArrayCount As Int16 Dim ChCount As Int16 = 0 SetUpList(0) = -1 Dim chNum As String = Convert.ToString(chBinary, 2) For i = Len(chNum) To 1 Step -1 ChCount += 1 Count = Mid(chNum, i, 1) If Count = 1 Then If SetUpList(0) = -1 Then SetUpList(0) = ChCount Else ArrayCount = SetUpList.Length ReDim Preserve SetUpList(SetUpList.Length) SetUpList(ArrayCount) = ChCount End If End If Next Return SetUpList End Function Private Sub formLoad() For i = 1 To portCount chTimeText(i).Enabled = True chTimeText(i).Visible = True chTimePanel(i).Enabled = False chTimePanel(i).Visible = False chTimebtn(i).Enabled = True chTimebtn(i).Text = "타이머 수정" chStartbtn(i).Enabled = True chResetbtn(i).Enabled = True Next End Sub Private Sub formSetting() Me.Size = New Size(1920, 1080) Me.WindowState = WindowState.Maximized End Sub Private Function mqttConnection() As Boolean If MqttForm.loadMqtt = False Then Return False Else If mqttConnect() = False Then Return False End If End If Return True End Function Private Sub rdbPort_CheckedChanged(sender As Object, e As EventArgs) Handles rdbPort.CheckedChanged If rdbPort.Checked = True Then gbTimeSet.Visible = False gb_comport.Visible = True End If End Sub Private Sub rdbTime_CheckedChanged(sender As Object, e As EventArgs) Handles rdbTime.CheckedChanged If rdbTime.Checked = True Then gbTimeSet.Visible = True gb_comport.Visible = False End If End Sub Private Sub rdbport20_CheckedChanged(sender As Object, e As EventArgs) Handles rdbport20.CheckedChanged If rdbport20.Checked = True Then serialChange() ReDim chSerial(serialList.serial2) chSerial(serialList.serial1) = Serial_1Port chSerial(serialList.serial2) = Serial_2Port pn10Port.Visible = False pn10Port.Enabled = False pn10Port.Location = New Point(1930, 80) pn20Port.Visible = True pn20Port.Enabled = True pn20Port.Location = New Point(5, 90) gbPort2.Enabled = True DataSetting() Dim timeData As String = timeSetting(Val(nudMinute.Value), Val(nudSecond.Value)) If timeData = "FAIL" Then Exit Sub End If For i = 1 To portCount startTime(i) = defSecond chTimeText(i).Text = timeData Next If openStart = True Then saveConfig() Else openStart = True End If formLoad() systemOnOff(False) End If End Sub Private Sub rdbport10_CheckedChanged(sender As Object, e As EventArgs) Handles rdbport10.CheckedChanged If rdbport10.Checked = True Then serialChange() ReDim chSerial(serialList.serial1) chSerial(serialList.serial1) = Serial_1Port pn20Port.Visible = False pn20Port.Enabled = False pn20Port.Location = New Point(1930, 80) pn10Port.Visible = True pn10Port.Enabled = True pn10Port.Location = New Point(5, 90) gbPort2.Enabled = False DataSetting() Dim timeData As String = timeSetting(Val(nudMinute.Value), Val(nudSecond.Value)) If timeData = "FAIL" Then Exit Sub End If For i = 1 To portCount startTime(i) = defSecond chTimeText(i).Text = timeData Next If openStart = True Then saveConfig() Else openStart = True End If formLoad() systemOnOff(False) End If End Sub Private Sub serialChange() For i = 0 To chSerial.Length - 1 If chSerial(i).IsOpen = True Then If i = serialList.serial1 Then If runCH1_Thread.IsAlive = True Then runCH1_Thread.Abort() End If Else If runCH2_Thread.IsAlive = True Then runCH2_Thread.Abort() End If End If chSerial(i).Close() chSerialCbb(i).SelectedIndex = -1 chSerialCbb(i).Text = "PRESS!" End If Next btnComport.Text = "스캔" End Sub Private Sub btnTimeSet_Click(sender As Object, e As EventArgs) Handles btnTimeSet.Click If nudMinute.Text.Replace(" ", "") = "" Or nudSecond.Text.Replace(" ", "") = "" Or nudMinute.Text.Replace(" ", "") = Nothing Or nudSecond.Text.Replace(" ", "") = Nothing Then MsgBox("시간이 입력되지 않았습니다. 시간을 입력하여 주십시오.", vbExclamation) Exit Sub End If If nudMinute.Text.Replace(" ", "") = 0 And nudSecond.Text.Replace(" ", "") = 0 Then MsgBox("카운트 할 시간이 존재하지 않습니다. 시간을 지정하여 주십시오.", vbExclamation) Exit Sub End If Dim timeData As String = timeSetting(Val(nudMinute.Value), Val(nudSecond.Value)) If timeData = "FAIL" Then Exit Sub End If For i = 1 To portCount startTime(i) = defSecond chTimeText(i).Text = timeData chTimeText(i).BackColor = Color.FromArgb(255, 192, 128) Next saveConfig() End Sub Private Function timeSetting(minData As Int16, secData As Int16) As String If minData = 0 And secData = 0 Then defSecond = 0 Else defSecond = secondFunc(minData, secData) If defSecond = -1 Then defSecond = 0 Return "FAIL" End If End If Return TimeSpan.FromSeconds(defSecond).ToString("mm\:ss") End Function Private Function secondFunc(hour As Int16, second As Int16) As Int16 Try Const hourSecond As Int16 = 60 Return (hour * hourSecond) + second Catch ex As Exception MsgBox("시간 변환 오류 :: " & ex.Message, vbCritical) Return -1 End Try End Function Private Sub btnRunning(chNum As Int16) Dim useSerial As SerialPort Dim useCh As Int16 If chNum > ch10FullCount Then useCh = chNum - ch10FullCount useSerial = chSerial(serialList.serial2) Else useCh = chNum useSerial = chSerial(serialList.serial1) End If If runState(chNum) = chState.wait Or runState(chNum) = chState.start Then If state_updown(useCh, 0, useSerial) Then processRun(chNum) Else runState(chNum) = chState.wait MsgBox("데이터 통신 불량", vbCritical) End If ElseIf runState(chNum) = chState.play Or runState(chNum) = chState.middleStop Or runState(chNum) = chState.endStop Then If state_updown(useCh, 1, useSerial) Then processRun(chNum) Else runState(chNum) = chState.wait MsgBox("데이터 통신 불량", vbCritical) End If Else MsgBox("상태 오류 발생") End If End Sub Private Sub btn_updown_ch1_Click(sender As Object, e As EventArgs) Handles btn_updown_ch1.Click Const chNum As Int16 = 1 btnRunning(chNum) End Sub Private Sub btn_updown_ch2_Click(sender As Object, e As EventArgs) Handles btn_updown_ch2.Click Const chNum As Int16 = 2 btnRunning(chNum) End Sub Private Sub btn_updown_ch3_Click(sender As Object, e As EventArgs) Handles btn_updown_ch3.Click Const chNum As Int16 = 3 btnRunning(chNum) End Sub Private Sub btn_updown_ch4_Click(sender As Object, e As EventArgs) Handles btn_updown_ch4.Click Const chNum As Int16 = 4 btnRunning(chNum) End Sub Private Sub btn_updown_ch5_Click(sender As Object, e As EventArgs) Handles btn_updown_ch5.Click Const chNum As Int16 = 5 btnRunning(chNum) End Sub Private Sub btn_updown_ch6_Click(sender As Object, e As EventArgs) Handles btn_updown_ch6.Click Const chNum As Int16 = 6 btnRunning(chNum) End Sub Private Sub btn_updown_ch7_Click(sender As Object, e As EventArgs) Handles btn_updown_ch7.Click Const chNum As Int16 = 7 btnRunning(chNum) End Sub Private Sub btn_updown_ch8_Click(sender As Object, e As EventArgs) Handles btn_updown_ch8.Click Const chNum As Int16 = 8 btnRunning(chNum) End Sub Private Sub btn_updown_ch9_Click(sender As Object, e As EventArgs) Handles btn_updown_ch9.Click Const chNum As Int16 = 9 btnRunning(chNum) End Sub Private Sub btn_updown_ch10_Click(sender As Object, e As EventArgs) Handles btn_updown_ch10.Click Const chNum As Int16 = 10 btnRunning(chNum) End Sub Private Sub btn_updown_ch11_Click(sender As Object, e As EventArgs) Handles btn_updown_ch11.Click Const chNum As Int16 = 11 btnRunning(chNum) End Sub Private Sub btn_updown_ch12_Click(sender As Object, e As EventArgs) Handles btn_updown_ch12.Click Const chNum As Int16 = 12 btnRunning(chNum) End Sub Private Sub btn_updown_ch13_Click(sender As Object, e As EventArgs) Handles btn_updown_ch13.Click Const chNum As Int16 = 13 btnRunning(chNum) End Sub Private Sub btn_updown_ch14_Click(sender As Object, e As EventArgs) Handles btn_updown_ch14.Click Const chNum As Int16 = 14 btnRunning(chNum) End Sub Private Sub btn_updown_ch15_Click(sender As Object, e As EventArgs) Handles btn_updown_ch15.Click Const chNum As Int16 = 15 btnRunning(chNum) End Sub Private Sub btn_updown_ch16_Click(sender As Object, e As EventArgs) Handles btn_updown_ch16.Click Const chNum As Int16 = 16 btnRunning(chNum) End Sub Private Sub btn_updown_ch17_Click(sender As Object, e As EventArgs) Handles btn_updown_ch17.Click Const chNum As Int16 = 17 btnRunning(chNum) End Sub Private Sub btn_updown_ch18_Click(sender As Object, e As EventArgs) Handles btn_updown_ch18.Click Const chNum As Int16 = 18 btnRunning(chNum) End Sub Private Sub btn_updown_ch19_Click(sender As Object, e As EventArgs) Handles btn_updown_ch19.Click Const chNum As Int16 = 19 btnRunning(chNum) End Sub Private Sub btn_updown_ch20_Click(sender As Object, e As EventArgs) Handles btn_updown_ch20.Click Const chNum As Int16 = 20 btnRunning(chNum) End Sub Private Sub btnSglStart1_Click(sender As Object, e As EventArgs) Handles btnSglStart1.Click Const chNum As Int16 = 1 btnRunning(chNum) End Sub Private Sub btnSglStart2_Click(sender As Object, e As EventArgs) Handles btnSglStart2.Click Const chNum As Int16 = 2 btnRunning(chNum) End Sub Private Sub btnSglStart3_Click(sender As Object, e As EventArgs) Handles btnSglStart3.Click Const chNum As Int16 = 3 btnRunning(chNum) End Sub Private Sub btnSglStart4_Click(sender As Object, e As EventArgs) Handles btnSglStart4.Click Const chNum As Int16 = 4 btnRunning(chNum) End Sub Private Sub btnSglStart5_Click(sender As Object, e As EventArgs) Handles btnSglStart5.Click Const chNum As Int16 = 5 btnRunning(chNum) End Sub Private Sub btnSglStart6_Click(sender As Object, e As EventArgs) Handles btnSglStart6.Click Const chNum As Int16 = 6 btnRunning(chNum) End Sub Private Sub btnSglStart7_Click(sender As Object, e As EventArgs) Handles btnSglStart7.Click Const chNum As Int16 = 7 btnRunning(chNum) End Sub Private Sub btnSglStart8_Click(sender As Object, e As EventArgs) Handles btnSglStart8.Click Const chNum As Int16 = 8 btnRunning(chNum) End Sub Private Sub btnSglStart9_Click(sender As Object, e As EventArgs) Handles btnSglStart9.Click Const chNum As Int16 = 9 btnRunning(chNum) End Sub Private Sub btnSglStart10_Click(sender As Object, e As EventArgs) Handles btnSglStart10.Click Const chNum As Int16 = 10 btnRunning(chNum) End Sub Private Sub processRun(chNum As Int16) If runState(chNum) = chState.wait Or runState(chNum) = chState.start Then If runState(chNum) = chState.wait Then runState(chNum) = chState.start End If runDataReset(chNum) playDate(chNum) = Format(Now, "yyyy") & "-" & Format(Now, "MM") & "-" & Format(Now, "dd") playTime(chNum) = Format(Now, "HH") & ":" & Format(Now, "mm") & ":" & Format(Now, "ss") makeCount += 1 playNumber(chNum) = makeCount chTimebtn(chNum).Enabled = False chResetbtn(chNum).Enabled = False chStartbtn(chNum).Text = "정 지" chTimeText(chNum).Text = TimeSpan.FromSeconds(startTime(chNum)).ToString("mm\:ss") chTimeText(chNum).BackColor = Color.Yellow runColor(chNum) = False nowTime(chNum) = startTime(chNum) runState(chNum) = True runSystemOnOff(True) runState(chNum) = chState.play Else Dim OkNg As Boolean = False If nowTime(chNum) = 0 Then runState(chNum) = chState.endStop OkNg = True chTimeText(chNum).BackColor = Color.Green Else runState(chNum) = chState.middleStop OkNg = False chTimeText(chNum).BackColor = Color.Red End If chTimebtn(chNum).Enabled = True chResetbtn(chNum).Enabled = True chStartbtn(chNum).Text = "시 작" runState(chNum) = False runSystemOnOff(False) saveLocalFile(chNum) Dim chPlayTime As Integer = startTime(chNum) - nowTime(chNum) mqttSendData = "[{""jigch"":""" & chNum & """},{""testdate"":""" & playDate(chNum) & """},{""testtime"":""" & playTime(chNum) & """},{""cartnum"":""" & playNumber(chNum) & """},{""test_result"":""" & OkNg & """},{""runtime"":""" & TimeSpan.FromSeconds(chPlayTime).ToString("mm\:ss") & """}]" Mqtt_DataSend(mqttSendData) finishRefresh(chNum) txbToday.Text += 1 runState(chNum) = chState.wait End If End Sub Private Function state_updown(ch_num As Int16, state_num As Int16, srlPort As SerialPort) As Boolean tmpCmdMessage = "setsolch" cmdMessage = "[" & tmpCmdMessage & " " & ch_num & "," & state_num & "]" + vbCrLf If SendData(cmdMessage, srlPort) Then Return False End If Return True End Function Private Function SendData(SendMessage As String, srl_name As SerialPort) As Boolean Try If srl_name.IsOpen = True Then srl_name.DiscardInBuffer() srl_name.DiscardOutBuffer() If srl_name.BytesToRead Then srl_name.DiscardInBuffer() End If srl_name.WriteTimeout = 10 srl_name.WriteLine(SendMessage) Return False Else MsgBox("통신 포트가 열리지 않았습니다.", vbCritical) Return True End If Catch ex As Exception Return True End Try Return True End Function Private Sub runSystemOnOff(onOff As Boolean) '' true : 동작 시작 시 / false : 동작 종료 시 If onOff = True Then If btnAllReset.Enabled = True Then For i = 1 To portCount If runState(i) = True Then gbTimeSet.Enabled = False btnAllReset.Enabled = False End If Next End If Else For i = 1 To portCount If runState(i) = True Then Exit Sub End If Next gbTimeSet.Enabled = True btnAllReset.Enabled = True End If End Sub Private Sub playTimer_Tick(sender As Object, e As EventArgs) Handles playTimer.Tick For i = 1 To portCount If runState(i) = chState.play Then nowTime(i) -= 1 chTimeText(i).Text = TimeSpan.FromSeconds(nowTime(i)).ToString("mm\:ss") If runColor(i) = True Then runColor(i) = False chTimeText(i).BackColor = Color.Moccasin Else runColor(i) = True chTimeText(i).BackColor = Color.Pink End If If nowTime(i) = 0 Then btnRunning(i) End If ElseIf runState(i) = chState.middleStop Or runState(i) = chState.endStop Or runState(i) = chState.start Then btnRunning(i) End If Next End Sub Private Sub runDataReset(chNum As Int16) playDate(chNum) = String.Empty playTime(chNum) = String.Empty playNumber(chNum) = String.Empty playOKNG(chNum) = False runTime(chNum) = String.Empty mqttSendData = String.Empty End Sub Private Sub btn_reg_ch1_Click(sender As Object, e As EventArgs) Handles btn_reg_ch1.Click Const chNum As Int16 = 1 timeChangeForm(chNum) End Sub Private Sub btn_reg_ch2_Click(sender As Object, e As EventArgs) Handles btn_reg_ch2.Click Const chNum As Int16 = 2 timeChangeForm(chNum) End Sub Private Sub btn_reg_ch3_Click(sender As Object, e As EventArgs) Handles btn_reg_ch3.Click Const chNum As Int16 = 3 timeChangeForm(chNum) End Sub Private Sub btn_reg_ch4_Click(sender As Object, e As EventArgs) Handles btn_reg_ch4.Click Const chNum As Int16 = 4 timeChangeForm(chNum) End Sub Private Sub btn_reg_ch5_Click(sender As Object, e As EventArgs) Handles btn_reg_ch5.Click Const chNum As Int16 = 5 timeChangeForm(chNum) End Sub Private Sub btn_reg_ch6_Click(sender As Object, e As EventArgs) Handles btn_reg_ch6.Click Const chNum As Int16 = 6 timeChangeForm(chNum) End Sub Private Sub btn_reg_ch7_Click(sender As Object, e As EventArgs) Handles btn_reg_ch7.Click Const chNum As Int16 = 7 timeChangeForm(chNum) End Sub Private Sub btn_reg_ch8_Click(sender As Object, e As EventArgs) Handles btn_reg_ch8.Click Const chNum As Int16 = 8 timeChangeForm(chNum) End Sub Private Sub btn_reg_ch9_Click(sender As Object, e As EventArgs) Handles btn_reg_ch9.Click Const chNum As Int16 = 9 timeChangeForm(chNum) End Sub Private Sub btn_reg_ch10_Click(sender As Object, e As EventArgs) Handles btn_reg_ch10.Click Const chNum As Int16 = 10 timeChangeForm(chNum) End Sub Private Sub btn_reg_ch11_Click(sender As Object, e As EventArgs) Handles btn_reg_ch11.Click Const chNum As Int16 = 11 timeChangeForm(chNum) End Sub Private Sub btn_reg_ch12_Click(sender As Object, e As EventArgs) Handles btn_reg_ch12.Click Const chNum As Int16 = 12 timeChangeForm(chNum) End Sub Private Sub btn_reg_ch13_Click(sender As Object, e As EventArgs) Handles btn_reg_ch13.Click Const chNum As Int16 = 13 timeChangeForm(chNum) End Sub Private Sub btn_reg_ch14_Click(sender As Object, e As EventArgs) Handles btn_reg_ch14.Click Const chNum As Int16 = 14 timeChangeForm(chNum) End Sub Private Sub btn_reg_ch15_Click(sender As Object, e As EventArgs) Handles btn_reg_ch15.Click Const chNum As Int16 = 15 timeChangeForm(chNum) End Sub Private Sub btn_reg_ch16_Click(sender As Object, e As EventArgs) Handles btn_reg_ch16.Click Const chNum As Int16 = 16 timeChangeForm(chNum) End Sub Private Sub btn_reg_ch17_Click(sender As Object, e As EventArgs) Handles btn_reg_ch17.Click Const chNum As Int16 = 17 timeChangeForm(chNum) End Sub Private Sub btn_reg_ch18_Click(sender As Object, e As EventArgs) Handles btn_reg_ch18.Click Const chNum As Int16 = 18 timeChangeForm(chNum) End Sub Private Sub btn_reg_ch19_Click(sender As Object, e As EventArgs) Handles btn_reg_ch19.Click Const chNum As Int16 = 19 timeChangeForm(chNum) End Sub Private Sub btn_reg_ch20_Click(sender As Object, e As EventArgs) Handles btn_reg_ch20.Click Const chNum As Int16 = 20 timeChangeForm(chNum) End Sub Private Sub btnSglEdit1_Click(sender As Object, e As EventArgs) Handles btnSglEdit1.Click Const chNum As Int16 = 1 timeChangeForm(chNum) End Sub Private Sub btnSglEdit2_Click(sender As Object, e As EventArgs) Handles btnSglEdit2.Click Const chNum As Int16 = 2 timeChangeForm(chNum) End Sub Private Sub btnSglEdit3_Click(sender As Object, e As EventArgs) Handles btnSglEdit3.Click Const chNum As Int16 = 3 timeChangeForm(chNum) End Sub Private Sub btnSglEdit4_Click(sender As Object, e As EventArgs) Handles btnSglEdit4.Click Const chNum As Int16 = 4 timeChangeForm(chNum) End Sub Private Sub btnSglEdit5_Click(sender As Object, e As EventArgs) Handles btnSglEdit5.Click Const chNum As Int16 = 5 timeChangeForm(chNum) End Sub Private Sub btnSglEdit6_Click(sender As Object, e As EventArgs) Handles btnSglEdit6.Click Const chNum As Int16 = 6 timeChangeForm(chNum) End Sub Private Sub btnSglEdit7_Click(sender As Object, e As EventArgs) Handles btnSglEdit7.Click Const chNum As Int16 = 7 timeChangeForm(chNum) End Sub Private Sub btnSglEdit8_Click(sender As Object, e As EventArgs) Handles btnSglEdit8.Click Const chNum As Int16 = 8 timeChangeForm(chNum) End Sub Private Sub btnSglEdit9_Click(sender As Object, e As EventArgs) Handles btnSglEdit9.Click Const chNum As Int16 = 9 timeChangeForm(chNum) End Sub Private Sub btnSglEdit10_Click(sender As Object, e As EventArgs) Handles btnSglEdit10.Click Const chNum As Int16 = 10 timeChangeForm(chNum) End Sub Private Sub timeChangeForm(chNum As Int16) If chTimePanel(chNum).Visible = True Then Dim secondValue As Integer = secondFunc(Val(chTimeMin(chNum).Value), Val(chTimeSec(chNum).Value)) If secondValue = -1 Then Exit Sub End If Dim timeChange As String = TimeSpan.FromSeconds(secondValue).ToString("mm\:ss") startTime(chNum) = secondValue chTimeText(chNum).Text = timeChange chTimeText(chNum).BackColor = Color.FromArgb(255, 192, 128) chTimeText(chNum).Visible = True chTimeText(chNum).Enabled = True chTimePanel(chNum).Visible = False chTimePanel(chNum).Enabled = False chTimebtn(chNum).Text = "타이머 수정" chStartbtn(chNum).Enabled = True chResetbtn(chNum).Enabled = True Else chTimePanel(chNum).Visible = True chTimePanel(chNum).Enabled = True chTimeText(chNum).Visible = False chTimeText(chNum).Enabled = False chTimeMin(chNum).Value = startTime(chNum) \ 60 chTimeSec(chNum).Value = startTime(chNum) Mod 60 chTimebtn(chNum).Text = "완료" chStartbtn(chNum).Enabled = False chResetbtn(chNum).Enabled = False End If End Sub Private Sub btn_reset_ch1_Click(sender As Object, e As EventArgs) Handles btn_reset_ch1.Click Const chNum As Int16 = 1 timeResetFunc(chNum) End Sub Private Sub btn_reset_ch2_Click(sender As Object, e As EventArgs) Handles btn_reset_ch2.Click Const chNum As Int16 = 2 timeResetFunc(chNum) End Sub Private Sub btn_reset_ch3_Click(sender As Object, e As EventArgs) Handles btn_reset_ch3.Click Const chNum As Int16 = 3 timeResetFunc(chNum) End Sub Private Sub btn_reset_ch4_Click(sender As Object, e As EventArgs) Handles btn_reset_ch4.Click Const chNum As Int16 = 4 timeResetFunc(chNum) End Sub Private Sub btn_reset_ch5_Click(sender As Object, e As EventArgs) Handles btn_reset_ch5.Click Const chNum As Int16 = 5 timeResetFunc(chNum) End Sub Private Sub btn_reset_ch6_Click(sender As Object, e As EventArgs) Handles btn_reset_ch6.Click Const chNum As Int16 = 6 timeResetFunc(chNum) End Sub Private Sub btn_reset_ch7_Click(sender As Object, e As EventArgs) Handles btn_reset_ch7.Click Const chNum As Int16 = 7 timeResetFunc(chNum) End Sub Private Sub btn_reset_ch8_Click(sender As Object, e As EventArgs) Handles btn_reset_ch8.Click Const chNum As Int16 = 8 timeResetFunc(chNum) End Sub Private Sub btn_reset_ch9_Click(sender As Object, e As EventArgs) Handles btn_reset_ch9.Click Const chNum As Int16 = 9 timeResetFunc(chNum) End Sub Private Sub btn_reset_ch10_Click(sender As Object, e As EventArgs) Handles btn_reset_ch10.Click Const chNum As Int16 = 10 timeResetFunc(chNum) End Sub Private Sub btn_reset_ch11_Click(sender As Object, e As EventArgs) Handles btn_reset_ch11.Click Const chNum As Int16 = 11 timeResetFunc(chNum) End Sub Private Sub btn_reset_ch12_Click(sender As Object, e As EventArgs) Handles btn_reset_ch12.Click Const chNum As Int16 = 12 timeResetFunc(chNum) End Sub Private Sub btn_reset_ch13_Click(sender As Object, e As EventArgs) Handles btn_reset_ch13.Click Const chNum As Int16 = 13 timeResetFunc(chNum) End Sub Private Sub btn_reset_ch14_Click(sender As Object, e As EventArgs) Handles btn_reset_ch14.Click Const chNum As Int16 = 14 timeResetFunc(chNum) End Sub Private Sub btn_reset_ch15_Click(sender As Object, e As EventArgs) Handles btn_reset_ch15.Click Const chNum As Int16 = 15 timeResetFunc(chNum) End Sub Private Sub btn_reset_ch16_Click(sender As Object, e As EventArgs) Handles btn_reset_ch16.Click Const chNum As Int16 = 16 timeResetFunc(chNum) End Sub Private Sub btn_reset_ch17_Click(sender As Object, e As EventArgs) Handles btn_reset_ch17.Click Const chNum As Int16 = 17 timeResetFunc(chNum) End Sub Private Sub btn_reset_ch18_Click(sender As Object, e As EventArgs) Handles btn_reset_ch18.Click Const chNum As Int16 = 18 timeResetFunc(chNum) End Sub Private Sub btn_reset_ch19_Click(sender As Object, e As EventArgs) Handles btn_reset_ch19.Click Const chNum As Int16 = 19 timeResetFunc(chNum) End Sub Private Sub btn_reset_ch20_Click(sender As Object, e As EventArgs) Handles btn_reset_ch20.Click Const chNum As Int16 = 20 timeResetFunc(chNum) End Sub Private Sub btnSglReset1_Click(sender As Object, e As EventArgs) Handles btnSglReset1.Click Const chNum As Int16 = 1 timeResetFunc(chNum) End Sub Private Sub btnSglReset2_Click(sender As Object, e As EventArgs) Handles btnSglReset2.Click Const chNum As Int16 = 2 timeResetFunc(chNum) End Sub Private Sub btnSglReset3_Click(sender As Object, e As EventArgs) Handles btnSglReset3.Click Const chNum As Int16 = 3 timeResetFunc(chNum) End Sub Private Sub btnSglReset4_Click(sender As Object, e As EventArgs) Handles btnSglReset4.Click Const chNum As Int16 = 4 timeResetFunc(chNum) End Sub Private Sub btnSglReset5_Click(sender As Object, e As EventArgs) Handles btnSglReset5.Click Const chNum As Int16 = 5 timeResetFunc(chNum) End Sub Private Sub btnSglReset6_Click(sender As Object, e As EventArgs) Handles btnSglReset6.Click Const chNum As Int16 = 6 timeResetFunc(chNum) End Sub Private Sub btnSglReset7_Click(sender As Object, e As EventArgs) Handles btnSglReset7.Click Const chNum As Int16 = 7 timeResetFunc(chNum) End Sub Private Sub btnSglReset8_Click(sender As Object, e As EventArgs) Handles btnSglReset8.Click Const chNum As Int16 = 8 timeResetFunc(chNum) End Sub Private Sub btnSglReset9_Click(sender As Object, e As EventArgs) Handles btnSglReset9.Click Const chNum As Int16 = 9 timeResetFunc(chNum) End Sub Private Sub btnSglReset10_Click(sender As Object, e As EventArgs) Handles btnSglReset10.Click Const chNum As Int16 = 10 timeResetFunc(chNum) End Sub Private Sub timeResetFunc(chNum As Int16) chTimeText(chNum).Text = TimeSpan.FromSeconds(startTime(chNum)).ToString("mm\:ss") chTimeText(chNum).BackColor = Color.FromArgb(255, 192, 128) End Sub Private Sub btnManager_Click(sender As Object, e As EventArgs) Handles btnManager.Click If ManagerLogin.ShowDialog = DialogResult.OK Then ManagerForm.Show() End If End Sub Private Sub btnAllReset_Click(sender As Object, e As EventArgs) Handles btnAllReset.Click For i = 1 To portCount chTimeText(i).Text = TimeSpan.FromSeconds(startTime(i)).ToString("mm\:ss") chTimeText(i).BackColor = Color.FromArgb(255, 192, 128) Next End Sub Private Sub btnComport_Click(sender As Object, e As EventArgs) Handles btnComport.Click If btnComport.Text = "스캔" Then serialSetting() For i = 0 To chSerial.Length - 1 If LoadComportName(i) Then btnComport.Text = "연결" systemOnOff(False) Else Exit Sub End If Next Else For i = 0 To chSerial.Length - 1 If chSerial(i).IsOpen = True Then chSerial(i).Close() End If If chSerialCbb(i).SelectedIndex = -1 Then MsgBox("선택하지 않은 포트가 존재합니다. 확인하여 주십시오.", vbExclamation) Exit Sub Else If chSerialCbb(serialList.serial1).SelectedItem = chSerialCbb(serialList.serial2).SelectedItem Then MsgBox("같은 COM포트를 사용할 수 없습니다. 다시 설정하여 주십시오.", vbExclamation) Exit Sub End If End If Next For i = 0 To chSerial.Length - 1 If OpenSerial(i) Then systemOnOff(True) saveConfig() Else systemOnOff(False) Exit For End If Next rdbTime.Checked = True rdbPort.Checked = False btnComport.Text = "스캔" End If End Sub Private Sub serialSetting() If rdbport10.Checked = True Then ReDim chSerial(serialList.serial1) chSerial(serialList.serial1) = Serial_1Port Else ReDim chSerial(serialList.serial2) chSerial(serialList.serial1) = Serial_1Port chSerial(serialList.serial2) = Serial_2Port End If End Sub Private Function OpenSerial(serialNum As Int16) As Boolean Try Dim baudRateSet As Integer If rdbport10.Checked = True Then baudRateSet = 230400 Else baudRateSet = 115200 End If If chSerialCbb(serialNum).SelectedItem <> "" Then If chSerial(serialNum).IsOpen = False Then With chSerial(serialNum) .PortName = chSerialCbb(serialNum).SelectedItem .BaudRate = baudRateSet .DataBits = 8 .Parity = Parity.None .StopBits = StopBits.One .Handshake = Handshake.None .ReadTimeout = 50 .WriteTimeout = 1 End With chSerial(serialNum).Open() If serialNum = serialList.serial1 Then ch1_ThreadRun() Else ch2_ThreadRun() End If Else MsgBox("사용중인 포트가 존재합니다. 종료 후 다시 설정하여 주십시오.", vbCritical) Return False End If Else MsgBox("지정하지 않은 시리얼 포트가 존재합니다! 시리얼 포트를 지정하여 주십시오.", vbCritical) Return False End If Return True Catch ex As Exception MsgBox("COM 포트 에러" & vbCrLf & "", vbOK + vbCritical, "DUALSONIC Cartridge Film Pressing") Return False End Try Return False End Function Private Function LoadComportName(portNum As Int16) As Boolean Dim portname() As String Try portname = SerialPort.GetPortNames chSerialCbb(portNum).Items.Clear() For cnt = 0 To portname.Length - 1 chSerialCbb(portNum).Items.Add(portname(cnt)) Next chSerialCbb(portNum).Text = "PRESS!" Return True Catch ex As Exception MsgBox("COM 포트 에러" & vbCrLf & "", vbOK + vbCritical, "DUALSONIC Cartridge Film Pressing") Return False End Try End Function Private Sub saveConfig() On Error GoTo failConfig Dim rdbCheck As Boolean = False Dim filePath As String = System.AppDomain.CurrentDomain.BaseDirectory & "\Config" If Dir(filePath, vbDirectory) = "" Then MkDir(filePath) End If Dim fileName As String = filePath & "\Config.ini" If rdbport10.Checked = True Then rdbCheck = False Else rdbCheck = True End If Dim saveStr As String = nudMinute.Value & "^" & nudSecond.Value & "^" & rdbCheck & "^" & cbbPort1.SelectedItem & "^" & cbbPort2.SelectedItem If File.Exists(fileName) Then File.Delete(fileName) End If File.WriteAllText(fileName, saveStr, Encoding.UTF8) Exit Sub failConfig: MsgBox("Config Save Fail!!") End Sub Private Sub loadConfig() Const checkCount As Int16 = 4 On Error GoTo failConfig Dim filePath As String = System.AppDomain.CurrentDomain.BaseDirectory & "\Config" Dim minData, secData, secondValue As Integer If Dir(filePath, vbDirectory) = "" Then MkDir(filePath) End If Dim fileName As String = filePath & "\Config.ini" If File.Exists(fileName) = True Then Dim readData As String = File.ReadAllText(fileName, Encoding.UTF8) If readData <> Nothing Then Dim useData As Int16 = UBound(Split(readData, "^")) If useData = checkCount Then For i = 0 To useData Dim dataStr As String If i = useData Then dataStr = readData Else dataStr = Mid(readData, 1, InStr(readData, "^") - 1) readData = Mid(readData, InStr(readData, "^") + 1, readData.Length) End If Select Case i Case saveList.min If IsNumeric(dataStr) = True Then minData = dataStr Else minData = 0 End If nudMinute.Value = minData Case saveList.sec If IsNumeric(dataStr) = True Then secData = dataStr Else secData = 0 End If nudSecond.Value = secData Case saveList.chCount If dataStr = True Then rdbport10.Checked = False rdbport20.Checked = True Else rdbport10.Checked = True rdbport20.Checked = False End If Case saveList.com1 If LoadComportName(serialList.serial1) = False Then Exit Sub End If For cnt = 0 To chSerialCbb(serialList.serial1).Items.Count - 1 If dataStr = chSerialCbb(serialList.serial1).Items(cnt) Then chSerialCbb(serialList.serial1).SelectedIndex = cnt If OpenSerial(serialList.serial1) = False Then Exit Sub Else Exit For End If End If Next Case saveList.com2 If LoadComportName(serialList.serial2) = False Then Exit Sub End If For cnt = 0 To chSerialCbb(serialList.serial2).Items.Count - 1 If dataStr = chSerialCbb(serialList.serial2).Items(cnt) Then chSerialCbb(serialList.serial2).SelectedIndex = cnt If OpenSerial(serialList.serial2) = False Then Exit Sub Else Exit For End If End If Next End Select Next Else nudMinute.Value = 15 nudSecond.Value = 0 rdbport10.Checked = False rdbport20.Checked = True End If Else nudMinute.Value = 15 nudSecond.Value = 0 rdbport10.Checked = False rdbport20.Checked = True End If Else nudMinute.Value = 15 nudSecond.Value = 0 rdbport10.Checked = False rdbport20.Checked = True End If If chSerial.Length = serialList.serial1 + 1 Then If chSerial(serialList.serial1).IsOpen = True Then systemOnOff(True) rdbTime.Checked = True rdbPort.Checked = False Else systemOnOff(False) rdbTime.Checked = False rdbPort.Checked = True End If Else If chSerial(serialList.serial1).IsOpen = True And chSerial(serialList.serial2).IsOpen = True Then systemOnOff(True) rdbTime.Checked = True rdbPort.Checked = False Else systemOnOff(False) rdbTime.Checked = False rdbPort.Checked = True End If End If Exit Sub failConfig: MsgBox("Config Load Fail!!") nudMinute.Value = 15 nudSecond.Value = 0 rdbport10.Checked = False rdbport20.Checked = True End Sub Public Function mqttConnect() As Boolean Try If mqttBroker = String.Empty Or mqttTopic = String.Empty Then MsgBox("MQTT 브로커 혹은 토픽을 알 수 없습니다." & vbCrLf & "설정하여 주십시오.", vbExclamation) Return False End If MQTClient = New MqttClient(mqttBroker) Dim ClientID As String = Guid.NewGuid.ToString MQTClient.Connect(ClientID) If MQTClient.IsConnected = True Then Return True Else MsgBox("존재하지 않는 Broker 명입니다. 확인해 주십시오.", vbCritical) Return False End If Catch ex As Exception MsgBox("오류 발생 :: " & ex.Message.ToString, vbCritical) Return False End Try End Function Public Function mqttNowConnect() As Boolean Try Return MQTClient.IsConnected.ToString Catch null As NullReferenceException Return False Catch ex As Exception Return False End Try End Function Private Sub systemOnOff(onoff As Boolean) ''on : true / off : false If onoff = True Then For i = 1 To portCount chGroup(i).Enabled = True Next Else For i = 1 To portCount chGroup(i).Enabled = False Next End If End Sub Private Sub Main_Form_FormClosed(sender As Object, e As FormClosedEventArgs) Handles MyBase.FormClosed exitProcess() End Sub Private Sub btn_exit_Click(sender As Object, e As EventArgs) Handles btn_exit.Click exitProcess() End End Sub Private Sub exitProcess() If chSerial(serialList.serial1).IsOpen = True Then If runCH1_Thread.IsAlive = True Then runCH1_Thread.Abort() End If chSerial(serialList.serial1).Close() End If If chSerial(serialList.serial2).IsOpen = True Then If runCH2_Thread.IsAlive = True Then runCH2_Thread.Abort() End If chSerial(serialList.serial2).Close() End If End Sub Private Sub txbState_gotFocus(sender As Object, e As EventArgs) Handles txbState.GotFocus txbToday.Focus() End Sub Private Sub btnAllRun_Click(sender As Object, e As EventArgs) Handles btnAllRun.Click If btnAllRun.Text = "전체" & vbCrLf & "내리기" Then If playTimer.Enabled = False Then playTimer.Enabled = True End If For i = 1 To portCount If runState(i) = chState.wait Then runState(i) = chState.start End If Next btnAllRun.Text = "전체" & vbCrLf & "올리기" Else For i = 1 To portCount If runState(i) <> chState.wait Then runState(i) = chState.middleStop End If Next btnAllRun.Text = "전체" & vbCrLf & "내리기" End If End Sub Private Sub saveLocalFile(chNum As Int16) Try Dim strData As String = String.Empty Dim saveYear As String = Format(playDate(chNum), "yyyy") Dim saveMonth As String = Format(playDate(chNum), "MM") Dim saveDay As String = Format(playDate(chNum), "dd") If Dir(filePath, vbDirectory) = "" Then MkDir(filePath) End If Dim fileName As String = filePath & "\" & saveYear & "_" & saveMonth & ".csv" Dim saveData As String = playDate(chNum) & "," & playNumber(chNum) If File.Exists(fileName) = True Then strData = File.ReadAllText(fileName, Encoding.UTF8) If strData = "" Or strData = vbCrLf Or strData = Nothing Then strData = csvSaveForm & vbCrLf & saveData & vbCrLf Else If UBound(Split(strData, playDate(chNum))) > 0 Then strData = Mid(strData, 1, InStr(strData, playDate(chNum)) - 1) strData = strData & saveData & vbCrLf Else strData = strData & saveData & vbCrLf End If End If Else strData = csvSaveForm & vbCrLf & saveData & vbCrLf End If File.WriteAllText(fileName, strData, Encoding.UTF8) Catch ex As Exception MsgBox("오류 발생 :: " & ex.Message, vbCritical) End Try End Sub Private Function loadLocalFile() As Boolean Try Dim strData As String = String.Empty Dim saveYear As String = Format(Now, "yyyy") Dim saveMonth As String = Format(Now, "MM") Dim saveDay As String = Format(Now, "dd") Dim saveDate As String = saveYear & "-" & saveMonth & "-" & saveDay If Dir(filePath, vbDirectory) = "" Then MkDir(filePath) End If Dim fileName As String = filePath & "\" & saveYear & "_" & saveMonth & ".csv" If File.Exists(fileName) Then strData = File.ReadAllText(fileName) If UBound(Split(strData, saveDate)) > 0 Then makeCount = Val(Mid(strData, InStr(strData, saveDate), InStr(strData, vbCrLf) - 1)) Else makeCount = 0 End If Else makeCount = 0 End If Return True Catch ex As Exception MsgBox("오류 발생 :: " & ex.Message, vbCritical) Return False End Try End Function Private Sub Mqtt_DataSend(loadText As String) Try If loadText.Replace(" ", "") = "" Then MsgBox("저장할 데이터가 존재하지 않습니다. 데이터를 확인하여 주십시오.", vbCritical) Exit Sub End If If MQTClient IsNot Nothing AndAlso MQTClient.IsConnected Then If mqttTopic.Length <> 0 Then Try Dim qos As Byte = 0 MQTClient.Publish(mqttTopic, System.Text.Encoding.Default.GetBytes(loadText), qos, False) Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical) End Try Else MsgBox("토픽을 지정하지 않았습니다. 토픽을 지정하여 주십시오.", vbExclamation) End If Else MsgBox("Broker 호스트와 연결되지 않았습니다. 호스트와 연결하여 주십시오.", vbExclamation) End If Catch ex As Exception MsgBox(ex.Message) End Try End Sub Private Sub finishRefresh(chNum As Int16) chTimeText(chNum).Refresh() chTimePanel(chNum).Refresh() chTimeMin(chNum).Refresh() chTimeSec(chNum).Refresh() chTimebtn(chNum).Refresh() chStartbtn(chNum).Refresh() chResetbtn(chNum).Refresh() End Sub Private Sub componentSetting(arrayLength As Int16) ReDim startTime(arrayLength) ReDim nowTime(arrayLength) ReDim runState(arrayLength) ReDim runColor(arrayLength) ReDim playDate(arrayLength) ReDim playTime(arrayLength) ReDim playNumber(arrayLength) ReDim playOKNG(arrayLength) ReDim runTime(arrayLength) ReDim chTimeText(arrayLength) ReDim chTimePanel(arrayLength) ReDim chTimeMin(arrayLength) ReDim chTimeSec(arrayLength) ReDim chTimebtn(arrayLength) ReDim chStartbtn(arrayLength) ReDim chResetbtn(arrayLength) ReDim chGroup(arrayLength) End Sub Private Sub DataSetting() If rdbport10.Checked = True Then portCount = ch10FullCount componentSetting(portCount) chTimeText(1) = txbSglCH1 chTimeText(2) = txbSglCH2 chTimeText(3) = txbSglCH3 chTimeText(4) = txbSglCH4 chTimeText(5) = txbSglCH5 chTimeText(6) = txbSglCH6 chTimeText(7) = txbSglCH7 chTimeText(8) = txbSglCH8 chTimeText(9) = txbSglCH9 chTimeText(10) = txbSglCH10 chTimePanel(1) = pnSglEdit1 chTimePanel(2) = pnSglEdit2 chTimePanel(3) = pnSglEdit3 chTimePanel(4) = pnSglEdit4 chTimePanel(5) = pnSglEdit5 chTimePanel(6) = pnSglEdit6 chTimePanel(7) = pnSglEdit7 chTimePanel(8) = pnSglEdit8 chTimePanel(9) = pnSglEdit9 chTimePanel(10) = pnSglEdit10 chTimeMin(1) = nudSglMin1 chTimeMin(2) = nudSglMin2 chTimeMin(3) = nudSglMin3 chTimeMin(4) = nudSglMin4 chTimeMin(5) = nudSglMin5 chTimeMin(6) = nudSglMin6 chTimeMin(7) = nudSglMin7 chTimeMin(8) = nudSglMin8 chTimeMin(9) = nudSglMin9 chTimeMin(10) = nudSglMin10 chTimeSec(1) = nudSglSec1 chTimeSec(2) = nudSglSec2 chTimeSec(3) = nudSglSec3 chTimeSec(4) = nudSglSec4 chTimeSec(5) = nudSglSec5 chTimeSec(6) = nudSglSec6 chTimeSec(7) = nudSglSec7 chTimeSec(8) = nudSglSec8 chTimeSec(9) = nudSglSec9 chTimeSec(10) = nudSglSec10 chTimebtn(1) = btnSglEdit1 chTimebtn(2) = btnSglEdit2 chTimebtn(3) = btnSglEdit3 chTimebtn(4) = btnSglEdit4 chTimebtn(5) = btnSglEdit5 chTimebtn(6) = btnSglEdit6 chTimebtn(7) = btnSglEdit7 chTimebtn(8) = btnSglEdit8 chTimebtn(9) = btnSglEdit9 chTimebtn(10) = btnSglEdit10 chStartbtn(1) = btnSglStart1 chStartbtn(2) = btnSglStart2 chStartbtn(3) = btnSglStart3 chStartbtn(4) = btnSglStart4 chStartbtn(5) = btnSglStart5 chStartbtn(6) = btnSglStart6 chStartbtn(7) = btnSglStart7 chStartbtn(8) = btnSglStart8 chStartbtn(9) = btnSglStart9 chStartbtn(10) = btnSglStart10 chResetbtn(1) = btnSglReset1 chResetbtn(2) = btnSglReset2 chResetbtn(3) = btnSglReset3 chResetbtn(4) = btnSglReset4 chResetbtn(5) = btnSglReset5 chResetbtn(6) = btnSglReset6 chResetbtn(7) = btnSglReset7 chResetbtn(8) = btnSglReset8 chResetbtn(9) = btnSglReset9 chResetbtn(10) = btnSglReset10 chGroup(1) = gbSglCH1 chGroup(2) = gbSglCH2 chGroup(3) = gbSglCH3 chGroup(4) = gbSglCH4 chGroup(5) = gbSglCH5 chGroup(6) = gbSglCH6 chGroup(7) = gbSglCH7 chGroup(8) = gbSglCH8 chGroup(9) = gbSglCH9 chGroup(10) = gbSglCH10 Else portCount = ch20FullCount componentSetting(portCount) chTimeText(1) = txb_timer_ch1 chTimeText(2) = txb_timer_ch2 chTimeText(3) = txb_timer_ch3 chTimeText(4) = txb_timer_ch4 chTimeText(5) = txb_timer_ch5 chTimeText(6) = txb_timer_ch6 chTimeText(7) = txb_timer_ch7 chTimeText(8) = txb_timer_ch8 chTimeText(9) = txb_timer_ch9 chTimeText(10) = txb_timer_ch10 chTimeText(11) = txb_timer_ch11 chTimeText(12) = txb_timer_ch12 chTimeText(13) = txb_timer_ch13 chTimeText(14) = txb_timer_ch14 chTimeText(15) = txb_timer_ch15 chTimeText(16) = txb_timer_ch16 chTimeText(17) = txb_timer_ch17 chTimeText(18) = txb_timer_ch18 chTimeText(19) = txb_timer_ch19 chTimeText(20) = txb_timer_ch20 chTimePanel(1) = pnReg1 chTimePanel(2) = pnReg2 chTimePanel(3) = pnReg3 chTimePanel(4) = pnReg4 chTimePanel(5) = pnReg5 chTimePanel(6) = pnReg6 chTimePanel(7) = pnReg7 chTimePanel(8) = pnReg8 chTimePanel(9) = pnReg9 chTimePanel(10) = pnReg10 chTimePanel(11) = pnReg11 chTimePanel(12) = pnReg12 chTimePanel(13) = pnReg13 chTimePanel(14) = pnReg14 chTimePanel(15) = pnReg15 chTimePanel(16) = pnReg16 chTimePanel(17) = pnReg17 chTimePanel(18) = pnReg18 chTimePanel(19) = pnReg19 chTimePanel(20) = pnReg20 chTimeMin(1) = nudMin1 chTimeMin(2) = nudMin2 chTimeMin(3) = nudMin3 chTimeMin(4) = nudMin4 chTimeMin(5) = nudMin5 chTimeMin(6) = nudMin6 chTimeMin(7) = nudMin7 chTimeMin(8) = nudMin8 chTimeMin(9) = nudMin9 chTimeMin(10) = nudMin10 chTimeMin(11) = nudMin11 chTimeMin(12) = nudMin12 chTimeMin(13) = nudMin13 chTimeMin(14) = nudMin14 chTimeMin(15) = nudMin15 chTimeMin(16) = nudMin16 chTimeMin(17) = nudMin17 chTimeMin(18) = nudMin18 chTimeMin(19) = nudMin19 chTimeMin(20) = nudMin20 chTimeSec(1) = nudSec1 chTimeSec(2) = nudSec2 chTimeSec(3) = nudSec3 chTimeSec(4) = nudSec4 chTimeSec(5) = nudSec5 chTimeSec(6) = nudSec6 chTimeSec(7) = nudSec7 chTimeSec(8) = nudSec8 chTimeSec(9) = nudSec9 chTimeSec(10) = nudSec10 chTimeSec(11) = nudSec11 chTimeSec(12) = nudSec12 chTimeSec(13) = nudSec13 chTimeSec(14) = nudSec14 chTimeSec(15) = nudSec15 chTimeSec(16) = nudSec16 chTimeSec(17) = nudSec17 chTimeSec(18) = nudSec18 chTimeSec(19) = nudSec19 chTimeSec(20) = nudSec20 chTimebtn(1) = btn_reg_ch1 chTimebtn(2) = btn_reg_ch2 chTimebtn(3) = btn_reg_ch3 chTimebtn(4) = btn_reg_ch4 chTimebtn(5) = btn_reg_ch5 chTimebtn(6) = btn_reg_ch6 chTimebtn(7) = btn_reg_ch7 chTimebtn(8) = btn_reg_ch8 chTimebtn(9) = btn_reg_ch9 chTimebtn(10) = btn_reg_ch10 chTimebtn(11) = btn_reg_ch11 chTimebtn(12) = btn_reg_ch12 chTimebtn(13) = btn_reg_ch13 chTimebtn(14) = btn_reg_ch14 chTimebtn(15) = btn_reg_ch15 chTimebtn(16) = btn_reg_ch16 chTimebtn(17) = btn_reg_ch17 chTimebtn(18) = btn_reg_ch18 chTimebtn(19) = btn_reg_ch19 chTimebtn(20) = btn_reg_ch20 chStartbtn(1) = btn_updown_ch1 chStartbtn(2) = btn_updown_ch2 chStartbtn(3) = btn_updown_ch3 chStartbtn(4) = btn_updown_ch4 chStartbtn(5) = btn_updown_ch5 chStartbtn(6) = btn_updown_ch6 chStartbtn(7) = btn_updown_ch7 chStartbtn(8) = btn_updown_ch8 chStartbtn(9) = btn_updown_ch9 chStartbtn(10) = btn_updown_ch10 chStartbtn(11) = btn_updown_ch11 chStartbtn(12) = btn_updown_ch12 chStartbtn(13) = btn_updown_ch13 chStartbtn(14) = btn_updown_ch14 chStartbtn(15) = btn_updown_ch15 chStartbtn(16) = btn_updown_ch16 chStartbtn(17) = btn_updown_ch17 chStartbtn(18) = btn_updown_ch18 chStartbtn(19) = btn_updown_ch19 chStartbtn(20) = btn_updown_ch20 chResetbtn(1) = btn_reset_ch1 chResetbtn(2) = btn_reset_ch2 chResetbtn(3) = btn_reset_ch3 chResetbtn(4) = btn_reset_ch4 chResetbtn(5) = btn_reset_ch5 chResetbtn(6) = btn_reset_ch6 chResetbtn(7) = btn_reset_ch7 chResetbtn(8) = btn_reset_ch8 chResetbtn(9) = btn_reset_ch9 chResetbtn(10) = btn_reset_ch10 chResetbtn(11) = btn_reset_ch11 chResetbtn(12) = btn_reset_ch12 chResetbtn(13) = btn_reset_ch13 chResetbtn(14) = btn_reset_ch14 chResetbtn(15) = btn_reset_ch15 chResetbtn(16) = btn_reset_ch16 chResetbtn(17) = btn_reset_ch17 chResetbtn(18) = btn_reset_ch18 chResetbtn(19) = btn_reset_ch19 chResetbtn(20) = btn_reset_ch20 chGroup(1) = gb_ch1 chGroup(2) = gb_ch2 chGroup(3) = gb_ch3 chGroup(4) = gb_ch4 chGroup(5) = gb_ch5 chGroup(6) = gb_ch6 chGroup(7) = gb_ch7 chGroup(8) = gb_ch8 chGroup(9) = gb_ch9 chGroup(10) = gb_ch10 chGroup(11) = gb_ch11 chGroup(12) = gb_ch12 chGroup(13) = gb_ch13 chGroup(14) = gb_ch14 chGroup(15) = gb_ch15 chGroup(16) = gb_ch16 chGroup(17) = gb_ch17 chGroup(18) = gb_ch18 chGroup(19) = gb_ch19 chGroup(20) = gb_ch20 End If commandSelect(commandList.nowState) = "solState" commandSelect(commandList.upState) = "getupsol" commandSelect(commandList.downState) = "getdnsol" commandSelect(commandList.emoState) = "getemo" chSerialCbb(serialList.serial1) = cbbPort1 chSerialCbb(serialList.serial2) = cbbPort2 For i = 1 To portCount runState(i) = False Next End Sub End Class