이 페이지는 기계 번역을 사용하여 번역되었습니다. 영어 원문을 보려면 여기를 클릭하십시오.
Modbus 인터페이스를 사용하여 PLC와 통신하기
이 예제는 PLC와 통신을 시작하고 홀딩 레지스터 및 개별 코일에 읽고 쓰는 방법을 보여줍니다.
Modbus 객체 만들기
Modbus client 객체를 생성합니다. 이 예제에서는 CLICK Ethernet Standard PLC가 RS-232 직렬 포트 'COM10'에 연결되어 있다고 가정합니다. CLICK Programming Software에서 확인한 해당 장치의 직렬 포트 구성은 다음과 같습니다.
보드 레이트: 115200
패리티: 홀수
정지 비트: 1 (디폴트 값)
데이터 비트: 8 (디폴트 값)
modbusObj = modbus("serialrtu", "COM10", BaudRate=115200, Parity="odd")
modbusObj =
Modbus Serial RTU with properties:
Port: 'COM10'
BaudRate: 115200
DataBits: 8
Parity: 'odd'
StopBits: 1
Status: 'Connected'
NumRetries: 1
Timeout: 10 (seconds)
ByteOrder: 'big-endian'
WordOrder: 'big-endian'
코일 쓰기 및 16비트 타이머 레지스터 읽기
이 PLC에는 코일 'C1'이 닫히면 타이머를 시작하는 간단한 프로그램이 있습니다. 이 코일의 주소는 16385입니다. 타이머를 활성화하려면 코일 'C1'의 값을 1로 설정하십시오.
coilC1 = 16385;
write(modbusObj, "coils", coilC1, 1);타이머 값을 읽어 표시하고 값이 증가하는지 확인합니다. 타이머의 현재 값은 주소가 45057인 홀딩 레지스터 'TD1'에서 읽을 수 있습니다. 일부 공급업체는 홀딩 레지스터임을 나타내기 위해 레지스터 주소의 시작 부분에 추가 숫자(주로 '4')를 붙여 기록하기도 한다는 점에 유의하십시오. 이 숫자는 Modbus 함수에 전달하기 전에 삭제해야 합니다. Modbus 프로토콜은 주소를 1부터 시작하는 16비트 정수로 지정하며, 유효 범위는 1~65535입니다.
regTD1 = 45057; registerCount = 1;
코일에 전원이 공급된 이후 경과된 밀리초 수를 확인하기 위해 타이머 값을 읽고 표시합니다.
timerValue = read(modbusObj, "holdingregs", regTD1, registerCount)timerValue = 86
1초간 멈췄다가 다시 읽으십시오. 이 값은 이전에 읽은 값보다 약 1초 정도 더 커야 합니다.
pause(1);
timerValue = read(modbusObj, "holdingregs", regTD1, registerCount)timerValue = 87
이제 코일 'C1'을 열어 값을 0으로 설정하여 타이머를 비활성화합니다.
write(modbusObj, "coils", coilC1, 0);32비트 단정밀도 부동소수점 레지스터 쓰기 및 읽기
이 PLC는 'TD1'과 같은 16비트 정수 레지스터 외에도 'DF334' 및 'DF335'와 같은 32비트 단정밀도 부동 소수점 레지스터를 갖추고 있습니다. 이들 레지스터의 주소는 각각 29339와 29341입니다.
PLC 내부에는 32비트 값이 두 개의 연속된 16비트 레지스터에 저장됩니다. 'DF334'의 경우 값이 주소 29339와 29340에 분할됩니다. 두 값의 순서는 장치에 따라 다릅니다. CLICK PLC의 경우 값은 하위 워드부터 저장됩니다. 즉, 리틀 엔디안 방식으로 저장됩니다.
modbusObj.WordOrder = "little-endian"; regDF334 = 29339; data = [919.92 103.64]; write(modbusObj, "holdingregs", regDF334, data, "single");
이제 값을 다시 읽어와 표시합니다.
registerCount = 2; values = read(modbusObj, "holdingregs", regDF334, registerCount, "single")
values = 1×2
919.9200 103.6400