|
Работа с COM портом
|
|||
---|---|---|---|
#18+
EDUARD SAPOTSKIИ чо? Дал запрос, подписался на приход, запустил таймер, нет ответа - отписался от прихода, делаем запрос другому девайсу. Не, спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2014, 13:34 |
|
Работа с COM портом
|
|||
---|---|---|---|
#18+
с событиями муть какая то. как это сделать попроще? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2014, 14:07 |
|
Работа с COM портом
|
|||
---|---|---|---|
#18+
des1roerс событиями муть какая то. как это сделать попроще? Где вы нашли муть? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2014, 14:36 |
|
Работа с COM портом
|
|||
---|---|---|---|
#18+
Изопропилdes1roerс событиями муть какая то. как это сделать попроще? Где вы нашли муть? При использовании события есть еще возможность задать ReceivedBytesThreshold - если размер сообщения (ответного) постоянный, то можно будет сразу читать из буфера. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2014, 15:16 |
|
Работа с COM портом
|
|||
---|---|---|---|
#18+
Ну вот примерно так в простейшем случае это выглядет: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2014, 15:42 |
|
Работа с COM портом
|
|||
---|---|---|---|
#18+
EDUARD SAPOTSKI , может оно и правильно вешать на событие. Но событие же не одно, приходит поток чисел, а в вашем примере дергается только несколько первых. Может таймаут больше поставить или как это решить можно ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2014, 08:45 |
|
Работа с COM портом
|
|||
---|---|---|---|
#18+
des1roer, кто вам мешает закрывать порт позже? собирайте данные, и закрывайте как будет полный комплект. все "блоки" которые нужно состыковать исходя из вашей специфики тут уже привели. еще, предвижу сложность, не факт что всегда в indata будет строка '>-00.002'/ может получаться так 1-е срабатывание DataRecieve - '>-00.002>-00.002>-00.' 2-е срабатывание - '002>-00.002>-00.002' то есть данные могут делиться на порции, видимо исходя из размера буфера. надо будет собирать строку, проверять разделители.. тут вам и будет понятно когда закрыть порт. еще, метод проб и ошибок, у меня показал, что после открытия/закрытия порта сразу хорошо бы делать comPort.DiscardInBuffer(); ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2014, 09:39 |
|
Работа с COM портом
|
|||
---|---|---|---|
#18+
млин, так один фиг приходится слип ставить чтобы получить все данные а не (3 первых символа) + (оставшиеся 12) что-то вроде этого канает Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
но тогда по сути отличия от моего метода немного. и еще - мне компилятор ругаецца если я даже напишу this.text = indata === Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'Form1' не из того потока, в котором он был создан. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2014, 10:05 |
|
Работа с COM портом
|
|||
---|---|---|---|
#18+
port_DataReceived - выполняется в другом потоке, асинхронно с потоком формы, по этому и ошибка с доступом из нескольких потоков. нужно использовать Invoke Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2014, 11:01 |
|
|
start [/forum/topic.php?fid=20&msg=38658284&tid=1402860]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 156ms |
0 / 0 |