|
Работа с COM портом
|
|||
---|---|---|---|
#18+
Есть COM порт, там подцеплено оборудование. Как мне послать на него предположим #10 и считать все что он отправил ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2014, 08:47 |
|
Работа с 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2014, 09:33 |
|
Работа с COM портом
|
|||
---|---|---|---|
#18+
вот пока сделал так Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
по сути должен вернуть 8 чисел 0.002 а возвращает 62 45 48 48 46 48 48 50 при чем если порт занят - ничего не возвращает, если иное не #10 отправляю то тоже ничего не возвращает. интересно че за глюк? может он кодит как нить возвращаемое число? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2014, 10:00 |
|
Работа с COM портом
|
|||
---|---|---|---|
#18+
des1roerКак мне послать на него предположим #10... Что такое "#10"? Delphi-нотация символа с кодом 10? Или строка "#10"? Зачем тогда отсылаете "#10\r"? Еще не понятна фраза: des1roerпо сути должен вернуть 8 чисел 0.002 Восемь дробных чисел 0.002 должен вернуть? Чему равен port.BytesToRead? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2014, 10:19 |
|
Работа с COM портом
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3. 4. 5. 6.
Хотя бы так для начала. Если устройство отзывается - это уже хорошо. Дальше читайте документацию к нему, что и когда оно должно отвечать. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2014, 10:23 |
|
Работа с COM портом
|
|||
---|---|---|---|
#18+
des1roer, Кстати, он вернул вам, если перевести: Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2014, 10:25 |
|
Работа с COM портом
|
|||
---|---|---|---|
#18+
есть некий прибор, нужно его опрашиватьи получать с него данные. вот "#10" - это обращение к нему. это запрос , который я должен передать. в программе(левой ) я могу сам написать и получить отклик -> #10 >-00.002-00.002-00.002-00.002-00.002-00.002-00.002-00.002 234ms нужно также в с# отправить ему это #10. пишу "#10\r" потому что \r - конец строки и при этом он хоть что то выдает. при любом другом написании ничего не отдает ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2014, 10:26 |
|
Работа с COM портом
|
|||
---|---|---|---|
#18+
Sergey TSV как ты это перевел? все правильно он вернул значит ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2014, 10:26 |
|
Работа с COM портом
|
|||
---|---|---|---|
#18+
Так попробуйте: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2014, 10:28 |
|
Работа с COM портом
|
|||
---|---|---|---|
#18+
des1roer, Смотри значения asccii ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2014, 10:28 |
|
Работа с COM портом
|
|||
---|---|---|---|
#18+
des1roer Код: c# 1.
Ацкая хрень. Код: 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.
Здесь ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2014, 10:33 |
|
Работа с COM портом
|
|||
---|---|---|---|
#18+
как смотреть? в notepad++ перевожу 48 hex>asci H 48 asci>hex 3438 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2014, 10:34 |
|
Работа с COM портом
|
|||
---|---|---|---|
#18+
des1roer, Выше написанное EDUARD SAPOTSKI должно сработать. А смотреть, набери в поисковике "коды ascii" и смотри численное значение и его эквивалента символа. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2014, 10:38 |
|
Работа с COM портом
|
|||
---|---|---|---|
#18+
Sergey TSVdes1roer, Выше написанное EDUARD SAPOTSKI должно сработать. А смотреть, набери в поисковике "коды ascii" и смотри численное значение и его эквивалента символа. или привести к (char) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2014, 11:08 |
|
Работа с COM портом
|
|||
---|---|---|---|
#18+
private void Form1_Load(object sender, EventArgs e) Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
вот таким видом нормально возвращает ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2014, 11:08 |
|
Работа с COM портом
|
|||
---|---|---|---|
#18+
сейчас попробую с пример msdn разобраться. но по сути мне бы сделать таймер да раз в полминуты обращаться к оборудованию. мне кажется, что данные всяко разно вернутся ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2014, 11:12 |
|
Работа с COM портом
|
|||
---|---|---|---|
#18+
des1roerсейчас попробую с пример msdn разобраться. но по сути мне бы сделать таймер да раз в полминуты обращаться к оборудованию. мне кажется, что данные всяко разно вернутся -1 Используйте евент mySerialPort.DataReceived как вам посоветовали, ваши проблемы уже давно решены, не надо велосипеды строить.... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2014, 12:46 |
|
Работа с COM портом
|
|||
---|---|---|---|
#18+
D129-1 Если на ком-порте сеть RS-485 и множество устройств, то подход с событием проблематичен, т.к. нужно продолжить опрос других устройств по таймауту (если одно из них не ответило). ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2014, 13:00 |
|
Работа с COM портом
|
|||
---|---|---|---|
#18+
PallarisD129-1 Если на ком-порте сеть RS-485 и множество устройств, то подход с событием проблематичен, т.к. нужно продолжить опрос других устройств по таймауту (если одно из них не ответило).и чо? 485-й подразумевает идентификацию комманд. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2014, 13:05 |
|
Работа с COM портом
|
|||
---|---|---|---|
#18+
fortibransaи чо? 485-й подразумевает идентификацию комманд. При чем тут идентификация команд? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2014, 13:14 |
|
Работа с COM портом
|
|||
---|---|---|---|
#18+
Pallarisfortibransaи чо? 485-й подразумевает идентификацию комманд. При чем тут идентификация команд?А причем тогда 485-й. Я всегда с ним асинхронно работаю и что? Если есть вероятность что устройство будет неожиданно присылать огрызки ответов, то зачем такому устройству 485-й? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2014, 13:23 |
|
Работа с COM портом
|
|||
---|---|---|---|
#18+
fortibransaЕсли есть вероятность что устройство будет неожиданно присылать огрызки ответов, то зачем такому устройству 485-й? Сгорело одно из устройств, например. Ну я тоже асинхронно работаю в отдельном потоке, но без событий - мне нужно сразу перейти к опросу другого устройства, если первое не ответило в течении таймаута. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2014, 13:28 |
|
Работа с COM портом
|
|||
---|---|---|---|
#18+
PallarisfortibransaЕсли есть вероятность что устройство будет неожиданно присылать огрызки ответов, то зачем такому устройству 485-й? Сгорело одно из устройств, например. Ну я тоже асинхронно работаю в отдельном потоке, но без событий - мне нужно сразу перейти к опросу другого устройства, если первое не ответило в течении таймаута.Таки-да. Команды "сыпятся" из очереди обертки класса COM порта и пока не ответит или не истечет таймаут след. команда не извлекается из очереди и тут ни чего не мешает использовать события. Да и есть еще "первоочередная" очередь, для посылки команд управления. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2014, 13:32 |
|
Работа с COM портом
|
|||
---|---|---|---|
#18+
Pallarisмне нужно сразу перейти к опросу другого устройства, если первое не ответило в течении таймаута. И чо? Дал запрос, подписался на приход, запустил таймер, нет ответа - отписался от прихода, делаем запрос другому девайсу. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2014, 13:32 |
|
Работа с 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?all=1&fid=20&tid=1402860]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
1ms |
others: | 318ms |
total: | 467ms |
0 / 0 |