المنفذ التسلسلي (منفذ كوم) هو واجهة تستخدم لتبادل البيانات بين الكمبيوتر والأجهزة الخارجية. يستخدم على نطاق واسع في مختلف المجالات مثل الروبوتات والأتمتة والتواصل مع أجهزة الإدخال/الإخراج.
كيو تي هو إطار شعبية لتطوير التطبيقات عبر منصة ، والتي لديها قدرات قوية للعمل مع المنفذ التسلسلي. في دليل المبتدئين البسيط هذا ، سنلقي نظرة على الخطوات الأساسية لقراءة البيانات من المنفذ التسلسلي في كيو تي.
أولا وقبل كل شيء ، سوف تحتاج إلى تثبيت كيو تي على جهاز الكمبيوتر الخاص بك وإنشاء مشروع جديد. ثم يجب عليك إضافة فئة كسريالبورت إلى المشروع الخاص بك ، والذي يوفر واجهة مريحة للعمل مع المنفذ التسلسلي.
بعد ذلك ، يجب عليك تكوين معلمات المنفذ التسلسلي مثل معدل نقل البيانات ، بتات البيانات ، بتات التكافؤ ، إلخ. تحديد جميع المعلمات اللازمة وتعيينها باستخدام سيتباودرات () ، سيتباريتي () ، سيتستوبيتس () وغيرها من الأساليب.
- كيفية الوصول إلى المنفذ التسلسلي في كيو تي
- تثبيت المكتبات وبرامج التشغيل اللازمة
- إنشاء فئة للعمل مع المنفذ التسلسلي
- فتح المنفذ التسلسلي وتكوين معلمات الاتصال
- قراءة البيانات من المنفذ التسلسلي
- معالجة الأخطاء وإغلاق الاتصال
- سؤال وجواب
- المكتبات التي يجب أن تستخدم لقراءة المنفذ التسلسلي في كيو تي?
- كيف يمكنني توصيل مكتبة كسريالبورت إلى مشروع في كيو تي?
- كيف يمكنني فتح المنفذ التسلسلي للقراءة في كيو تي?
- كيف يمكنني معرفة ما اذا كان يتم فتح المنفذ التسلسلي بنجاح في كيو تي?
- كيفية قراءة البيانات من المنفذ التسلسلي في كيو تي?
- كيفية التعامل مع الخطأ من قراءة البيانات من المنفذ التسلسلي في كيو تي?
كيفية الوصول إلى المنفذ التسلسلي في كيو تي
للعمل مع المنفذ التسلسلي في كيو تي ، يجب عليك استخدام فئة كسريالبورت من وحدة كتسيريالبورت. يوفر هذا الفصل واجهة سهلة الاستخدام لقراءة البيانات وكتابتها عبر منفذ تسلسلي.
لبدء العمل مع كسريالبورت ، تحتاج إلى توصيل وحدة في المشروع عن طريق إضافة السطر التالي إلى ملف برو:
كيو تي + = سيريالبورت
بعد ذلك ، يمكنك إنشاء مثيل من فئة كسريالبورت وتكوين المعلمات ، مثل اسم المنفذ ، ومعدل نقل البيانات ، بتات البيانات ، بت وقف ، الخ.
مثال التعليمات البرمجية لإنشاء وتكوين كائن كسريالبورت:
// إنشاء كائن كسريالبورت
كسيريالبورت * سيريالبورت = جديد كسيريالبورت (هذا);
// تكوين معلمات المنفذ
سيريالبورت- > سيتبورتنام ("كوم 1"); // Имя порта (например, COM1 на Windows или /dev/ttyUSB0 на Linux)
serialPort->setBaudRate(QSerialPort::Baud115200); // Скорость передачи данных (например, 115200 бит/с)
serialPort->setDataBits(QSerialPort::Data8); // Биты данных (например, 8 бит)
serialPort->setParity(QSerialPort::NoParity); // Паритет (нет)
serialPort->setStopBits(QSerialPort::OneStop); // Стоп-биты (1 бит)
serialPort->setFlowControl(QSerialPort::NoFlowControl); // Управление потоком (нет)
بعد ذلك ، يمكنك فتح المنفذ باستخدام طريقة الفتح () والتحقق مما إذا كان قد تم فتحه بنجاح:
// فتح الميناء
إذا (سيريالبورت - > فتح (كيوديفيس::ريدوريت)) {
// تم فتح المنفذ بنجاح
} آخر {
// حدث خطأ أثناء فتح المنفذ
}
بعد فتح المنفذ بنجاح ، يمكن قراءة البيانات وكتابتها. يتم استخدام طريقة الكتابة () لكتابة البيانات إلى المنفذ ، ويتم استخدام طريقة القراءة () لقراءتها. على سبيل المثال ، لكتابة سلسلة إلى منفذ:
// اكتب البيانات إلى منفذ
كيوبيتيراي البيانات = "مرحبا ، العالم!";
سيريالبورت - > الكتابة (البيانات);
لقراءة البيانات من منفذ ، يمكنك استخدام إشارة القراءة الجاهزة () ، والتي يتم تشغيلها عند وصول بيانات جديدة إلى المنفذ. مثال على فتحة معالجة إشارة القراءة الجاهزة ():
// فتحة لقراءة البيانات من المنفذ
فواد ميسيريالبورت:: هاندلريديريد () {
بيانات كيوبيتيراي = سيريالبورت - >ريدال();
// معالجة قراءة البيانات
}
لإغلاق المنفذ ، استخدم طريقة الإغلاق ().
يمكن العثور على جميع الطرق والإشارات المتاحة لفئة كيو سيريالبورت ، بالإضافة إلى وصف مفصل وأمثلة الاستخدام ، في وثائق كيو تي الرسمية على: https://doc.qt.io/qt-5/qserialport.html .
تثبيت المكتبات وبرامج التشغيل اللازمة
قبل البدء في استخدام المنفذ التسلسلي في كيو تي ، تحتاج إلى تثبيت العديد من المكتبات وبرامج التشغيل الهامة التي تضمن التشغيل السليم للمنافذ.
- كيو تي المنفذ التسلسلي: هذه هي وحدة كيو تي الرسمية التي توفر فئات ووظائف للعمل مع المنافذ التسلسلية. تحتاج إلى تثبيت هذه الوحدة لتتمكن من استخدام المنفذ التسلسلي في التطبيق الخاص بك. يمكنك تثبيته باستخدام المثبت كيو تي أو المثبت حزمة من نظام التشغيل الخاص بك.
- برامج تشغيل المنافذ التسلسلية: للعمل مع المنافذ التسلسلية ، تحتاج أيضا إلى تثبيت برامج التشغيل المناسبة لنظام التشغيل الخاص بك. إذا كنت تعمل على ويندوز ، وعادة ما يتم تضمين برامج تشغيل منافذ أوسب في حزمة التثبيت كيو تي. إذا كنت تستخدم لينكس ، يمكنك التحقق من وجود برامج تشغيل في التوزيع الخاص بك أو تثبيتها باستخدام مدير الحزم. بالنسبة لنظام التشغيل ماك أوس إكس ، عادة ما يتم تضمين برامج التشغيل أيضا في حزمة تثبيت كيو تي أو يمكن العثور عليها على الموقع الرسمي للشركة المصنعة.
بعد تثبيت جميع المكونات وبرامج التشغيل الضرورية ، ستكون جاهزا لبدء استخدام المنفذ التسلسلي في تطبيق كيو تي الخاص بك. سيكون اتصال المنفذ التسلسلي ونقل البيانات متاحا الآن باستخدام الفئات والوظائف التي توفرها وحدة المنفذ التسلسلي كيو تي.
إنشاء فئة للعمل مع المنفذ التسلسلي
في هذا القسم ، ونحن سوف ننظر في عملية إنشاء فئة للعمل مع المنفذ التسلسلي في كيو تي. سيسمح لك الفصل بفتح البيانات وإغلاقها وقراءتها وكتابتها باستخدام المنفذ التسلسلي.
الخطوة 1: إنشاء فئة
دعونا إنشاء فئة جديدة تسمى سيريالبورت ، ترث من فئة كوبجيكت. في المسلسل.ح الملف:
# إفندف سيريالبورت_ح
# تعريف التسلسل
# تشمل
# تشمل
# تشمل
فئة سيريالبورت : public QObject
{
Q_OBJECT
public:
explicit SerialPort(QObject *parent = nullptr);
signals:
public slots:
void openSerialPort(QString portName, qint32 baudRate);
void closeSerialPort();
void writeData(QByteArray data);
void readData();
private:
QSerialPort *m_serialPort;
};
#endif // SERIALPORT_H
- Первым делом подключаем необходимые файлы, включая QSerialPort.
- Создаем класс SerialPort, который наследуется от QObject.
- نقوم بتشغيل نظام الكائن الفوقي باستخدام ماكرو كيوبجيكت ، والذي سيسمح لنا باستخدام الإشارات والفتحات.
- إعلان طرق فتح وإغلاق وقراءة وكتابة البيانات إلى المنفذ التسلسلي.
- إنشاء حقل كسيريالبورت الخاص الذي سيتم استخدامه للتفاعل مع المنفذ التسلسلي.
الخطوة 2: تحديد طرق الفصل
الآن ، في ملف سيريالبورت.cpp, нам нужно определить методы класса:
#include "serialport.h"
SerialPort::SerialPort(QObject *parent) : QObject(parent)
{
m_serialPort = new QSerialPort(this);
}
void SerialPort::openSerialPort(QString portName, qint32 baudRate)
{
m_serialPort->setPortName(portName);
m_serialPort->setBaudRate(baudRate);
m_serialPort->setDataBits(QSerialPort::Data8);
m_serialPort->setParity(QSerialPort::NoParity);
m_serialPort->setStopBits(QSerialPort::OneStop);
m_serialPort->setFlowControl(QSerialPort::NoFlowControl);
if (m_serialPort->open(QIODevice::ReadWrite))
{
كديبوغ () < < "فتح المنفذ التسلسلي بنجاح!";
}
آخر
{
قديبوغ () < < "فشل في فتح المنفذ التسلسلي!";
}
}
باطل سيريالبورت:: كلوسيريالبورت()
{
إذا (م_سيريالبورت - >إسوبين())
{
م_سيريالبورت - > إغلاق();
كديبوغ () < < "المنفذ التسلسلي مغلقة بنجاح!";
}
}
باطل سيريالبورت:: وريتداتا (كيوبيتيراي البيانات)
{
إذا (م_سيريالبورت - >إسوبين())
{
م_سيريالبورت - > الكتابة (البيانات);
كديبوغ () < < "البيانات المكتوبة إلى المنفذ التسلسلي";
}
}
باطل سيريالبورت:: ريداتا()
{
إذا (م_سيريالبورت- > إسوبين () & & م_سيريالبورت- > بايت المتاحة () > 0)
{
كيبيتيراي البيانات = م_سيريالبورت->ريدال();
كديبوغ () < < "قراءة البيانات من المنفذ التسلسلي:" < < البيانات;
}
}
- في منشئ الفئة ، نقوم بتهيئة م_سيريالبورت.
- تفتح طريقة أوبنسيريالبورت المنفذ التسلسلي بالإعدادات المحددة.
- تغلق طريقة كلوسيرياليبورت المنفذ التسلسلي المفتوح.
- تكتب طريقة كتابة البيانات البيانات إلى المنفذ التسلسلي.
- تقرأ طريقة قراءة البيانات البيانات المتاحة من المنفذ التسلسلي.
الآن لدينا فئة تعمل بكامل طاقتها التي يمكننا استخدامها للعمل مع المنفذ التسلسلي في كيو تي! هذا سيجعل حياتنا أسهل ويسمح لنا بالتركيز على المنطق الأساسي لتطبيقنا.
فتح المنفذ التسلسلي وتكوين معلمات الاتصال
للعمل مع المنفذ التسلسلي في كيو تي ، تحتاج إلى فتح المنفذ وتكوين معلمات الاتصال. في هذا القسم ، سننظر في كيفية القيام بذلك.
بادئ ذي بدء ، تحتاج إلى إضافة ملف الرأس التالي:
# تشمل
لفتح وتكوين المنفذ التسلسلي ، تحتاج إلى إنشاء كائن من فئة كسريالبورت:
كسيريالبورت سيريالبورت;
بعد ذلك ، قبل فتح المنفذ ، تحتاج إلى تكوين معلماته باستخدام طريقة سيتباودرات (). على سبيل المثال ، يحدد الكود التالي معدل نقل البيانات إلى 9600 بت في الثانية:
سيريالبورت.سيتبودريت (كيوسيريالبورت:: بود9600);
يمكنك أيضا تعيين معلمات أخرى مثل عدد بتات البيانات ، والتكافؤ ، وعدد بتات الإيقاف ، وما إلى ذلك. يمكن العثور على معلومات مفصلة حول قيم المعلمات المحتملة في وثائق كيو تي.
بعد تعيين المعلمات ، يمكنك فتح المنفذ باستخدام طريقة الفتح (). على سبيل المثال:
إذا (سيريالبورت.فتح (كيوديفيس::قراءة الكتابة)) {
// تم فتح المنفذ بنجاح
} آخر {
// خطأ في فتح المنفذ
}
إذا تم فتح المنفذ بنجاح ، فيمكنك البدء في قراءة البيانات وكتابتها. في حالة حدوث خطأ في فتح المنفذ ، يجب التعامل معه وفقا لذلك.
بعد العمل مع المنفذ ، يجب إغلاقه باستخدام طريقة الإغلاق() :
سيريالبورت.إغلاق();
في هذا القسم ، نظرنا في فتح المنفذ التسلسلي وتكوين معلمات الاتصال باستخدام فئة كسريالبورت في كيو تي.
قراءة البيانات من المنفذ التسلسلي
لقراءة البيانات من المنفذ التسلسلي في كيو تي ، تحتاج إلى اتباع عدة خطوات:
- افتح المنفذ.
- تكوين إعدادات المنفذ.
- إنشاء كائن من فئة كسريالبورت للعمل مع المنفذ.
- اضبط معلمات المنفذ.
- قم بتوصيل إشارة قراءة البيانات بالفتحة المطلوبة.
- معالجة البيانات المقروءة.
- أغلق المنفذ بعد الاستخدام.
مثال على الكود:
// فتح منفذ
ميناء كيوسيريالبورت;
ميناء.سيتبورتنام ("كوم 1");
إذا (!ميناء.فتح (كيوديفيس::للقراءة فقط)) {
qDebug() << "Не удалось открыть порт";
return;
}
// Настройка параметров порта
port.setBaudRate(QSerialPort::Baud9600);
port.setDataBits(QSerialPort::Data8);
port.setParity(QSerialPort::NoParity);
port.setStopBits(QSerialPort::OneStop);
// Подключение сигнала считывания данных к слоту
connect(&port, &QSerialPort::readyRead, this, &MyClass::readData);
// Обработка считанных данных
void MyClass::readData()
{
QByteArray data = port.readAll();
qDebug() << "Прочитано" << data.الحجم () < < "بايت";
// مزيد من معالجة البيانات
}
// إغلاق المنفذ
ميناء.إغلاق();
في هذا المثال ، يتم فتح المنفذ للقراءة ، ويتم تكوين معلماته (معدل النقل ، بتات البيانات ، بتات التكافؤ ، بتات الإيقاف) ويتم إنشاء اتصال بين إشارة القراءة الجاهزة وفتحة قراءة البيانات ، والتي سيتم استدعاؤها عند تلقي البيانات. تتم قراءة جميع البيانات المتاحة في فتحة قراءة البيانات ومعالجتها.
معالجة الأخطاء وإغلاق الاتصال
عند العمل مع المنفذ التسلسلي في كيو تي ، من المهم النظر في إمكانية حدوث أخطاء عند قراءة البيانات أو كتابتها. في حالة حدوث خطأ ، من الضروري معالجته بشكل صحيح وإغلاق الاتصال بالمنفذ.
يتم تنفيذ معالجة الخطأ في كيو تي باستخدام خطأ () إشارة. عند حدوث خطأ, كيو تي يولد هذه الإشارة, ويمكنك الاشتراك في ذلك لمعالجة الأخطاء.
من المهم أيضا إغلاق الاتصال بالمنفذ بشكل صحيح بعد الانتهاء من العمل. للقيام بذلك ، يمكنك استخدام طريقة إغلاق() من فئة كسريالبورت.
مثال على معالجة الأخطاء وإغلاق الاتصال:
# تشمل
# تشمل
# تشمل
كثافة العمليات الرئيسية()
{
// إنشاء كائن من فئة كسريالبورت
مسلسل كسيريالبورت;
// ابحث عن المنافذ المتاحة
<url> / <url> / <url> / <url>
// التحقق مما إذا كان المنفذ مطلوبا
إذا (معلومات.اسم المنفذ () = = "كوم 1") {
// تعيين اسم المنفذ ومعلمات الاتصال
مسلسل.سيتبورت (معلومات);
مسلسل.سيتبودريت (كيوسيريالبورت:: بود115200);
مسلسل.سيتداتابيتس (كيوسيريالبورت:: داتا 8);
مسلسل.سيتيباريتي (كيوسيريالبورت:: نوباريتي);
مسلسل.سيتستوبيتس (كسريالبورت:: أونيستوب);
مسلسل.سيتفلوكونترول (كسريالبورت:: نوفلوكونترول);
// Попытка открытия порта
إذا (مسلسل.فتح (كيوديفيس::قراءة الكتابة)) {
كديبوغ () < < "فتح المنفذ";
// Чтение данных из порта
البيانات كيوبيتيراي = المسلسل.قراءة();
كديبوغ () < < "البيانات الواردة:" < < البيانات;
// Закрытие порта после окончания работы
مسلسل.إغلاق();
كديبوغ () < < "ميناء مغلق";
} آخر {
قديبوغ () < < "فشل في فتح المنفذ:" < < المسلسل.سلسلة الأخطاء();
}
استراحة;
}
}
العودة 0;
}
في هذا المثال ، نقوم أولا بإنشاء كائن من فئة كسريالبورت ، ثم العثور على المنافذ المتاحة والتحقق مما إذا تم العثور على المنفذ المطلوب. إذا تم العثور على المنفذ ، فإننا نضبط معلمات الاتصال ونحاول فتح المنفذ باستخدام طريقة الفتح (). إذا نجح الافتتاح ، يمكننا البدء في قراءة البيانات من المنفذ وإجراء عمليات أخرى بمحتوياته. إذا فشل الافتتاح ، ونحن إخراج رسالة خطأ باستخدام طريقة إرورسترينغ (). على أي حال ، يجب علينا دائما إغلاق الاتصال باستخدام طريقة الإغلاق ().
سؤال وجواب
المكتبات التي يجب أن تستخدم لقراءة المنفذ التسلسلي في كيو تي?
لقراءة المنفذ التسلسلي في كيو تي ، يجب عليك استخدام مكتبة كيوسيريالبورت.
كيف يمكنني توصيل مكتبة كسريالبورت إلى مشروع في كيو تي?
لتوصيل مكتبة كسريالبورت إلى مشروع في كيو تي ، تحتاج إلى إضافته إلى file.pro السلسلة "كيو تي + = سيريالبورت".
كيف يمكنني فتح المنفذ التسلسلي للقراءة في كيو تي?
لفتح منفذ تسلسلي للقراءة في كيو تي ، تحتاج إلى إنشاء مثيل من فئة كسريالبورت ، استدعاء طريقة سيتبورتنام لتحديد اسم المنفذ ، واستدعاء طريقة فتح لفتح المنفذ.
كيف يمكنني معرفة ما اذا كان يتم فتح المنفذ التسلسلي بنجاح في كيو تي?
للتحقق مما إذا كان المنفذ التسلسلي قد تم فتحه بنجاح في كيو تي ، تحتاج إلى استدعاء طريقة إيزوبين لمثيل فئة كسريالبورت.
كيفية قراءة البيانات من المنفذ التسلسلي في كيو تي?
لقراءة البيانات من المنفذ التسلسلي في كيو تي ، يمكنك استخدام أساليب القراءة أو القراءة لمثيل فئة كسريالبورت. تقوم طريقة القراءة بإرجاع العدد المحدد من وحدات البايت من البيانات ، وتقوم طريقة القراءة بإرجاع جميع البيانات المتاحة.
كيفية التعامل مع الخطأ من قراءة البيانات من المنفذ التسلسلي في كيو تي?
للتعامل مع خطأ قراءة البيانات من المنفذ التسلسلي في كيو تي ، تحتاج إلى إضافة معالج إشارة خطأ لمثيل فئة كسريالبورت. يمكنك الحصول على رمز خطأ في معالج الإشارة وتنفيذ الإجراءات اللازمة.