modbu-tcp协议发送读取离散寄存器报文C语言实例
时间: 2024-03-27 20:40:08 浏览: 70
以下是一个使用C语言实现发送读取离散寄存器报文的例子:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#define SERVER_IP "192.168.1.100" // 服务器IP地址
#define SERVER_PORT 502 // 服务器端口号
int main() {
// 创建套接字
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
perror("socket");
exit(1);
}
// 设置服务器地址
struct sockaddr_in server_addr;
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);
server_addr.sin_port = htons(SERVER_PORT);
// 连接服务器
if (connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
perror("connect");
exit(1);
}
// 发送读取离散寄存器报文
unsigned char message[12] = {0x01, 0x02, 0x00, 0x00, 0x00, 0x06, 0x01, 0x02, 0x00, 0x00, 0x00, 0x01};
write(sockfd, message, sizeof(message));
// 接收服务器响应
unsigned char response[256];
int len = read(sockfd, response, sizeof(response));
if (len < 0) {
perror("read");
exit(1);
}
// 关闭套接字
close(sockfd);
return 0;
}
```
其中,message数组存储了发送的读取离散寄存器报文,response数组存储了服务器的响应。需要根据具体情况修改SERVER_IP和SERVER_PORT的值。
阅读全文