반응형
앞서 만든 헤드 프레임 뒤에 전송 명령용 프레임 명령을 만들어야 합니다.
읽기 명령은 두 가지 방법이 있는데 개별과 연속의 차이는
- 개별은 여려 변수를 변경하면서 읽을 수 있고
읽을 데이터의 분포가 크고 데이터의 주소가 다른 경우에 유용
- 연속은 시작 번지를 지정하고 읽을 개수를 입력하면 연속으로 읽어 올 수 있습니다.
읽을 데이터의 량이 많고 번지가 고정인 경우 유용
일반적으로 한 개씩 읽는 개별 방식을 선호 하지만 데이터의 개수가 많았지만 통신도 많이 해야 되어 속도가 느려지는 단점이 있어 연속으로 바이트 형을 읽은 후 버퍼에 저장해두었다고 비트/워드/더블 워드로 형 변환해서 사용하게 되면 한 번의 통신으로 여러 정보를 한 번에 확인할 수 있습니다.
연속 읽기 명령 확인
고정되는 부분만 적색으로 표시하고 함수를 구현하는 법을 알아보겠습니다.
- 명령어(2) : 0x0054
- 데이터 타입(2) : 0x0014
- 예약 영역(2) : 0x0000
- 변수 개수(블록수) : 시작 번지를 기준으로 계속 읽을 것이며 블록이 여러 개이면 데이터를 읽은 후 분리가 어려워 고정으로 쓰는 방법이 좋습니다. 0x001
- 변수 길이 : 뒤에 읽을 변수 명에 대하여 직접 변수 명의 길이 ( % MB00 이면 5자리)
- 데이터 개수 : 최대 1,400 바이트까지 읽을 수 있음
프로그램으로 구현
먼저 바이트 배열들에 명령들을 입력하여 생성한 후 헤더 생성 함수에 값을 넣어 명령어를 만들면 됩니다.
szDevice에 읽을 시작 위치명을 입력합니다.(바이트 만 가능)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
void RegisterRead(string szDevice)
{
if (string.IsNullOrEmpty(szDevice))
{
return;
}
int nCnt = 0;
char[] bufBody = new char[255];
Array.Clear(bufBody, 0, bufBody.Length); //명령어(2) //[ h5400 읽기][ h5800 쓰기 ]
bufBody[nCnt++] = (char)0x54;
bufBody[nCnt++] = (char)0x00; //데이터 타입(2) //[ h00 비트 ][ h01 바이트 ][ h02 워드 ][ h03 더블워드 ][ h04 롱워드][ h14 연속]
bufBody[nCnt++] = (char)0x14;
bufBody[nCnt++] = (char)0x00; //예약 영역(2) : 0x0000 : Don’t Care.
bufBody[nCnt++] = (char)0x00;
bufBody[nCnt++] = (char)0x00; //블록수(2) : 읽고자 하는 블록의 개수. 0x0001
bufBody[nCnt++] = (char)0x01;
bufBody[nCnt++] = (char)0x00; //변수명 길이(2) : 최대 16자.
bufBody[nCnt++] = (char)szDevice.Length;
bufBody[nCnt++] = (char)0x00; //데이터 주소 최대 16자
char[] ch = szDevice.ToCharArray();
for (int i = 0; i < ch.Length; i++)
{
bufBody[nCnt++] = ch[i];
} //데이터 개수(2) 최대 1400byte
int nLength = 256*2;
bufBody[nCnt++] = (char)(nLength & 0xFF); // Data length(L)
bufBody[nCnt++] = (char)(nLength >> 8); // Data length(H) // 앞에서 만든 명령 프레임과 헤더프레임 더하기
_LS_FENET_HRADER ls_Header = new _LS_FENET_HRADER();
char[] reData = ls_Header.Copy(nCnt, bufBody);
//** reData를 이더넷 통신으로 전송 **
}
|
cs |
데이터 수신 부분은 읽기/쓰기 모두 공통적인 부분이 있어 이후 포스팅에서 연결해서 공유 예정입니다.
2021.12.07 - [프로그래밍/하드웨어] - LS 산전 PLC 이더넷 통신-헤더 프레임 만들기
반응형
'프로그래밍 > C Sharp' 카테고리의 다른 글
[ C# ] LS 산전 PLC 이더넷 통신하기-응답 데이터 분석 (3) | 2021.12.07 |
---|---|
[ C# ] LS 산전 PLC 이더넷 통신 - 개별 쓰기 (2) | 2021.12.07 |
[ C# ] LS 산전 PLC 이더넷 통신-헤더 프레임 만들기 (0) | 2021.12.07 |
[ C# ] 미쯔비시 QnA 시리즈 PLC와 PC 이더넷 통신하기 (3) | 2021.11.23 |
[ C# ] 비트연산 처리 모음 (2) | 2021.11.19 |
댓글