modbus TCP-IP로 데이터 읽기/쓰기 위한 데이터 패킷 형식 문의

글쓴이: 익명 사용자 / 작성시간: 수, 2019/10/23 - 5:22오후
첨부한 그림처럼 modbus TCP/IP 방식으로 리눅스 OS의 디바이스(server)와 리눅스/윈도우즈 OS의 PC(client) 간에 데이터 통신을 하고자 합니다.
리눅스/윈도우즈 OS 단에서는 일반적인 규격으로 데이터를 보내고 받는 프로그램을 사용할 예정이고요.
현재까지 client에서 server로 메세지를 보내서 다시 readback하는 작업은 진행을 하였습니다.
(즉, client에서 문자를 보내면 server에 들러서 다시 client에서 읽는 작업을 하였습니다, 아래 client 코드 첨부)
그리고 modbus tcp/ip를 이용하여 client에서 server로 명령어를 내리던지 원하는 버퍼에 0 또는 1을 넣어서 server(device)에서 gpio를 read/write 합니다.
헌데 buffer나 파일에 modbus tcp/ip 데이터 패킷 형식을 이용해서 0/1을 넣는 방법에서 진도가 안 나갑니다.
modbus tcp/ip 표준 데이터 형식으로 보내고자 하는데, 표준화된 데이터 패킷 형식을 어떤 식으로 만들어서 보내야 하는지 문의드립니다.
int main(int argc, char **argv) { struct sockaddr_in_serveraddr; int server_sockfd; int client_len; char but[MAXLINE]; if ((server_sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("error : "); return 1; } server_sockfd = socket(AF_INET, SOCK_STREAM, 0); serveraddr.sin_family = AF_INET; serveraddr.sin_addr.s_addr = inet_addr("192.168.0.111"); serveraddr.sin_port = htons(3500); client_len = sizeof(serveraddr); if (connect(server_sockfd, (struct sockaddr *) &serveraddr, client_len) == -1) { perror("connect error : "); return 1; } memset(buf, 0x00, MAXLINE); read(0, buf, MAXLINE); if (write(server_sockfd, buf, MAXLINE) <= 0) { perror("write error : "); return 1; } memset(buf, 0x00, MAXLINE); if(read(server_sockfd, buf, MAXLINE) <=0) { perror("read error :"); return 1; } close(server_sockfd); printf("read : %s", buf); return 0; }
File attachments:
첨부 | 파일 크기 |
---|---|
![]() | 32.78 KB |
Forums:
'아무개를 어떻게 만들어야 하는가'를 깨닫기 위해서는
'아무개를 어떻게 만들어야 하는가'를 깨닫기 위해서는 '아무개가 무엇인가'를 알아야합니다.
아무개가 무엇인지 알고 있습니까? 아무개가 뭔지는 아는데 C언어 문법을 몰라 못 만들고 있습니까?
댓글 달기