현장에서 많이 쓰는 접속 방법 : 232 , 422 ,Ethernet
시리얼 통신 (232 , 422 ,485)
1:1 통신만 가능합니다.
통신거리가 짧습니다. (10m 내외)
노이즈에 약하여 장거리 전송이 불가능 합니다.
통신을 위한 시스템 설치가 간편합니다.
D-SUB 9 PIN 케이블을 이용하여 결선합니다.
모뎀이나 PC 의 COM Port 에 사용됩니다.
전이중 통신이 가능하다.
485 통신
1:N(N:M) Multi Drop 통신이 가능합니다.
통신거리가 최대 1.2km(통상 700~800m 권장) 가능합니다.
노이즈에 대하여 RS-232C 보다 월등히 우수합니다.
5 PIN 터미널을 통한 4 선식(RS422) 또는 2 선식(RS485) 결선방식으로 결선합니다
주의사항(485) - 송 수신이 동시에 이루어 지지 않는다.

Ethernet 통신
OSI 7계층
tcp/ip 4계층
예시 ) 네이버 접속 해서 email 보낸다고 가정
랜선 - 물리계층
랜 카드 - 데이터링크 (맥어드레스)
----------------------------------1
네이버 - 네트워크 (ip 어드레스)
----------------------------------2
접속 - 전송 (port) - (tcp,udp)
----------------------------------3
로그인 - 세션 - aplication
데이타 - 표현 - aplication
email - 응용 - aplication
----------------------------------4
모드버스 프로토콜 - 산업현장 표준 프로토콜 이라 생각하면됨
대부분의 기기들이 모드버스 프로토콜을지원한다.
MODBUS 는 크게 MODBUS RTU(Serial)과 MODBUS TCP(Ethernet)으로 나뉘며, MODBUS RTU 는 물리적으로 RS485 의 규격을 용합니다.
모드버스 설명
모드버스는 BIT를 다루는경우 word 를 다루는경우 2가지로 나뉜다.
도한 데이타 포멧은 각각 쓰기/읽기 , 읽기만 가능 , 이 존재해서 총 4가지 경우가 존재한다.

비트 : 쓰기 0 , 읽기 1
워드 : 쓰기 4 , 읽기 3
ex)
1. bit 쓰기 -> 0,1(1 번 어드레스16bit),1(data)
2. word 쓰기 -> 4 ,(adress 16bit), ( data)
서버 ,클라이언트 ,마스터 , 슬레이브 개념

위에서보면 알수 있다 싶이 위의 4가지 개념은 모두 다르다.
실습 디바이스 통신 설정 해보기 (아두이노모드버스) 데이타 읽기





ADU 들어가서 설정하장


설정 끝
아두이노에 simplemodebusslave 라이브러리를 , 스케치에 포함시켜준다. (워드 모드로 존재한다.)
간단히 예제 코드를 수정 한다.
#include <SimpleModbusSlave.h>
//////////////// registers of your slave ///////////////////
enum
{
ADC0,
ADC1,
ADC2,
ADC3,
ADC4,
ADC5,
ADC6,
ADC7, // 7 번까지 주소가 존재한다.
BUTTON_STATE,
TOTAL_ERRORS,
TOTAL_REGS_SIZE
};
unsigned int holdingRegs[TOTAL_REGS_SIZE]; // function 3 and 16 register array
////////////////////////////////////////////////////////////
void setup()
{
modbus_configure(9600, 1, 2, TOTAL_REGS_SIZE,0);
}
void loop()
{
holdingRegs[TOTAL_ERRORS] = modbus_update(holdingRegs);
holdingRegs[0] = 1000;
holdingRegs[1] = 2000;
delayMicroseconds(50);
}
위의 코드를 아두이노에 올려준다
태그 작성

태그 찍으면 실행된다.

실습 디바이스 통신 설정 해보기 (아두이노모드버스) 데이타 쓰기
아두이노 5번으로 LED 켜보기
#include <SimpleModbusSlave.h>
//////////////// registers of your slave ///////////////////
enum
{
ADC0,
ADC1,
ADC2,
ADC3,
ADC4,
ADC5,
ADC6,
ADC7, // 7 번까지 주소가 존재한다.
BUTTON_STATE,
TOTAL_ERRORS,
TOTAL_REGS_SIZE
};
unsigned int holdingRegs[TOTAL_REGS_SIZE]; // function 3 and 16 register array
////////////////////////////////////////////////////////////
void setup()
{
modbus_configure(9600, 1, 2, TOTAL_REGS_SIZE,0);
pinMode(5,OUTPUT);
}
unsigned int indata ;
void loop()
{
if(indata == 0)
{
digitalWrite(5,LOW);
}
else if(indata ==1)
{
digitalWrite(5,HIGH);
}
holdingRegs[TOTAL_ERRORS] = modbus_update(holdingRegs);
indata = holdingRegs[1];
delayMicroseconds(50);
}
해당 테그에 1을 써주면 불이 켜지고 0이면 꺼진다.
통신 블록 설정하기
여러개의 데이터를 한꺼번에 주고 받을때 설정 (속도 상승)

3개 까지 데이터를 주고 받는다고 지정함
- 3개의 tag 를 다룰것임으로 위와 같이 지정했음

'공부,일 > HMI' 카테고리의 다른 글
| 20210916 (0) | 2021.09.16 |
|---|---|
| 20210909 스크립트 , 보고서 (0) | 2021.09.09 |
| 20210903 경보 (0) | 2021.09.03 |
| 수업 (2) (0) | 2021.08.27 |
| 20210820 SCADA (0) | 2021.08.20 |
댓글