ÇöÀç 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
°í¼ö´ÔÁ¡ ºÎŹµå¸³´Ï´Ù.