【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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();
}







![给定n个字符串s[1...n], 求有多少个数对(i, j), 满足i < j 且 s[i] + s[j] == s[j] + s[i]?](https://img-blog.csdnimg.cn/direct/85d295adffbd4ef8897e17df713e7440.jpeg)











