PDA

View Full Version : qextserialport problem



cae
18th May 2010, 17:17
Hi, i'm trying to send orders to a controler by RS232 using Qextserialport, but it doesnt seem to work well...

Controler comunication channel:
RS232, 9600 baud, No parity, 8 bits, 1 stop bit, monodirectional

and what i do its this:


PortSettings portSet;

portSet.BaudRate=BAUD9600;
portSet.DataBits=DATA_8;
portSet.Parity=PAR_NONE;

portSet.StopBits=STOP_1;
portSet.FlowControl=FLOW_OFF;
portSet.Timeout_Millisec=0;
serial=new QextSerialPort("COM6",portSet);

if(serial->open(QextSerialPort::WriteOnly))
{
QMessageBox msg;
msg.setText("good");
msg.exec();

}
else
{
QMessageBox msg;
msg.setText("bad");
msg.exec();
}

QTime dieTime;

QString mesage(QString("CHR$(254);"));
serial->write(mesage.toAscii());

dieTime=QTime::currentTime().addMSecs(10);
while(QTime::currentTime()<dieTime)
QCoreApplication::processEvents(QEventLoop::AllEve nts,100);

QString mesage2("CHR$(19);");
serial->write(mesage2.toAscii());

dieTime=QTime::currentTime().addMSecs(10);
while(QTime::currentTime()<dieTime)
QCoreApplication::processEvents(QEventLoop::AllEve nts,100);


QString mesage3("CHR$(3);");
serial->write(mesage3.toAscii());

dieTime=QTime::currentTime().addMSecs(1000);
while(QTime::currentTime()<dieTime)
QCoreApplication::processEvents(QEventLoop::AllEve nts,100);

QString mesage4(QString("CHR$(254);"));
serial->write(mesage4.toAscii());

dieTime=QTime::currentTime().addMSecs(10);
while(QTime::currentTime()<dieTime)
QCoreApplication::processEvents(QEventLoop::AllEve nts,100);

QString mesage5("CHR$(25);");
serial->write(mesage5.toAscii());


dieTime=QTime::currentTime().addMSecs(10);
while(QTime::currentTime()<dieTime)
QCoreApplication::processEvents(QEventLoop::AllEve nts,100);

QString mesage6("CHR$(0);");
serial->write(mesage6.toAscii());

serial->close();

Basicly I send each order with a little delay (recomended by the protocol). The conexion seems to be set correctly because i read the good message, but afterwards the rest of orders dont seem to work.
How can i know if the error is that nothing is being sended?
is there any portSet wrong??

I know the controler works because i have another application able to control it (but i dont have the code).

thank you !!!



by the way... i use Win XP

squidge
18th May 2010, 18:42
To debug serial port communications, try Portmon (http://technet.microsoft.com/en-us/sysinternals/bb896644.aspx)from Sysinternals/Microsoft.

Also, you should use a QTimer and state machine rather than your current method. It would be much cleaner, more readable and more reliable.

What protocol are you using? Sending text such as "CHR$(0)" seems strange to me.

cae
19th May 2010, 09:21
Hi, i've been comparing the output for my app, and the one that works for the connection.

Here the working output:

0 10:03:04 SerialControl.e IRP_MJ_CREATE Options: Open
11 10:03:04 SerialControl.e IOCTL_SERIAL_SET_BAUD_RATE Rate: 9600
12 10:03:04 SerialControl.e IOCTL_SERIAL_CLR_RTS
13 10:03:04 SerialControl.e IOCTL_SERIAL_CLR_DTR
14 10:03:04 SerialControl.e IOCTL_SERIAL_SET_LINE_CONTROL StopBits: 1 Parity: NONE WordLength: 8
15 10:03:04 SerialControl.e IOCTL_SERIAL_SET_CHAR EOF:1a ERR:0 BRK:0 EVT:1a XON:11 XOFF:13
16 10:03:04 SerialControl.e IOCTL_SERIAL_SET_HANDFLOW Shake:0 Replace:0 XonLimit:1024 XoffLimit:1024
17 10:03:04 SerialControl.e IOCTL_SERIAL_GET_BAUD_RATE
18 10:03:04 SerialControl.e IOCTL_SERIAL_GET_LINE_CONTROL
19 10:03:04 SerialControl.e IOCTL_SERIAL_GET_CHARS
20 10:03:04 SerialControl.e IOCTL_SERIAL_GET_HANDFLOW
21 10:03:04 SerialControl.e IOCTL_SERIAL_SET_BAUD_RATE Rate: 9600
22 10:03:04 SerialControl.e IOCTL_SERIAL_CLR_RTS
23 10:03:04 SerialControl.e IOCTL_SERIAL_CLR_DTR
24 10:03:04 SerialControl.e IOCTL_SERIAL_SET_LINE_CONTROL StopBits: 1 Parity: NONE WordLength: 8
25 10:03:04 SerialControl.e IOCTL_SERIAL_SET_CHAR EOF:1a ERR:0 BRK:0 EVT:1a XON:11 XOFF:13
26 10:03:04 SerialControl.e IOCTL_SERIAL_SET_HANDFLOW Shake:0 Replace:0 XonLimit:1024 XoffLimit:1024
27 10:03:04 SerialControl.e IOCTL_SERIAL_CLR_DTR
28 10:03:04 SerialControl.e IOCTL_SERIAL_SET_TIMEOUTS RI:-1 RM:-1 RC:-2 WM:0 WC:0
29 10:03:04 SerialControl.e IOCTL_SERIAL_SET_WAIT_MASK Mask: RXCHAR RXFLAG CTS DSR RLSD BRK ERR RING
30 10:03:04 SerialControl.e IOCTL_SERIAL_SET_QUEUE_SIZE InSize: 4096 OutSize: 2048
31 10:03:04 SerialControl.e IOCTL_SERIAL_WAIT_ON_MASK
32 10:03:04 SerialControl.e IRP_MJ_FLUSH_BUFFERS
33 10:03:04 SerialControl.e IOCTL_SERIAL_SET_WAIT_MASK Mask:
34 10:03:04 SerialControl.e IOCTL_SERIAL_CLR_DTR
35 10:03:04 SerialControl.e IRP_MJ_FLUSH_BUFFERS
36 10:03:04 SerialControl.e IOCTL_SERIAL_PURGE Purge: RXABORT RXCLEAR
37 10:03:04 SerialControl.e IOCTL_SERIAL_PURGE Purge: TXABORT TXCLEAR
38 10:03:04 SerialControl.e IRP_MJ_CLEANUP
39 10:03:04 SerialControl.e IRP_MJ_CLOSE
40 10:03:04 SerialControl.e IRP_MJ_CREATE Options: Open
41 10:03:04 SerialControl.e IOCTL_SERIAL_GET_PROPERTIES
42 10:03:04 SerialControl.e IOCTL_SERIAL_GET_MODEMSTATUS
43 10:03:04 SerialControl.e IOCTL_SERIAL_GET_BAUD_RATE
44 10:03:04 SerialControl.e IOCTL_SERIAL_GET_LINE_CONTROL
45 10:03:04 SerialControl.e IOCTL_SERIAL_GET_CHARS
46 10:03:04 SerialControl.e IOCTL_SERIAL_GET_HANDFLOW
47 10:03:04 SerialControl.e IOCTL_SERIAL_GET_BAUD_RATE
48 10:03:04 SerialControl.e IOCTL_SERIAL_GET_LINE_CONTROL
49 10:03:04 SerialControl.e IOCTL_SERIAL_GET_CHARS
50 10:03:04 SerialControl.e IOCTL_SERIAL_GET_HANDFLOW
51 10:03:04 SerialControl.e IOCTL_SERIAL_SET_BAUD_RATE Rate: 9600
52 10:03:04 SerialControl.e IOCTL_SERIAL_CLR_RTS
53 10:03:04 SerialControl.e IOCTL_SERIAL_CLR_DTR
54 10:03:04 SerialControl.e IOCTL_SERIAL_SET_LINE_CONTROL StopBits: 1 Parity: NONE WordLength: 8
55 10:03:04 SerialControl.e IOCTL_SERIAL_SET_CHAR EOF:1a ERR:0 BRK:0 EVT:1a XON:11 XOFF:13
56 10:03:04 SerialControl.e IOCTL_SERIAL_SET_HANDFLOW Shake:0 Replace:0 XonLimit:1024 XoffLimit:1024
57 10:03:04 SerialControl.e IOCTL_SERIAL_GET_BAUD_RATE
58 10:03:04 SerialControl.e IOCTL_SERIAL_GET_LINE_CONTROL
59 10:03:04 SerialControl.e IOCTL_SERIAL_GET_CHARS
60 10:03:04 SerialControl.e IOCTL_SERIAL_GET_HANDFLOW
61 10:03:04 SerialControl.e IOCTL_SERIAL_SET_BAUD_RATE Rate: 9600
62 10:03:04 SerialControl.e IOCTL_SERIAL_CLR_RTS
63 10:03:04 SerialControl.e IOCTL_SERIAL_CLR_DTR
64 10:03:04 SerialControl.e IOCTL_SERIAL_SET_LINE_CONTROL StopBits: 1 Parity: NONE WordLength: 8
65 10:03:04 SerialControl.e IOCTL_SERIAL_SET_CHAR EOF:1a ERR:0 BRK:0 EVT:1a XON:11 XOFF:13
66 10:03:04 SerialControl.e IOCTL_SERIAL_SET_HANDFLOW Shake:0 Replace:0 XonLimit:1024 XoffLimit:1024
67 10:03:04 SerialControl.e IOCTL_SERIAL_CLR_DTR
68 10:03:04 SerialControl.e IOCTL_SERIAL_SET_TIMEOUTS RI:-1 RM:-1 RC:-2 WM:0 WC:0
69 10:03:04 SerialControl.e IOCTL_SERIAL_SET_WAIT_MASK Mask: RXCHAR RXFLAG CTS DSR RLSD BRK ERR RING
70 10:03:04 SerialControl.e IOCTL_SERIAL_SET_QUEUE_SIZE InSize: 4096 OutSize: 2048



And now my output:

0 10:04:20 ImageComposer.e IRP_MJ_CREATE Options: Open
1 10:04:20 ImageComposer.e IOCTL_SERIAL_CONFIG_SIZE Size: 0
14 10:04:20 ImageComposer.e IOCTL_SERIAL_SET_BAUD_RATE Rate: 9600
15 10:04:20 ImageComposer.e IOCTL_SERIAL_CLR_RTS
16 10:04:20 ImageComposer.e IOCTL_SERIAL_CLR_DTR
17 10:04:20 ImageComposer.e IOCTL_SERIAL_SET_LINE_CONTROL StopBits: 1 Parity: NONE WordLength: 8
18 10:04:20 ImageComposer.e IOCTL_SERIAL_SET_CHAR EOF:1a ERR:0 BRK:0 EVT:1a XON:11 XOFF:13
19 10:04:20 ImageComposer.e IOCTL_SERIAL_SET_HANDFLOW Shake:0 Replace:0 XonLimit:2048 XoffLimit:512
20 10:04:20 ImageComposer.e IOCTL_SERIAL_GET_BAUD_RATE
21 10:04:20 ImageComposer.e IOCTL_SERIAL_GET_LINE_CONTROL
22 10:04:20 ImageComposer.e IOCTL_SERIAL_GET_CHARS
23 10:04:20 ImageComposer.e IOCTL_SERIAL_GET_HANDFLOW
24 10:04:20 ImageComposer.e IOCTL_SERIAL_SET_BAUD_RATE Rate: 9600
25 10:04:20 ImageComposer.e IOCTL_SERIAL_CLR_RTS
26 10:04:20 ImageComposer.e IOCTL_SERIAL_CLR_DTR
27 10:04:20 ImageComposer.e IOCTL_SERIAL_SET_LINE_CONTROL StopBits: 1 Parity: NONE WordLength: 8
28 10:04:20 ImageComposer.e IOCTL_SERIAL_SET_CHAR EOF:1a ERR:0 BRK:0 EVT:1a XON:11 XOFF:13
29 10:04:20 ImageComposer.e IOCTL_SERIAL_SET_HANDFLOW Shake:0 Replace:0 XonLimit:2048 XoffLimit:512
30 10:04:20 ImageComposer.e IOCTL_SERIAL_GET_BAUD_RATE
31 10:04:20 ImageComposer.e IOCTL_SERIAL_GET_LINE_CONTROL
32 10:04:20 ImageComposer.e IOCTL_SERIAL_GET_CHARS
33 10:04:20 ImageComposer.e IOCTL_SERIAL_GET_HANDFLOW
34 10:04:20 ImageComposer.e IOCTL_SERIAL_SET_BAUD_RATE Rate: 9600
35 10:04:20 ImageComposer.e IOCTL_SERIAL_CLR_RTS
36 10:04:20 ImageComposer.e IOCTL_SERIAL_CLR_DTR
37 10:04:20 ImageComposer.e IOCTL_SERIAL_SET_LINE_CONTROL StopBits: 1 Parity: NONE WordLength: 8
38 10:04:20 ImageComposer.e IOCTL_SERIAL_SET_CHAR EOF:1a ERR:0 BRK:0 EVT:1a XON:11 XOFF:13
39 10:04:20 ImageComposer.e IOCTL_SERIAL_SET_HANDFLOW Shake:0 Replace:0 XonLimit:2048 XoffLimit:512
40 10:04:20 ImageComposer.e IOCTL_SERIAL_GET_BAUD_RATE
41 10:04:20 ImageComposer.e IOCTL_SERIAL_GET_LINE_CONTROL
42 10:04:20 ImageComposer.e IOCTL_SERIAL_GET_CHARS
43 10:04:20 ImageComposer.e IOCTL_SERIAL_GET_HANDFLOW
44 10:04:20 ImageComposer.e IOCTL_SERIAL_SET_BAUD_RATE Rate: 9600
45 10:04:20 ImageComposer.e IOCTL_SERIAL_CLR_RTS
46 10:04:20 ImageComposer.e IOCTL_SERIAL_CLR_DTR
47 10:04:20 ImageComposer.e IOCTL_SERIAL_SET_LINE_CONTROL StopBits: 1 Parity: NONE WordLength: 8
48 10:04:20 ImageComposer.e IOCTL_SERIAL_SET_CHAR EOF:1a ERR:0 BRK:0 EVT:1a XON:11 XOFF:13
49 10:04:20 ImageComposer.e IOCTL_SERIAL_SET_HANDFLOW Shake:0 Replace:0 XonLimit:2048 XoffLimit:512
50 10:04:20 ImageComposer.e IOCTL_SERIAL_GET_BAUD_RATE
51 10:04:20 ImageComposer.e IOCTL_SERIAL_GET_LINE_CONTROL
52 10:04:20 ImageComposer.e IOCTL_SERIAL_GET_CHARS
53 10:04:20 ImageComposer.e IOCTL_SERIAL_GET_HANDFLOW
54 10:04:20 ImageComposer.e IOCTL_SERIAL_SET_BAUD_RATE Rate: 9600
55 10:04:20 ImageComposer.e IOCTL_SERIAL_CLR_RTS
56 10:04:20 ImageComposer.e IOCTL_SERIAL_CLR_DTR
57 10:04:20 ImageComposer.e IOCTL_SERIAL_SET_LINE_CONTROL StopBits: 1 Parity: NONE WordLength: 8
58 10:04:20 ImageComposer.e IOCTL_SERIAL_SET_CHAR EOF:1a ERR:0 BRK:0 EVT:1a XON:11 XOFF:13
59 10:04:20 ImageComposer.e IOCTL_SERIAL_SET_HANDFLOW Shake:0 Replace:0 XonLimit:2048 XoffLimit:512
60 10:04:20 ImageComposer.e IOCTL_SERIAL_SET_TIMEOUTS RI:-211527296 RM:-211527296 RC:0 WM:-211527296 WC:0
61 10:04:20 ImageComposer.e IOCTL_SERIAL_GET_BAUD_RATE
62 10:04:20 ImageComposer.e IOCTL_SERIAL_GET_LINE_CONTROL
63 10:04:20 ImageComposer.e IOCTL_SERIAL_GET_CHARS
64 10:04:20 ImageComposer.e IOCTL_SERIAL_GET_HANDFLOW
65 10:04:20 ImageComposer.e IOCTL_SERIAL_SET_BAUD_RATE Rate: 9600
66 10:04:20 ImageComposer.e IOCTL_SERIAL_CLR_RTS
67 10:04:20 ImageComposer.e IOCTL_SERIAL_CLR_DTR
68 10:04:20 ImageComposer.e IOCTL_SERIAL_SET_LINE_CONTROL StopBits: 1 Parity: NONE WordLength: 8
69 10:04:20 ImageComposer.e IOCTL_SERIAL_SET_CHAR EOF:1a ERR:0 BRK:0 EVT:1a XON:11 XOFF:13
70 10:04:20 ImageComposer.e IOCTL_SERIAL_SET_HANDFLOW Shake:0 Replace:0 XonLimit:2048 XoffLimit:512

It seems that the line with Shake:0 Replace:0 XonLimit:2048 XoffLimit:512 changes the values all the time.

The working output also writes this:

28 10:03:04 SerialControl.e IOCTL_SERIAL_SET_TIMEOUTS Nmserial1 SUCCESS RI:-1 RM:-1 RC:-2 WM:0 WC:0
29 10:03:04 SerialControl.e IOCTL_SERIAL_SET_WAIT_MASK Nmserial1 SUCCESS Mask: RXCHAR RXFLAG CTS DSR RLSD BRK ERR RING
30 10:03:04 SerialControl.e IOCTL_SERIAL_SET_QUEUE_SIZE Nmserial1 SUCCESS InSize: 4096 OutSize: 2048

but i cant find any configuration for the conexion with this names!

Can you help me?

Lesiok
19th May 2010, 10:04
Are You sure that this is correct "CHR$(254)" ?
You are sending 9 bytes representing this string, not one byte with value 254.

cae
19th May 2010, 10:48
that was the problem, im sending wrong the orders, it works now :)

thank you