C言語組み込みシステムによるmodbus TCPCommunicationのサンプルコード

freeFree Technical Resource

This content is free to read, suitable for basic learning and search traffic.

C言語組み込みシステムによるmodbus TCPCommunicationのサンプルコード

#include stdio.h>
#include stdlib.h>
#string.hを含む
#errno.hを含む
#unistd.hを含む
#fcntl.hを含む
#include termios.h>
#include sys/socket.h>
#include netinet/in.h>
#include arpa/inet.h>

ポート50 2の定義

#ine_IP "192.168.0.100"
#define DEVICE_ID 1

#define BUFFER_SIZE 1024

int main {
    //TCPコネクションの作成
    int sockfd;
    構造体sockaddr_in server_addr;

    s = sAF_INET SOCK_0;
    if s == -1 {
        printf "Failed to create socket %s\n" strerror errno;
        リターン1;
    }

    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons PORT;
    server_._.s_=__IP;

    if connect sockfd struct sockaddr * server_addr sizeof server_addr = -1 {
        printf "Failed to connect to server %s\n" strerror errno;
        close sockfd;
        リターン1;
    }

    printf "Connected to server successfully.\n"nClose;

    //modbusリクエストの準備
    unsigned char request[BUFFER_SIZE];
    unsigned char response[BUFFER_SIZE];
    int request__;

    //リードホールドレジスタ
    int register_address = 0
    int register_count = 4;
    request_= mod_request request DEVICE_ID MODBUS_FC__HOING_ISTERS register_register_count;

    //modbusリクエストを送信
    if send srequest request_0 == -1 {
        printf "Failed to send request %s\n" strerror errno;
        close sockfd;
        リターン1;
    }

    printf "Sent request successfully.\ N 'N';

    //modbus応答の受信
    response_length = recv sockfd response BUFFER_SIZE 0;
    if_== -1 {
        printf "Failed to receive response %s\n" strerror errno;
        close sockfd;
        リターン1;
    }

    printf "Received response successfully.\ N 'N';

    //modbus応答をParseする
    int register_value = modbus_get_response_value response_length;

    printf "Register value %d\n" register_value;

    TCPコネクションを閉じる
    close sockfd;

    リターン0;
}

上記のサンプルコードは、modbusプロトコルのリードホールドレジスタ機能を使用して、TCPコネクションを介してリクエストを送信し、レスポンスを受信してParseし、最後にTCPコネクションを閉じます。コード内のSERVER_IPやDEVICE_IDなどのパラメータや、読み出したホールドレジスタのアドレスや数を実際の状況に合わせて変更できます。

#include stdio.h>
#include stdlib.h>
#string.hを含む
#errno.hを含む
#unistd.hを含む
#fcntl.hを含む
#include termios.h>
#include sys/socket.h>
#include netinet/in.h>
#include arpa/inet.h>

ポート50 2の定義

#ine_IP "192.168.0.100"
#define DEVICE_ID 1

#define BUFFER_SIZE 1024

int main {
    //TCPコネクションの作成
    int sockfd;
    構造体sockaddr_in server_addr;

    s = sAF_INET SOCK_0;
    if s == -1 {
        printf "Failed to create socket %s\n" strerror errno;
        リターン1;
    }

    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons PORT;
    server_._.s_=__IP;

    if connect sockfd struct sockaddr * server_addr sizeof server_addr = -1 {
        printf "Failed to connect to server %s\n" strerror errno;
        close sockfd;
        リターン1;
    }

    printf "Connected to server successfully.\n"nClose;

    //modbusリクエストの準備
    unsigned char request[BUFFER_SIZE];
    unsigned char response[BUFFER_SIZE];
    int request__;

    //リードホールドレジスタ
    int register_address = 0
    int register_count = 4;
    request_= mod_request request DEVICE_ID MODBUS_FC__HOING_ISTERS register_register_count;

    //modbusリクエストを送信
    if send srequest request_0 == -1 {
        printf "Failed to send request %s\n" strerror errno;
        close sockfd;
        リターン1;
    }

    printf "Sent request successfully.\ N 'N';

    //modbus応答の受信
    response_length = recv sockfd response BUFFER_SIZE 0;
    if_== -1 {
        printf "Failed to receive response %s\n" strerror errno;
        close sockfd;
        リターン1;
    }

    printf "Received response successfully.\ N 'N';

    //modbus応答をParseする
    int register_value = modbus_get_response_value response_length;

    printf "Register value %d\n" register_value;

    TCPコネクションを閉じる
    close sockfd;

    リターン0;
}
Put this resource to use in a real project?

Go to the Tool Center for message parsing, CRC verification and device debugging, or submit your requirements for selection and integration advice.

Engineer Membership

Turn this article into actionable debugging resources

After activation, you can use advanced message parsing, resource pack downloads, code examples, engineering cases and priority technical support, suitable for real project delivery.

Unlimited Advanced Tools
Resource & Code Packs
Complete Engineering Case Library
Priority Technical Support

Leave a Reply

Your email address will not be published. Required fields are marked *.