Can QT access any company's serial port card?
-
Can QT access any company's serial port card? If so, how to read hex string data from TEWS technology TCP-469 card from one PC to another by RS-422?
For TEWS card we first need to configure the card for RS-422 after opening the slot in read write command as following:
QSerialPort serialPort1,serialPort2; unsigned long config; char Devname1[30]; unsigned char data; int result1; int tty1;//baudrate=19200, spdres; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); strcpy(Devname1,"/dev/ttySTDRV002_2"); tty1=open(Devname1,O_RDWR|O_NOCTTY); qDebug()<<"COM port ttySTDRV002_2 has been connected" <<endl; if(tty1<0) { printf("Device not found\n"); } config = TDRV002_INTF_RS422; qDebug()<<"config"<< config << endl; result1 = ioctl(tty1, TDRV002_IOCT_CONF_TRANS, config); qDebug()<<"result1"<< result1 << endl; if(result1<0) { printf("Not able to configure receiver\n"); } if(tty2<0) { printf("Device not found\n"); } QByteArray readData,read_Data; serialPort2.setPortName(Devname1); serialPort2.setBaudRate(QSerialPort:: Baud19200); // Setting BaudRate serialPort2.setDataBits(QSerialPort:: Data8); // Setting Data Bits serialPort2.setParity(QSerialPort:: NoParity); // Setting Parity bit serialPort2.setStopBits(QSerialPort:: OneStop); // Setting Stop bit if (serialPort2.isOpen()) { qDebug()<<"COM port channel 10 has been connected" <<endl; } else qDebug()<< "Open error"<< endl; for(int i =0;i<=10;i++){ if(serialPort2.waitForReadyRead(1000)) readData = serialPort2.readAll(); qDebug()<< "Received data from channel 2"<<readData << endl; read_Data.append(readData); if (serialPort2.error() == QSerialPort::TimeoutError || readData.isEmpty()) qDebug()<<"No data was currently available for reading from port ttySTDRV002_2"<<endl; } return a.exec(); }
then if I already open the slot of RS-422 so no need to reopen it through QSerialPort but still I need to open the port using QSerialPort otherwise "Open error" message pop-up and still if I am opening it through QSerialPort then I am not getting the exact data which I need to read.
Kindly give any solution![Added code tags ~kshegunov]
-
@Nimika said in Can QT access any company's serial port card?:
I am not getting the exact data which I need to read
Can you explain better? What do you expect and what do you get.
Also, keep in mind that you will not necessarily get the data at once, so you need to buffer it until you have your whole package. -
@jsulm Its like I am sending a Hex code data like 1a 52 24 f1 12 upto 91 bytes through RS 422 cable in another PC where I have written the code I just shown. I am transmitting the data in Qbytearray and so what need to receive is the same but I am receiving like 1a 92 @ & so on and now I don't understand why am I getting this problem.
May be it's because I opened the port twice or may be need to set buffersize double of what I am receiving or may be something with the time mismatch or may be something like datatype is wrong.
-
-
then if I already open the slot of RS-422 so no need to reopen it through QSerialPort
Wrong. QSerialPort is a class wrapping O/S specific functions, so you cannot simply omit it's
open()
function@aha_1980 Yeah I have already used it but still the same problem.
As said, we cannot help you if you don't use QSerialPorts functions.
So the only thing you need to do after open is configuring it to RS-422?What is tty2?
You should also double check if the serial line settings are identical on both sides (bitrate, start, stop, parity, flow control).
-
Seems, you don't need to open a device twice. Just try to use QSerialPort::handle() after opening to do vendor-specific IOCTL's.
OOPS: I'm too late.. :)
-
@aha_1980 I haven't used tty2.
But if I am opening the serial port using QSerialPort then I am unable to configure the RS 422 channel accordingly so I need to open it though what I did in the program that's the basic opening of the serial port.
I am setting the serial line according to Qt and it is opening when I am setting the port using QSerialPort.What do you mean by this:
QSerialPort is a class wrapping O/S specific functions. -
What does not working? I do not see any your code, sorry, but I am not a psychic.
-
By looking at the code again, I also see that
QSerialPort
is a global variable. That is bad also as it is created at unknown time and may be accessed before it its constructor is run.