Results 1 to 5 of 5

Thread: qextserialport problem

  1. #1
    Join Date
    Nov 2009
    Posts
    39
    Thanks
    3
    Qt products
    Qt4
    Platforms
    Windows

    Default qextserialport problem

    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:

    Qt Code:
    1. PortSettings portSet;
    2.  
    3. portSet.BaudRate=BAUD9600;
    4. portSet.DataBits=DATA_8;
    5. portSet.Parity=PAR_NONE;
    6.  
    7. portSet.StopBits=STOP_1;
    8. portSet.FlowControl=FLOW_OFF;
    9. portSet.Timeout_Millisec=0;
    10. serial=new QextSerialPort("COM6",portSet);
    11.  
    12. if(serial->open(QextSerialPort::WriteOnly))
    13. {
    14. msg.setText("good");
    15. msg.exec();
    16.  
    17. }
    18. else
    19. {
    20. msg.setText("bad");
    21. msg.exec();
    22. }
    23.  
    24. QTime dieTime;
    25.  
    26. QString mesage(QString("CHR$(254);"));
    27. serial->write(mesage.toAscii());
    28.  
    29. dieTime=QTime::currentTime().addMSecs(10);
    30. while(QTime::currentTime()<dieTime)
    31. QCoreApplication::processEvents(QEventLoop::AllEvents,100);
    32.  
    33. QString mesage2("CHR$(19);");
    34. serial->write(mesage2.toAscii());
    35.  
    36. dieTime=QTime::currentTime().addMSecs(10);
    37. while(QTime::currentTime()<dieTime)
    38. QCoreApplication::processEvents(QEventLoop::AllEvents,100);
    39.  
    40.  
    41. QString mesage3("CHR$(3);");
    42. serial->write(mesage3.toAscii());
    43.  
    44. dieTime=QTime::currentTime().addMSecs(1000);
    45. while(QTime::currentTime()<dieTime)
    46. QCoreApplication::processEvents(QEventLoop::AllEvents,100);
    47.  
    48. QString mesage4(QString("CHR$(254);"));
    49. serial->write(mesage4.toAscii());
    50.  
    51. dieTime=QTime::currentTime().addMSecs(10);
    52. while(QTime::currentTime()<dieTime)
    53. QCoreApplication::processEvents(QEventLoop::AllEvents,100);
    54.  
    55. QString mesage5("CHR$(25);");
    56. serial->write(mesage5.toAscii());
    57.  
    58.  
    59. dieTime=QTime::currentTime().addMSecs(10);
    60. while(QTime::currentTime()<dieTime)
    61. QCoreApplication::processEvents(QEventLoop::AllEvents,100);
    62.  
    63. QString mesage6("CHR$(0);");
    64. serial->write(mesage6.toAscii());
    65.  
    66. serial->close();
    To copy to clipboard, switch view to plain text mode 

    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

  2. #2
    Join Date
    Sep 2009
    Location
    UK
    Posts
    2,447
    Thanks
    6
    Thanked 348 Times in 333 Posts
    Qt products
    Qt4
    Platforms
    Windows

    Default Re: qextserialport problem

    To debug serial port communications, try Portmon 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.

  3. #3
    Join Date
    Nov 2009
    Posts
    39
    Thanks
    3
    Qt products
    Qt4
    Platforms
    Windows

    Default Re: qextserialport problem

    Hi, i've been comparing the output for my app, and the one that works for the connection.

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



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

    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:
    Qt Code:
    1. 28 10:03:04 SerialControl.e IOCTL_SERIAL_SET_TIMEOUTS Nmserial1 SUCCESS RI:-1 RM:-1 RC:-2 WM:0 WC:0
    2. 29 10:03:04 SerialControl.e IOCTL_SERIAL_SET_WAIT_MASK Nmserial1 SUCCESS Mask: RXCHAR RXFLAG CTS DSR RLSD BRK ERR RING
    3. 30 10:03:04 SerialControl.e IOCTL_SERIAL_SET_QUEUE_SIZE Nmserial1 SUCCESS InSize: 4096 OutSize: 2048
    To copy to clipboard, switch view to plain text mode 

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

    Can you help me?

  4. #4
    Join Date
    Mar 2008
    Location
    Kraków, Poland
    Posts
    1,536
    Thanked 284 Times in 279 Posts
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows

    Default Re: qextserialport problem

    Are You sure that this is correct "CHR$(254)" ?
    You are sending 9 bytes representing this string, not one byte with value 254.

  5. #5
    Join Date
    Nov 2009
    Posts
    39
    Thanks
    3
    Qt products
    Qt4
    Platforms
    Windows

    Default Re: qextserialport problem

    that was the problem, im sending wrong the orders, it works now

    thank you

Similar Threads

  1. Problem with qextserialport for Qt 4.5.2 for windows
    By viniciuscst in forum Qt Programming
    Replies: 1
    Last Post: 9th November 2009, 21:01
  2. Problem with qextserialport on posix
    By bnilsson in forum Qt Programming
    Replies: 0
    Last Post: 13th June 2009, 16:12
  3. problem compiling QExtSerialPort
    By MarkoSan in forum Qt Programming
    Replies: 1
    Last Post: 8th December 2008, 13:03
  4. Problem with QExtSerialPort and a usb modem
    By Althor in forum Qt Programming
    Replies: 4
    Last Post: 31st October 2008, 12:02
  5. Problem in QExtserialport program.
    By dheeraj in forum Qt Programming
    Replies: 5
    Last Post: 31st May 2008, 10:24

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Digia, Qt and their respective logos are trademarks of Digia Plc in Finland and/or other countries worldwide.