ÇöÀç VB·Î µÈ GLOFA Àü¿ëÅë½ÅÀ» VB.NETÀ¸·Î ÄÁ¹öÀüÇÒ·Á°íÇϴµ¥¿ä.... ¾Æ·¡ ¼Ò½ºÁ¡ º¸½Ã°í µµ¿ÍÁÖ¼ÌÀ¸¸éÇÕ´Ï´Ù.
VB¼Ò½ºÀÔ´Ï´Ù. Public Function Replace(bufRW As String, bufType As String, bufAddress As Integer, _ bufNumber As String, bufData As String)
Dim Bcc As Byte Dim iBcc As Integer Dim sBcc As String Dim lRefTime As Long Dim ±æÀÌ As String Dim CPU_°¹¼ö As String Dim Buffer As String Dim length As Long Dim Data As String Dim Cpu_Add As String Dim Change_Add As String Dim Org_Hex As String Dim Org_Hex_2Bit As String Dim Org_Hex_4Bit As String Dim Org_Hex_Rev As String Dim Org_Hex_Rev_4Bit As String Dim i As Integer Dim m As String Dim l As Integer
On Error GoTo pass
bufRW = UCase(bufRW) Select Case Len(bufNumber) Case Is > 2 bufNumber = Right(bufNumber, 2) Case Is <= 1 bufNumber = "0" & bufNumber End Select ±æÀÌ = "0" & Len(bufType & bufAddress) If Plc_Port_Select = "CNET" Then ' ' BCC¸¦ °è»êÇÕ´Ï´Ù. ' iBcc = 5 + ByteCheckSum(Data) + 4 ' If iBcc > 255 Then iBcc = iBcc - 256 ' Bcc = CByte(iBcc) ' sBcc = ByteToHexStr(Bcc) If bufRW = "R" Then frmMain.MSComm1.Output = Chr$(5) + "00" & bufRW & "SB" & ±æÀÌ & bufType & bufAddress & bufNumber + Chr$(4) & sBcc Else frmMain.MSComm1.Output = Chr$(5) + "00" & bufRW & "SB" & ±æÀÌ & bufType & bufAddress & bufNumber & bufData + Chr$(4) End If Else Select Case bufType Case Is = "%MB" Cpu_Add = Hex(bufAddress) CPU_°¹¼ö = Hex(Val(bufNumber)) Case Is = "%MW" Cpu_Add = Hex(bufAddress * 2) CPU_°¹¼ö = Hex(Val(bufNumber) * 2) Case Is = "%MD" Cpu_Add = Hex(bufAddress * 4) CPU_°¹¼ö = Hex(Val(bufNumber) * 4) End Select Select Case Len(CPU_°¹¼ö) Case Is > 2 CPU_°¹¼ö = Right(CPU_°¹¼ö, 2) Case Is <= 1 CPU_°¹¼ö = "0" & CPU_°¹¼ö End Select For i = 1 To (6 - Len(Cpu_Add)) Cpu_Add = "0" & Cpu_Add Next If bufRW = "R" Then Change_Add = "rZ" & Right(Cpu_Add, 2) & Mid(Cpu_Add, 3, 2) & Left(Cpu_Add, 2) & CPU_°¹¼ö iBcc = ByteCheckSum(Change_Add) ' BCC¸¦ °è»êÇÕ´Ï´Ù. If iBcc > 255 Then iBcc = iBcc - 256 Bcc = CByte(iBcc) sBcc = ByteToHexStr(Bcc) frmMain.MSComm1.Output = Chr$(2) + Change_Add + sBcc + Chr$(3) Else Change_Add = "wZ" & Right(Cpu_Add, 2) & Mid(Cpu_Add, 3, 2) & Left(Cpu_Add, 2) & CPU_°¹¼ö & bufData iBcc = ByteCheckSum(Change_Add) ' BCC¸¦ °è»êÇÕ´Ï´Ù. If iBcc > 255 Then iBcc = iBcc - 256 Bcc = CByte(iBcc) sBcc = ByteToHexStr(Bcc) frmMain.MSComm1.Output = Chr$(2) + Change_Add + sBcc + Chr$(3) End If End If ' Time OutÀ» °è»êÇϱâ À§ÇØ µ¥ÀÌÅ͸¦ SendÇÑ ½Ã°£À» ±â·ÏÇÕ´Ï´Ù. lRefTime = GetTickCount()
' ETX°¡ ¼ö½ÅµÇ°Å³ª Time OutÀÌ ¹ß»ýÇÒ ¶§±îÁö Loop¸¦ µ½´Ï´Ù. Do DoEvents Buffer$ = Buffer$ & frmMain.MSComm1.Input
' ETX°¡ ¼ö½ÅµÇ¾ú´ÂÁö¸¦ Check ÇÕ´Ï´Ù. If Plc_Port_Select = "CNET" Then length = InStr(Buffer$, Chr$(3)) Else length = InStr(Buffer$, Chr$(4)) End If ' Time OutÀ» Check ÇÕ´Ï´Ù. (¿©±â¿¡¼´Â 1000 msec·Î ¼³Á¤ÇÏ¿´½À´Ï´Ù.) If ((GetTickCount() - lRefTime) > 1000) Then frmMain.Label1.Caption = "¿¬°áÀÌ ²÷°å½À´Ï´Ù." Exit Function End If Loop Until (length) Buffer$ = Buffer$ & frmMain.MSComm1.Input If Plc_Port_Select = "CNET" Then Replace = Mid(Buffer$, 2, length - 2) Data = Mid(Buffer$, 2, length - 2) Else If bufRW = "R" Then Org_Hex = Mid(Buffer$, 3, length - 5) Select Case bufType Case Is = "%MB" Replace = Org_Hex Case Is = "%MW" Do Org_Hex_2Bit = Left(Org_Hex, 4) m = Right(Org_Hex_2Bit, 2) & Left(Org_Hex_2Bit, 2) Org_Hex = Mid(Org_Hex, 5) Org_Hex_Rev = Org_Hex_Rev & m Replace = Org_Hex_Rev Loop Until Org_Hex = "" Case Is = "%MD" Do Org_Hex_2Bit = Left(Org_Hex, 4) m = Right(Org_Hex_2Bit, 2) & Left(Org_Hex_2Bit, 2) Org_Hex = Mid(Org_Hex, 5) Org_Hex_Rev = Org_Hex_Rev & m Replace = Org_Hex_Rev Loop Until Org_Hex = "" Do Org_Hex_4Bit = Left(Org_Hex_Rev, 8) m = Right(Org_Hex_4Bit, 4) & Left(Org_Hex_4Bit, 4) Org_Hex_Rev = Mid(Org_Hex_Rev, 9) Org_Hex_Rev_4Bit = Org_Hex_Rev_4Bit & m Replace = Org_Hex_Rev_4Bit Loop Until Org_Hex_Rev = "" End Select For l = 1 To 9 Replace = "0" & Replace Next Else Replace = "00WSB" End If End If PgrBar = PgrBar + 1 If PgrBar > 100 Then PgrBar = 0 frmMain.PgrBar1 = PgrBar Exit Function pass: End Function
¾Æ·¡Ã³·³º¯°æÇߴµ¥¿ä... °ªÀÌ Æ²¸®°Ô ³ª¿À³×¿ä... ¹¹°¡ ¹®Á¦ÀÎÁö....
VB.NET ¼Ò½ºÀÔ´Ï´Ù. Public Function Replace_Char(ByVal bufRW As String, ByVal bufType As String, ByVal bufAddress As Integer, ByVal bufNumber As String, ByVal bufData As String) As String Dim Bcc As Byte Dim iBcc As Integer Dim sBcc As String Dim lRefTime As Long Dim ±æÀÌ As String Dim CPU_°¹¼ö As String Dim Buffer As String Dim length As Long Dim Data As String Dim Cpu_Add As String Dim Change_Add As String Dim Org_Hex As String Dim Org_Hex_2Bit As String Dim Org_Hex_4Bit As String Dim Org_Hex_Rev As String Dim Org_Hex_Rev_4Bit As String Dim i As Integer Dim m As String Dim l As Integer
Try If Com_Check = False Then Exit Function End If
bufRW = UCase(bufRW) Select Case Len(bufNumber) Case Is > 2 bufNumber = Right(bufNumber, 2) Case Is <= 1 bufNumber = "0" & bufNumber End Select
±æÀÌ = "0" & Len(bufType & bufAddress)
If Plc_Port_Select = "CNET" Then ' BCC¸¦ °è»êÇÕ´Ï´Ù. iBcc = 5 + ByteCheckSum(bufData) + 4 If iBcc > 255 Then iBcc = iBcc - 256 Bcc = CByte(iBcc) sBcc = ByteToHexStr(Bcc) If bufRW = "R" Then frmMain.MSComm1.Output = Chr(5) & "00" & bufRW & "SB" & ±æÀÌ & bufType & bufAddress & bufNumber & Chr(4) & sBcc Else frmMain.MSComm1.Output = Chr(5) & "00" & bufRW & "SB" & ±æÀÌ & bufType & bufAddress & bufNumber & bufData & Chr(4) End If Else Select Case bufType Case Is = "%MB" Cpu_Add = Hex(bufAddress) CPU_°¹¼ö = Hex(Val(bufNumber)) Case Is = "%MW" Cpu_Add = Hex(bufAddress * 2) CPU_°¹¼ö = Hex(Val(bufNumber) * 2) Case Is = "%MD" Cpu_Add = Hex(bufAddress * 4) CPU_°¹¼ö = Hex(Val(bufNumber) * 4) End Select Select Case Len(CPU_°¹¼ö) Case Is > 2 CPU_°¹¼ö = Right(CPU_°¹¼ö, 2) Case Is <= 1 CPU_°¹¼ö = "0" & CPU_°¹¼ö End Select For i = 1 To (6 - Len(Cpu_Add)) Cpu_Add = "0" & Cpu_Add Next
If bufRW = "R" Then Change_Add = "rZ" & Right(Cpu_Add, 2) & Mid(Cpu_Add, 3, 2) & Left(Cpu_Add, 2) & CPU_°¹¼ö iBcc = ByteCheckSum(Change_Add) ' BCC¸¦ °è»êÇÕ´Ï´Ù. If iBcc > 255 Then iBcc = iBcc - 256 Bcc = CByte(iBcc) sBcc = ByteToHexStr(Bcc) frmMain.MSComm1.Output = Chr(2) & Change_Add & sBcc & Chr(3) Else Change_Add = "wZ" & Right(Cpu_Add, 2) & Mid(Cpu_Add, 3, 2) & Left(Cpu_Add, 2) & CPU_°¹¼ö & bufData iBcc = ByteCheckSum(Change_Add) ' BCC¸¦ °è»êÇÕ´Ï´Ù. If iBcc > 255 Then iBcc = iBcc - 256 Bcc = CByte(iBcc) sBcc = ByteToHexStr(Bcc) frmMain.MSComm1.Output = Chr(2) & Change_Add & sBcc & Chr(3) End If End If
' Time OutÀ» °è»êÇϱâ À§ÇØ µ¥ÀÌÅ͸¦ SendÇÑ ½Ã°£À» ±â·ÏÇÕ´Ï´Ù. lRefTime = GetTickCount()
' ETX°¡ ¼ö½ÅµÇ°Å³ª Time OutÀÌ ¹ß»ýÇÒ ¶§±îÁö Loop¸¦ µ½´Ï´Ù. Do System.Windows.Forms.Application.DoEvents() Buffer = Buffer & frmMain.MSComm1.Input ' ETX°¡ ¼ö½ÅµÇ¾ú´ÂÁö¸¦ Check ÇÕ´Ï´Ù. If Plc_Port_Select = "CNET" Then length = InStr(Buffer, Chr(3)) Else length = InStr(Buffer, Chr(4)) End If
' Time OutÀ» Check ÇÕ´Ï´Ù. (¿©±â¿¡¼´Â 1000 msec·Î ¼³Á¤ÇÏ¿´½À´Ï´Ù.) If ((GetTickCount() - lRefTime) > 1000) Then frmMain.Label1.Text = "¿¬°áÀÌ ²÷°å½À´Ï´Ù." Exit Function End If Loop Until (length)
Buffer = Buffer & frmMain.MSComm1.Input If Plc_Port_Select = "CNET" Then Replace_Char = Mid(Buffer, 2, length - 2) Data = Mid(Buffer, 2, length - 2)
Else If bufRW = "R" Then Org_Hex = Mid(Buffer, 3, length - 5) Select Case bufType Case Is = "%MB" Replace_Char = Org_Hex Case Is = "%MW" Do Org_Hex_2Bit = Left(Org_Hex, 4) m = Right(Org_Hex_2Bit, 2) & Left(Org_Hex_2Bit, 2) Org_Hex = Mid(Org_Hex, 5) Org_Hex_Rev = Org_Hex_Rev & m Replace_Char = Org_Hex_Rev Loop Until Org_Hex = "" Case Is = "%MD" Do Org_Hex_2Bit = Left(Org_Hex, 4) m = Right(Org_Hex_2Bit, 2) & Left(Org_Hex_2Bit, 2) Org_Hex = Mid(Org_Hex, 5) Org_Hex_Rev = Org_Hex_Rev & m Replace_Char = Org_Hex_Rev Loop Until Org_Hex = "" Do Org_Hex_4Bit = Left(Org_Hex_Rev, 8) m = Right(Org_Hex_4Bit, 4) & Left(Org_Hex_4Bit, 4) Org_Hex_Rev = Mid(Org_Hex_Rev, 9) Org_Hex_Rev_4Bit = Org_Hex_Rev_4Bit & m Replace_Char = Org_Hex_Rev_4Bit Loop Until Org_Hex_Rev = "" End Select
For l = 1 To 9 Replace_Char = "0" & Replace_Char Next Else Replace_Char = "00WSB" End If End If PgrBar = PgrBar + 1 If PgrBar > 100 Then PgrBar = 0 frmMain.PgrBar1.Value = PgrBar Catch ex As Exception ErrorTextWrite(ex) End Try End Function
°í¼ö´ÔÁ¡ ºÎŹµå¸³´Ï´Ù. |