首页 > 其他分享 >modbus TCP 操作寄存器,控制气密性测试仪

modbus TCP 操作寄存器,控制气密性测试仪

时间:2024-06-17 16:23:22浏览次数:21  
标签:Modbus int register ctx TCP modbus 测试仪 寄存器

#include "modbus.h"
#include <iostream>
#pragma comment ( lib,"modbus.lib" )

using namespace std;
int main()
{
    modbus_t* ctx;
    const char* ipAddress = "192.168.1.2"; // Modbus TCP 从机的 IP 地址
    const int port = 8000; // Modbus TCP 端口号
    const int slaveId = 1; // 从机 ID

    int rc;

    //创建Modbus TCP上下文
    ctx = modbus_new_tcp(ipAddress, port);
    if (ctx == nullptr) {
        std::cerr << "Failed to create Modbus context" << std::endl;
        system("pause");
        return -1;
    }

    //连接到Modbus从设备
    if (modbus_connect(ctx) == -1) {
        std::cerr << "Modbus connection failed: " << modbus_strerror(errno) << std::endl;
        modbus_free(ctx);
        system("pause");
        return -1;
    }
    else
        std::cout << "连接到Modbus从设备 成功" << std::endl;


    //写入Modbus寄存器
     int registerAddress = 90;  // 寄存器地址
     int numRegisters = 10;     // 寄存器数量
    uint16_t writeValue_register[10];
    uint16_t readValue_register[10];

    modbus_set_slave(ctx, slaveId);
    for (int i = 0; i < numRegisters; i++) {
        writeValue_register[i] = i + 1; // 填充要写入的寄存器值
    }
    for (int i = 0; i < numRegisters; i++) {
        
        cout <<"writeValue : " << i << writeValue_register[i] << endl;// show 来看一下 
         
    }

    for (int i = 0; i < numRegisters; i++) {
        modbus_set_slave(ctx, slaveId);
        rc = modbus_write_register(ctx, registerAddress, uint16_t(writeValue_register[i]));
        registerAddress++;
        if (rc == -1) {
            cerr << "Failed to write to register: "<< i<<" "<< modbus_strerror(errno) << endl;
            system("pause");
            //return -1;
        }
    }
    //读取Modbus寄存器
    registerAddress = 90;
    modbus_set_slave(ctx, slaveId);
    rc = modbus_read_registers(ctx, registerAddress, numRegisters, readValue_register);
    if (rc == -1) {
        std::cerr << "Failed  to read Modbus registers: " << modbus_strerror(errno) << std::endl;
        system("pause");
        return -1;
    }  
    else {
        //打印读取到的寄存器值
         for (int i = 0; i < 10; i++)
         {
             //此代k码段从从设备的首个寄存器开始读取10个寄存器,并将结果打印到屏幕上。
             cout << "Register " << i << ": " << readValue_register[i] << endl;
         }
    }

    modbus_close(ctx);
    modbus_free(ctx);
    system("pause");
    return 0;
}

标签:Modbus,int,register,ctx,TCP,modbus,测试仪,寄存器
From: https://www.cnblogs.com/wang-xiao-shuai/p/18252631

相关文章

  • python IP 端口 socket tcp 介绍
    IP端口介绍1、IPIP地址是分配给网络设备上网使用的数字标签,它能够标识网络中唯一的一台设备windows环境可以使用ipconfig来查看自己的iplinux环境可以使用ifconfig来查看自己的ip2、端口端口是传输数据的通道,每个操作系统上都有65535个端口,通过对应的端口号把数......
  • Modbus转Profibus网关接变频器:实现工业自动化无缝连接
    一、背景在工业自动化领域,Modbus和Profibus是两种常见的通讯协议,而变频器作为控制电机转速的重要设备。为了实现不同设备之间的无缝连接和数据传输,现场大多数采用Modbus转Profibus网关(XD-MDPB100)来解决Modbus设备和Profibus设备通讯问题。本文将介绍Modbus转Profibus网关(XD-MDPB1......
  • 使用Modbus转Profinet网关无需编写Modbus轮询程序,实现PLC和电表通信
    一、无需编写Modbus轮询程序实现PLC与电表通信的方法在工业自动化领域,PLC(可编程逻辑控制器)与电表之间的通信是非常常见的需求。传统上,为了让PLC与电表进行通信,通常需要编写Modbus轮询程序来实现数据的读取和控制。然而,近年来出现了一种新的方法,即通过使用Modbus转Profinet网关,可......
  • 无线模块通过TCP/IP协议实现与PC端的数据传输解析
    在当今的信息时代,无线通信技术的发展日新月异,为我们的工作和生活带来了极大的便利。其中,无线通信模块通过TCP/IP协议向PC端传送数据已经成为了一种常见的通信方式。无线通信模块是一种能够在无线网络中进行数据传输的设备。它通常集成了网络接口层、传输层和应用层等多个功能模块......
  • Modbus转Profinet网关连接ABB变频器Modbus通讯调试
    一、前景:在工业自动化领域,Modbus协议和Profinet协议是两种常见的通讯协议,而ABB变频器作为一种常用的变频控制设备,其通讯调试对于系统稳定运行至关重要。二、优势:Modbus协议转Profinet协议网关能够实现不同协议之间的无缝对接和通信,为工业自动化系统的互联提供了便利。通过网关的......
  • Go黑帽子|TCP扫描器和代理
    TCP扫描器在worker函数中通过net.Dial测试端口连通,并把worker放到goroutine中运行,port作为管道在主程序和携程中传递扫描信息packagemainimport( "fmt" "net" "sort")funcworker(portschanint,resultschanint){ forp:=rangeports{ address:=fmt.Spr......
  • TCP协议的客户端和服务端的多路复用
    #include<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<arpa/inet.h>#include<unistd.h>#include<string.h>#include<sys/time.h>#include<sys/select.h> intmain(void){   //1.创建套接字......
  • Modbus协议转Profinet协议网关与气体监测系统配置案例
    一、背景;Modbus协议和Profinet协议作为工业领域常见的两种通讯协议,各自具有一定的特点和应用范围。Modbus转Profinet网关(XD-MDPN100/300)在工业自动化控制系统中,可以将Modbus协议转换为Profinet协议,以实现不同设备之间的数据交换和通讯二、前景;许多现有的工业设备采用Modbus协议进......
  • 【计算机网络】TCP报文详解
    认识TCP报头其实协议的形式都是一个结构化的数据,TCP协议也不例外。一起来看看TCP协议的报头是怎么样的。以上就是TCP报头,实际上是一个结构化的数据,也就是一个结构体。例如:structtcp_hdr{unsignedintstc_port:16;unsignedintdesc_port:16;unsi......
  • mptcp inside lxc container can't access /proc/sys/net/mptcp_enabled
    https://github.com/multipath-tcp/mptcp/issues/470 VenkateswaranJ commented onMar20,2022 • edited Hi,Ihavecreatedanlxccontainer(ubuntu20.04)withprivilegedmodeandmyhostmachinehasmptcpkernelinstalledubuntu20.04.For......