Qt-シリアルポート操作
23734 ワード
シリアルポートの概要
シリアル通信方式を採用した拡張インタフェースである.通信回線は簡単で、一対の伝送路で双方向通信(伝送路として電話線を直接利用できる)を実現でき、コストを大幅に低減し、特に遠隔通信に適しているが、伝送速度は遅い.
シリアルインターフェースは、RS-232-C、RS-422、RS 485などを電気規格およびプロトコルによって分けられる.RS-232-C、RS-422およびRS-485規格は、コネクタ、ケーブル、またはプロトコルに関係なく、インタフェースの電気的特性のみを規定する.
シリアル・デバッグで注意すべき点:
1、異なる符号化メカニズムは混在できない.例えば、RS 232 Cは直接RS 422インタフェースに接続できない.市販の各種変換器は販売されており、変換器を通じて接続しなければならない.
2、シリアルポートデバッグ時、シリアルポートデバッグアシスタント、シリアルポート精霊など、使いやすいデバッグツールを用意し、半功倍の効果がある.
3、帯電してシリアルポートを挿入しないことを強くお勧めします.そうしないと、シリアルポートが破損しやすいです.
4、大型の工業制御と測定設備については、光電結合器を用いて設備を隔離することを提案し、具体的な耐圧値は実際の需要に応じて決定する.
Qtシリアルポートプログラミング
ファイルに追加する必要があります.
QT+=serialport
QSerialPort
QSerialPortInfo
プログラミングプロセス
まずシリアル名を取得し、名前でシリアルポートを開きます.
シリアルポートが開いているかどうかを確認し、開いている場合は閉じます.を選択して、
シリアル・オブジェクト設定の基本パラメータ
データの送受信を行うシリアル・オブジェクト
シリアルポートを閉じる
コードの概要
に注目
微信公衆番号検索「Qt_io_」あるいは「Qt開発者センター」はQt、C++の開発に関する知識をもっと知っています.
筆者-jxd
シリアル通信方式を採用した拡張インタフェースである.通信回線は簡単で、一対の伝送路で双方向通信(伝送路として電話線を直接利用できる)を実現でき、コストを大幅に低減し、特に遠隔通信に適しているが、伝送速度は遅い.
シリアルインターフェースは、RS-232-C、RS-422、RS 485などを電気規格およびプロトコルによって分けられる.RS-232-C、RS-422およびRS-485規格は、コネクタ、ケーブル、またはプロトコルに関係なく、インタフェースの電気的特性のみを規定する.
シリアル・デバッグで注意すべき点:
1、異なる符号化メカニズムは混在できない.例えば、RS 232 Cは直接RS 422インタフェースに接続できない.市販の各種変換器は販売されており、変換器を通じて接続しなければならない.
2、シリアルポートデバッグ時、シリアルポートデバッグアシスタント、シリアルポート精霊など、使いやすいデバッグツールを用意し、半功倍の効果がある.
3、帯電してシリアルポートを挿入しないことを強くお勧めします.そうしないと、シリアルポートが破損しやすいです.
4、大型の工業制御と測定設備については、光電結合器を用いて設備を隔離することを提案し、具体的な耐圧値は実際の需要に応じて決定する.
Qtシリアルポートプログラミング
ファイルに追加する必要があります.
QT+=serialport
QSerialPort
QSerialPortInfo
プログラミングプロセス
まずシリアル名を取得し、名前でシリアルポートを開きます.
foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
{
qDebug() << "serial:" << info.portName();
}
シリアルポートが開いているかどうかを確認し、開いている場合は閉じます.を選択して、
QSerialPort *SerialPort = new QSerialPort;
SerialPort->setPortName("xxx"); // 1
if(SerialPort->isOpen())
{
SerialPort->clear();
SerialPort->close();
}
if(!serialPort->isOpen())
{
serialPort->open(QIODevice::ReadWrite);
}
シリアル・オブジェクト設定の基本パラメータ
serialPort->setBaudRate(QSerialPort::Baud115200,QSerialPort::AllDirections); //
serialPort->setDataBits(QSerialPort::Data8); // 8
serialPort->setFlowControl(QSerialPort::NoFlowControl); //
serialPort->setParity(QSerialPort::NoParity); //
serialPort->setStopBits(QSerialPort::OneStop); //
データの送受信を行うシリアル・オブジェクト
//
connect(serialPort,&QIODevice::readyRead,this,[&]()
{
if(serialPort->bytesAvailable())
{
QByteArray data = serialPort->readAll();
serialPort->flush();
// ToDo
}
});
//
void SerialPort::SendData(const QByteArray &data)
{
if(serialPort && serialPort->isOpen())
{
if(data.size())
{
serialPort->write(data);
}
}
}
シリアルポートを閉じる
if(serialPort)
{
if(serialPort->isOpen())
{
serialPort->clear();
serialPort->close();
}
delete serialPort;
}
serialPort = nullptr;
コードの概要
#include
#include
class SerialPort : public QObject
{
Q_OBJECT
public:
SerialPort(QObject *parent = nullptr)
{
foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
{
qDebug() << "serial:" << info.portName();
}
serialPort = new QSerialPort;
if(serialPort->isOpen())
{
serialPort->clear();
serialPort->close();
}
serialPort->setPortName("xxx"); // ,
if(!serialPort->isOpen())
{
serialPort->open(QIODevice::ReadWrite);
}
serialPort->setBaudRate(QSerialPort::Baud115200,QSerialPort::AllDirections); //
serialPort->setDataBits(QSerialPort::Data8); // 8
serialPort->setFlowControl(QSerialPort::NoFlowControl); //
serialPort->setParity(QSerialPort::NoParity); //
serialPort->setStopBits(QSerialPort::OneStop); //
connect(serialPort,&QIODevice::readyRead,this,&SerialPort::ReadyRead);
}
~SerialPort()
{
if(serialPort)
{
if(serialPort->isOpen())
{
serialPort->clear();
serialPort->close();
}
delete serialPort;
}
serialPort = nullptr;
}
void SendData(const QByteArray &)
{
if(serialPort && serialPort->isOpen())
{
if(data.size())
{
serialPort->write(data);
}
}
}
public slots:
void ReadyRead()
{
if(serialPort->bytesAvailable())
{
QByteArray data = serialPort->readAll();
serialPort->flush();
Data(data);
}
}
signals:
//
void Data(const QByteArray &);
private:
QSerialPort *serialPort = nullptr;
};
に注目
微信公衆番号検索「Qt_io_」あるいは「Qt開発者センター」はQt、C++の開発に関する知識をもっと知っています.
筆者-jxd