반응형
이더넷으로 XGT PLC와 통신하기
관련자료

사용설명서_XGT FEnet_국문_V2.0_160412.pdf
다운로드

제8장 전용통신을 참고하세요.

 

 

예제

VB6에서 소켓통신으로 데이터를 보내려면 바이트 단위로 전송해야 한다.

SendData_Hex = "4C5349532D584754" & _
                    "0000" & _
                    "0000" & _
                    "A0" & _
                    "33" & _
                    ByteSwap(Format$(Hex$(Invoke_ID), "0000"), sckHex) & _
                    ByteSwap(Format$(Hex(10 + sVarLength), "0000"), sckHex) & _
                    "03" & _
                    Format$(Hex(((Val(&H33E) + Val("&H" & Hex(Invoke_ID)))) Mod 256), "00") & _
                    Replace(StringToHex(setReadWrite), " ", "") & _
                    ByteSwap(Format$(sDataType, "0000"), sckHex) & _
                    "00" & "00" & _
                    "01" & "00" & _
                    ByteSwap(Format$(sDeviceLength, "0000"), sckHex) & _
                    Replace(StringToHex(sStartDevice), " ", "")     

SendData_Ascii = HexToString(SendData_Hex)

Dim bSendData_Ascii() As Byte
bSendData_Ascii = SendData_Ascii
        
SCK.SendData bSendData_Ascii


Function HexToString(ByVal sText As String) As String
    Dim saHex As String, i As Long
    Dim cut_index As Integer
    Dim sub_String As String
    
    cut_index = 1
    Do
    
        saHex = Mid(sText, cut_index, 2)
    
        sub_String = sub_String & ChrB("&H" & saHex)
    
        cut_index = cut_index + 2
        
    Loop While cut_index < Len(sText)
    
    HexToString = sub_String
End Function

bSendData_Ascii 값은 아래 예제 코드의 헥사값을 HexToString라는 함수를 만들어 변환한 것인데 ChrB("&H" & saHex) 처럼 ChrB() 함수를 사용해야 한다는 것이 중요하다.

그 다음 Byte 형식의 배열 변수에 넣고 SendData를 하면 된다.

여기서 SCK는 WinSocket의 Name이다.

 

 

D1000번지의 16비트값을 읽는 코드

송신 데이터

4C5349532D58475400000000A0330200110003405400020000000100070025445731303030

 

수신 데이터

4C5349532D584754000004013F02000E000324550002000201000001000200744E

 

헥사 분할표

 

 헥사값은 위와 같이 송수신 할 때 스왑을 해야한다.

※ ChrB() 함수를 적용하면 위 표와 달리 문자가 깨져보인다. 위 그림은 ChrW()함수를 사용한 참고용.

 

송수신 결과 (프레임번호, BCC, Length 계산 참고용)

4C 53 49 53 2D 58 47 54 00 00 00 00 A0 33 3F 00 10 00 00 7D 54 00 14 00 00 00 01 00 04 00 25 44 42 30 02 00

4C 53 49 53 2D 58 47 54 00 00 00 00 A0 33 40 00 10 00 00 7E 54 00 14 00 00 00 01 00 04 00 25 44 42 30 02 00

4C 53 49 53 2D 58 47 54 00 00 00 00 A0 33 41 00 10 00 00 7F 54 00 14 00 00 00 01 00 04 00 25 44 42 30 02 00

 

A: 송수신 데이터 매칭용으로 00 ~ FF까지 자유 설정. 1:1 통신은 00 가능- 동시에 여러개를 송수신할 때 순서가 섞일 수 있으므로 어떤 질문에 대한 답인지 알아야 하므로 Invoke ID를 설정한다.A: 헤더 길이 (Hex Sum) (1Byte) 여기까지 헤더 (00도 통신 됨)- 4C부터 00까지 모두 더한 값의 2자리값이다.A: 헤더 이후 길이 (Hex Sum)

(2Byte)

- 위 예제에서 54 부터 00까지 16개이므로 16진수로 10이다. 스왑을 했으므로 10 00이 된다.


 

 

반응형

관련글