요청

입출력 요청 문을 순차적으로 전송하여 안정적으로 PLC를 제어하는 프로그램을 만들어보겠습니다. 이 프로그램의 기본적인 논리는 이렇습니다.

스위치 값이 변했을 땐 쓰기 프로토콜을 전송하고 그러지 않은 경우 읽기 프로토콜을 전송한다.”

이 논리를 수행하려면 루프를 끝내기 전에 스위치 값을 포함하는 쓰기 프로토콜을 메모리에 저장해야 합니다. 그 다음 루프에서 메모리에 저장된 이전 루프의 쓰기 프로토콜과 현재의 쓰기 프로토콜이 같은지 비교해야 하기 때문입니다.

텍스트 상자: 함수 팔레트 > 프로그래밍 > 비교 > 같음?
함수 팔레트 > 프로그래밍 > 비교 > 선택
 

 



시프트 레지스터

시프트 레지스터는 쓰기 프로토콜이 변했는지 확인할 때 필요합니다. 시프트 레지스터는 while루프가 끝나기 전에 메모리에 쓰기 프로토콜을 저장하고 다음 루프에서 이전에 저장된 쓰기 프로토콜을 불러옵니다.

다음은 이해를 돕기 위한 시프트 레지스터 예제입니다.

 

 

텍스트 상자: A
AA
AAA
AAAA
AAAAA
…
While루프가 시작되면 시프트 레지스터로부터 이전의 문자열을 읽어오고 그 뒤에 A를 덧붙입니다. 1초가 지날 때마다 A가 하나씩 증가합니다.

 

 

 

 

 

 

1 스위치 데이터를 붙여 쓰기 프로토콜 완성

출력제어의 블록다이어그램의 일부를 가져와 완성합니다.

2 쓰기 프로토콜이 메모리 값과 같은가?

이전의 쓰기 프로토콜과 현재의 것이 같은지 비교해 스위치 값이 변경됐는지 확인한다.

3 읽기/쓰기 프로토콜 전송

<선택>

S값이 참이면 T를 내보내고, S값이 거짓이면 F를 내보냅니다.

 

4 메모리에 쓰기 프로토콜 저장

시프트 레지스터에 현재 프로토콜 값을 저장해 다음 While루프에서 불러올 수 있게 합니다.

 

 

 

응답

쓰기 프로토콜을 전송했을 때 응답

읽기 프로토콜을 전송했을 때 응답

 

응답의 왼쪽에서 네 번째 글자가 W, R로 다른 것을 이용하여 읽기 프로토콜을 전송했을 때만 LED에 불이 켜지게 해보겠습니다.

함수 팔레트 > 프로그래밍 > 구조 > 케이스 구조

케이스 구조

케이스 선택자의 값에 따라 케이스 혹은 거짓케이스가 구동됩니다. 위 경우엔 응답의 왼쪽에서 네 번째 글자가 R인지 아닌지 비교하고, 비교한 값을 케이스 선택자 연결했습니다. , 응답의 왼쪽에서 네 번째 글자가 R이면 케이스가 구동되고, 아니면 거짓케이스가 구동됩니다.

케이스 안에는 입력 제어에서 만들었던 블록다이어그램의 일부를 가져다 씁니다. ‘거짓케이스는 그냥 비워두면 됩니다.