В настоящее время я работаю над реализацией программы на C ++ с графическим интерфейсом для управления небольшим двигателем, подключенным к контроллеру SPC 45 от Bedrat , и для этой задачи я использую QT 5.13 в Windows.
Теперь мне нужно связаться с этим контроллером, поэтому я использовал QSerialPort для этого.Тем не менее, я не получаю никакой оптической обратной связи от контроллера при записи в порт, т.е. не мигает светодиод приемника.Когда я использую, например, YAT для Windows, чтобы написать что-то, светодиод мигает, так же, как когда я использую pyserial для Python в Ubuntu.
Это код.Сначала я нахожу правильный порт с помощью vendorID 1027, затем устанавливаю несколько значений, прежде чем открывать его.Первые четыре параметра, безусловно, верны, но следующие - просто предположения, потому что этот контроллер на самом деле не задокументирован.
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
#include <iostream>
using namespace std;
int main() {
// find the port with the attached microcontroller
QList<QSerialPortInfo> ports = QSerialPortInfo::availablePorts();
quint8 id = 0;
for (auto it = ports.begin(); it != ports.end(); it++) {
cout << "Vendor Identifier = " << it->vendorIdentifier()/*.toStdString()*/ << endl;
cout << "Port Identifier = " << it->portName().toStdString() << endl;
if (it->vendorIdentifier() == 1027) {
break;
}
id++;
}
// open the designated port with specification
QSerialPort spc45_port(ports.takeAt(id));
spc45_port.setBaudRate(QSerialPort::Baud57600);
spc45_port.setDataBits(QSerialPort::Data8);
spc45_port.setParity(QSerialPort::NoParity);
spc45_port.setStopBits(QSerialPort::OneStop);
spc45_port.setFlowControl(QSerialPort::HardwareControl);
if (!spc45_port.open(QIODevice::ReadWrite)) {
cout << "error. could not open or set settings successfully." << endl;
return 1;
}
spc45_port.setDataTerminalReady(true);
QByteArray data("V2.43E");
cout << "bytes written: " << spc45_port.write(data) << endl;
spc45_port.close();
Вывод, который производит программа, следующий:
Vendor Identifier = 0
Port Identifier = COM1
Vendor Identifier = 1027
Port Identifier = COM5
QObject::startTimer: Timers can only be used with threads started with QThread
bytes written: 6
Таким образом, программа сообщает о записи 6 байтов, хотя я не уверен, почему выводится 5-я строка.Однако визуальной обратной связи от светодиода приемника нет.Кто-нибудь знает, в чем может быть проблема в моем коде, или это нормальное поведение?В настоящее время я не могу подключить мотор к устройству, так как оно еще не готово, поэтому у меня нет другого способа сказать, работает ли этот способ связи.Спасибо!