~
485통신을 하는 마스터기기를 이용하여 데이터를 읽어올 수 있게한 프로그램입니다.
모드버스 RTU 마스터프로그램을 이용하여 Fnc3(read register)를 이용하면 원하는 데이터값을 출력해줍니다.
점점 한국어자료가 없어지더니 이번글은 아에 영어자료만 보고 작성했네요
~
~
코드
modbus_t *ctx;
modbus_mapping_t *mb_mapping;
int rc;
ctx = modbus_new_rtu("/dev/ttyUSB1", 38400, 'N', 8, 1);
modbus_set_slave(ctx, 1);
modbus_connect(ctx);
mb_mapping = modbus_mapping_new(MODBUS_MAX_READ_BITS, 0,
MODBUS_MAX_READ_REGISTERS, 0); // fnc3기준, 0~79address
//3번째 인자값에 의해 fnc3의 메모리크기가 증가
mb_mapping->tab_registers[01]=123; //[ ] 안에 숫자가 메모리 주소, 우측값이 데이터
mb_mapping->tab_registers[02]=456;
mb_mapping->tab_registers[03]=789;
if (mb_mapping == NULL) { 에러코드! }
while(1){
uint8_t query[MODBUS_TCP_MAX_ADU_LENGTH];
rc = modbus_receive(ctx, query);
if (rc >= 0) modbus_reply(ctx, query, rc, mb_mapping);
else break;
}
에러코드!
modbus_mapping_free(mb_mapping);
modbus_free(ctx);
~
~
실행결과
이전글에서 사용했던 Comanalyzer를 이용하여 Master -> PC로 데이터 전송시,
Fnc-3 , Address-1 을 입력하면 출력값으로 123
Fnc-3 , Address-1 을 입력하면 출력값으로 456
Fnc-3 , Address-1 을 입력하면 출력값으로 789
완벽하게 나옵니다!
통신설정에 대한내용은 이전글을 참조해주시길 바랍니다.
링크는 아래를 클릭하시면 됩니다.
'프로그래밍 > C' 카테고리의 다른 글
[C언어]리눅스 공유메모리(shared memory) 사용하기 (0) | 2020.10.01 |
---|---|
[C언어]리눅스/윈도우 호환 프로그래밍 기타 팁 (0) | 2020.10.01 |
[C언어]조건부로 linux, Win32 컴파일 - ifdef 이용 (0) | 2020.10.01 |
[C언어]window mutex, linux mutex 코드 비교 (0) | 2020.10.01 |
[C언어]리눅스 Modbus통신 RS485 Write register (0) | 2020.10.01 |