Red de conocimiento informático - Problemas con los teléfonos móviles - Cómo utilizar la biblioteca libmodbus-master para implementar modbus en QT

Cómo utilizar la biblioteca libmodbus-master para implementar modbus en QT

La TI de la escuela Qianbaikou le proporciona:

LibModbusTest2.pro

#----------------------- -- ------------------------

#

# Proyecto creado por QtCreator 2015-04- 03T11: 38:46

#

#------------------------------- - --------------------

QT = interfaz gráfica de usuario principal

mayor que (QT_MAJOR_VERSION, 4): QT = widgets< / p>

OBJETIVO = LibModbusTest2

PLANTILLA = aplicación

FUENTES = main.cpp\

mainwindow.cpp \

libmodbus/modbus. c \

libmodbus/modbus-data.c (

libmodbus/modbus-rtu.c) (

libmodbus/modbus-tcp.c) (

libmodbus/modbus-rtu.c) p>

HEADERS = mainwindow.h (

libmodbus/modbus.h) (

libmodbus/modbus- private.h) (

libmodbus/ modbus-rtu.h \

libmodbus/modbus-rtu-private.h \

libmodbus/modbus-tcp. h \

libmodbus/modbus-tcp -private.h \

libmodbus/modbus-version.h \

libmodbus/ config.h

LIBS = -Ldll -lws2_32

mainwindow.cpp

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include "ui_mainwindow.h"

# include

#include

#include "libmodbus/modbus.h"

MainWindow::MainWindow(QWidget *padre):

p>

QMainWindow(padre)

{

this-gt; 200, 60);

this-gt; setWindowTitle("prueba de esclavo libmodbus");

pbRtu=new QPushButton("Leer las primeras 20 direcciones de la dirección 1 en un modbus rtu Lea los primeros 20 valores de registro en la dirección 1 como modbus rtu", esto

s);

pbRtu-gt; resize(200, 30);

pbTcp=new QPushButton("Lea los primeros 20 valores de registro en la dirección 1 como modbus tcp", esto) ;

pbRtu-gt; resize(200, 30);

QWidget *w=nuevo QWidget();

QVBoxLayout *layout=nuevo QVBoxLayout () ;

layout-gt;addWidget(pbRtu);

layout-gt;addWidget(pbTcp);

w-gt;setLayout(layout) ;

this-gt; setCentralWidget(w);

connect(pbRtu, SIGNAL(clicked()), this, SLOT(doRtuQuery()));

connect(pbTcp, SIGNAL(clicked()), this, SLOT(doTcpQuery()));

}

MainWindow::~MainWindow()

{

}

void MainWindow::doRtuQuery()

{

modbus_t *mb;

uint16_t tab_reg[32]= {0};

mb = modbus_new_rtu("COM1", 9600, 'N', 8, 1); //Solo uno de los mismos puertos puede estar abierto en el mismo tiempo

modbus_set_slave(mb, 1); //Establece la dirección del esclavo modbus

modbus_connect (mb);

struct timeval t;

t.tv_sec=0;

t.tv_usec=1000000; //establece el tiempo de espera de modbus en 1000 milisegundos

modbus_set_response_timeout(mb, amp; t);

int regs=modbus_read_registers(mb, 0, 20, tab_reg);

QMessageBox::about(NULL, "Reporting", QString("Número de registros leídos por Rtu: 1") .arg (regs));

modbus_close(mb);

modbus_free(mb);

}

void MainWindow:: doTcpQuery( )

{

modbus_t *mb;

uint16_t tab_reg[32]={0};

mb = modbus_new_tcp( "127.0 .0.1", 5101); //Porque es tcp

Conexión de cliente, el mismo puerto se puede conectar varias veces en el mismo programa.

modbus_set_slave(mb, 1); //Dirección del esclavo

modbus_connect(mb);

struct timeval t;

t . tv_sec=0;

t.tv_usec=1000000; //Establezca el tiempo de espera de modbus en 1000 milisegundos. Nota: Si la conexión tcp no se establece correctamente, esta configuración no será válida.

modbus_set_response_timeout(mb, amp; t);

int regs=modbus_read_registers(mb, 0, 20, tab_reg);

QMessageBox::about(NULL); , "Reporte", QString("Número de registros leídos por Tcp: 1").arg(regs));

modbus_close(mb);

modbus_free(mb);

}

.