QT上位机开发(利用tcp/ip访问plc)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        plc是工控领域很重要的一个器件。简单的plc一般就是对io进行控制,但是复杂的plc,还可以控制电机、变频器,在工业生产中非常重要。一般plc的价格,也是根据有多少的io口来确定的。另外,plc的控制接口也很多,一般是以485为主。而现在,越来越多的设备选择了网络型的plc,使用起来也十分方便。今天我们就来学习下,如何在qt的环境下操作plc。

1、创建基础的qt widget环境

        为了编程和使用方便,首先创建一个qt widget环境。

2、练习qt的串口编程

        串口编程在qt上开发,也是十分地方便。本身QtSerialPort支持串口。添加合理的头文件之后,只需要在链接文件的时候添加Qt5SerialPortd.lib即可。注意,这个时候最好给出完整地lib文件地址。

#include <QApplication>
#include <QtSerialPort/QSerialPort>
#include <QDebug>

int main(int argc, char *argv[])
{
	QApplication app(argc, argv);

	QSerialPort serialPort;
	serialPort.setPortName("COM1"); 
	serialPort.setBaudRate(QSerialPort::Baud9600); 
	serialPort.setDataBits(QSerialPort::Data8); 
	serialPort.setParity(QSerialPort::NoParity); 
	serialPort.setStopBits(QSerialPort::OneStop); 

	if (serialPort.open(QIODevice::ReadWrite)) {
		qDebug() << "Serial port opened successfully.";

		// write data to plc
		QByteArray writeData = "Hello PLC";
		qint64 bytesWritten = serialPort.write(writeData);
		qDebug() << bytesWritten << " bytes written";

		// read data from plc
		QByteArray readData = serialPort.readAll();
		qDebug() << "Read data:" << readData;

		serialPort.close();
		qDebug() << "Serial port closed.";
	}
	else {
		qDebug() << "Failed to open serial port.";
	}

	return app.exec();
}

3、继续练习qt的modbus网络编程

        除了串口之外,qt还支持modbus编程。对应的头文件一般是QtSerialBus/QModbusTcpClient、QtSerialBus/QModbusDataUnit。同样,连接的时候需要添加上Qt5SerialBusd.lib文件。这个文件一样,最好添加上完整的目录地址。

#include <QApplication>
#include <QtSerialBus/QModbusTcpClient>
#include <QDebug>
#include <QtSerialBus/QModbusDataUnit>

int main(int argc, char *argv[])
{
	QApplication app(argc, argv);

	QModbusTcpClient modbusClient;
	modbusClient.setConnectionParameter(QModbusDevice::NetworkPortParameter, 502); 
	modbusClient.setConnectionParameter(QModbusDevice::NetworkAddressParameter, "192.168.1.1"); 

	// connect device first
	if (modbusClient.connectDevice()) {
		qDebug() << "Modbus TCP client connected successfully.";
		
		QModbusDataUnit readUnit(QModbusDataUnit::HoldingRegisters, 0, 10); 

		// send request
		auto *reply = modbusClient.sendReadRequest(readUnit, 1);

		if (reply) {
			if (reply->isFinished() && reply->error() == QModbusDevice::NoError) {
				qDebug() << "Read successful:";
				const QModbusDataUnit result = reply->result();
				for (int i = 0; i < result.valueCount(); ++i) {
					qDebug() << "Register" << i << ":" << result.value(i);
				}
			}
			else {
				qDebug() << "Read error:" << reply->errorString();
			}

			reply->deleteLater();
		}
		else {
			qDebug() << "Failed to send read request.";
		}

		// disconnect device now
		modbusClient.disconnectDevice();
		qDebug() << "Modbus TCP client disconnected.";
	}
	else {
		qDebug() << "Failed to connect Modbus TCP client.";
	}

	return app.exec();
}

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-01-13 08:46:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-13 08:46:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-13 08:46:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-13 08:46:04       18 阅读

热门阅读

  1. xdoj购票系统(多次循环)

    2024-01-13 08:46:04       31 阅读
  2. VSCODE插件开发API

    2024-01-13 08:46:04       30 阅读
  3. 孩子兄弟结构体【】

    2024-01-13 08:46:04       38 阅读
  4. Apache配置ssl证书-实现https访问

    2024-01-13 08:46:04       30 阅读
  5. Memcache未授权访问漏洞修复

    2024-01-13 08:46:04       43 阅读
  6. C++学习笔记(三十七):c++ 计时

    2024-01-13 08:46:04       32 阅读
  7. xbox无法登录、没有反应解决方法分享

    2024-01-13 08:46:04       131 阅读
  8. docker关闭所有容器的命令

    2024-01-13 08:46:04       37 阅读