반응형
PLC로부터 명령을 전송한 후 공통점을 비교하여 통신의 속도 향상을 위해 비동기적으로 처리하려고 하거나 코드의 량을 줄이기 위해 데이터 분석을 통해 데이터 처리 효율을 높일 수 있습니다.
아래 가장 많이 쓰는 읽기/ 쓰기 명령들을 비교를 먼저 해보고자 명령 내용들을 캡처해보았습니다.
직접 변수 연속 읽기 응답
직접 변수 개별 쓰기 응답
직접 변수 연속 쓰기 응답
정상 응답일 때 공통점
- 헤더
- 명령어(0x55 연속 읽기, 0x59 쓰기)
0x55/59로 읽은 것인지 쓴 것인지를 판단 - 데이터 타입(0x14블록 타입)
- 예약 영역(0x00 고정)
- 에러 상태 없으므로 0x00
- 블록수 명령 상의 블록 보통 1개 사용
- 읽은 데이터 개수(읽기 전송)
- 읽은 데이터(읽기 전용)
에러 응답일 때 공통점
- 헤더
- 명령어(0x55 연속 읽기, 0x59 쓰기)
0x55/59로 읽은 것인지 쓴 것인지를 판단 - 데이터 타입(0x14블록 타입)
- 예약 영역(0x00 고정)
- 에러 상태 없으므로 0 xFFFF(0이 아닌 값)
- 에러코드
위의 공통점으로 비교를 한다면 앞에서부터 에러 상태가 있는지 비교하고 있는 경우 에러코드를 확인하고
에러가 0인 경우 읽기(0X55) 인지 쓰기(0x59)인지 비교하여 쓰기 인 경우 성공, 읽기인 경우 데이터 타입을 비교 데이터 개수만큼 반복하면서 버퍼에 저장하면 됩니다.
통신 에러코드 표
코드로 보기
구조적인 부분을 보여주기 위한 예시이므로 일부분만 발취하였습니다.
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
39
40
41
42
43
44
45
46
47
48
49
|
// 읽기 응답 : 0x59
//[ h0000 비트 ][ h0100 바이트 ][ h0200 워드 ][ h0300 더블워드 ][ h0400 롱워드][ h1400 연속]
if (bytes[22] == 0x14)
{
for (int i = 0; i < nData / 2 ; i++)
{
ushort uData = (ushort)MAKE_WORD(bytes[33 + (i * 2)], bytes[32 + (i * 2)]);
if (uData != m_DataBuff[i])
{
m_DataBuff[i] = uData;
}
}
// 27= 블록 개수 , 29 = 데이터 갯수
}
//[ h0200 워드 ]
if (bytes[22] == 0x02)
{
for (int i = 0; i < nData / 2; i++)
{
ushort uData = (ushort)MAKE_WORD(bytes[33 + (i * 2)], bytes[32 + (i * 2)]);
}
// 27= 블록 개수 , 29 = 데이터 갯수
}
}
else if (bytes[20] == 0x59)
{
// 쓰기 응답 : 0x59
}
}
else
{
// 에러상태
// 에러코드(Hex 1Byte)
if (bytes[20] == 0x55)
{
}
else if (bytes[20] == 0x59)
{
// 쓰기 응답 : 0x59
}
// 28번째가 에러 코드이며 에러 코드 표로 메시지를 띄움
int nErr = bytes[28];
ErrorMessage(nErr);
}
|
cs |
공통점을 찾게 되면 읽기/쓰기를 같은 함수 내에서 처리할 수 있어 통신 추적이 용이 해지고 코드도 짧아져 관리가 편리 해질 것입니다.
2021.12.07 - [프로그래밍/하드웨어] - LS 산전 PLC 이더넷 통신-헤더 프레임 만들기
2021.12.07 - [프로그래밍/하드웨어] - LS 산전 PLC 이더넷 통신하기 - 연속 읽기
2021.12.07 - [프로그래밍/하드웨어] - LS 산전 PLC 이더넷 통신 - 개별 쓰기
반응형
'프로그래밍 > C Sharp' 카테고리의 다른 글
[ C# ] DataTable CSV 읽고 쓰기 (0) | 2022.01.13 |
---|---|
[ C# ] 누겟 라이브러리 없이 텔레그램 메시지 보내기 (0) | 2022.01.04 |
[ C# ] LS 산전 PLC 이더넷 통신 - 개별 쓰기 (2) | 2021.12.07 |
[ C# ] LS 산전 PLC 이더넷 통신하기 - 연속 읽기 (0) | 2021.12.07 |
[ C# ] LS 산전 PLC 이더넷 통신-헤더 프레임 만들기 (0) | 2021.12.07 |
댓글