|
|
|
Проблема с переводом 00 в символ для отправки в COM порт
|
|||
|---|---|---|---|
|
#18+
Всем привет. Столкнулся тут с одной задачкой и не могу ее решить. Для работы с СОМ портом использую компонент ComPort из библиотеки ComPort Library. Для проверки работы программу - AccessPort. В порт надо отправить команду AA 02 FF 00 00 A4 0F. ComPort для отправки принимает только значения string переменной. Перевожу команду в строку нарытым кодом: Код: pascal 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. В результате получается строка https://prnt.sc/vdt0sm https://prnt.sc/vdt0sm При выполнении команды Код: pascal 1. в AccessPort мы видим https://prnt.sc/vdt529 , что вместо 00 отправляется 20 (пробел, который образовался при конвертировании). Подскажите как это можно исправить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2020, 10:18 |
|
||
|
Проблема с переводом 00 в символ для отправки в COM порт
|
|||
|---|---|---|---|
|
#18+
Hadroran, Вызывайте HexToStr('AA 02 FF 00 00 A4 0F',false), а еще лучше напишите свой конвертер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2020, 11:00 |
|
||
|
Проблема с переводом 00 в символ для отправки в COM порт
|
|||
|---|---|---|---|
|
#18+
Hadroran, а я в библиотеке вижу вот такой метод: Код: pascal 1. которым без проблем можно отправить буфер: Код: pascal 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2020, 11:04 |
|
||
|
Проблема с переводом 00 в символ для отправки в COM порт
|
|||
|---|---|---|---|
|
#18+
Hadroran, Вы делаете строку с двумя пробелами и удивляетесь что у вас отправляется строка с двумя пробелами?.. Код: pascal 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2020, 11:12 |
|
||
|
Проблема с переводом 00 в символ для отправки в COM порт
|
|||
|---|---|---|---|
|
#18+
defecator, Ранее я использовал этот метод, но опять со строкой Код: pascal 1. Спасибо за помощь. Тема закрыта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2020, 11:18 |
|
||
|
Проблема с переводом 00 в символ для отправки в COM порт
|
|||
|---|---|---|---|
|
#18+
Hadroran defecator, Ранее я использовал этот метод, но опять со строкой Код: pascal 1. Спасибо за помощь. Тема закрыта. зачем тебе строка, если можно двоичный буфер отправлять сразу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2020, 11:22 |
|
||
|
Проблема с переводом 00 в символ для отправки в COM порт
|
|||
|---|---|---|---|
|
#18+
defecator, Нет, простите, закрылись, а вопросы остались. А получить данные теперь то как? Если со строкой все понятно было, то теперь, я так понял, надо изменить свойство Код: pascal 1. и соответственно читать событие Код: plaintext Но как? Есть метод Код: plaintext авторExample (inside OnRxBuf) procedure TForm1.ComPort1RxBuf(Sender: TObject; const Buffer; Count: Integer); begin // application does not have to read data from input buffer // data is already in buffer parameter HandleData(Buffer, Count); // handle data end; Помогите, пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2020, 12:34 |
|
||
|
Проблема с переводом 00 в символ для отправки в COM порт
|
|||
|---|---|---|---|
|
#18+
Hadroran defecator, Нет, простите, закрылись, а вопросы остались. А получить данные теперь то как? Если со строкой все понятно было, то теперь, я так понял, надо изменить свойство Код: pascal 1. и соответственно читать событие Код: plaintext Код: plaintext авторExample (inside OnRxBuf) procedure TForm1.ComPort1RxBuf(Sender: TObject; const Buffer; Count: Integer); begin // application does not have to read data from input buffer // data is already in buffer parameter HandleData(Buffer, Count); // handle data end; Помогите, пожалуйста. а ты вообще демки смотрел ? Код: pascal 1. 2. 3. 4. 5. 6. 7. для обработчика onRxBuf всё аналогично, только метод ComPort.Read: Код: pascal 1. соответственно, выделяешь буфер размером Count, и передаёшь его в ComPort.Read ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2020, 14:45 |
|
||
|
Проблема с переводом 00 в символ для отправки в COM порт
|
|||
|---|---|---|---|
|
#18+
defecator, В демках при использовании события ComPortRxChar(Sender: TObject; Count: Integer); при внутренней расшифровке получается, что если в ответе найден байт = $00, все следующее игнорируется и получается, что ответ в строке получается неполный. А вот с этим defecatorсоответственно, выделяешь буфер размером Count, и передаёшь его в ComPort.Read что-то не получается ни с одним вариантом. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2020, 15:07 |
|
||
|
Проблема с переводом 00 в символ для отправки в COM порт
|
|||
|---|---|---|---|
|
#18+
В топике выше читать, что в принципе не имеет особого значения. Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2020, 15:28 |
|
||
|
Проблема с переводом 00 в символ для отправки в COM порт
|
|||
|---|---|---|---|
|
#18+
Hadroran, Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2020, 15:44 |
|
||
|
Проблема с переводом 00 в символ для отправки в COM порт
|
|||
|---|---|---|---|
|
#18+
goldmi45 Hadroran, Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Всем Спасибо, то что надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2020, 16:22 |
|
||
|
Проблема с переводом 00 в символ для отправки в COM порт
|
|||
|---|---|---|---|
|
#18+
goldmi45 Hadroran, Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. если будет больше 128-ми байт в буфере, получишь проблемы. Буфер надо выделять размером с Count Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2020, 18:04 |
|
||
|
Проблема с переводом 00 в символ для отправки в COM порт
|
|||
|---|---|---|---|
|
#18+
Странные какие-то примеры чтения из СОМ-порта. А что если порт начнёт выдавать по одному байту (буфер FIFO выключили)? А в норме порт даёт по 15 байт! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2020, 19:19 |
|
||
|
Проблема с переводом 00 в символ для отправки в COM порт
|
|||
|---|---|---|---|
|
#18+
DmSer Странные какие-то примеры чтения из СОМ-порта. А что если порт начнёт выдавать по одному байту (буфер FIFO выключили)? А в норме порт даёт по 15 байт! порт может давать сколько угодно, но софтина работает с портом через его драйвер а у драйвера могут быть свои виды на размер отдаваемых данных поэтому функция VaComm1.ReadBuf возвращает число реально принятых байтов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2020, 19:32 |
|
||
|
Проблема с переводом 00 в символ для отправки в COM порт
|
|||
|---|---|---|---|
|
#18+
DmSer А в норме порт даёт по 15 байт! Нет такого правила. Можно настроить таймаут после которого буфер "выплевывается". И там вполне могут быть все 4096 байт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2020, 21:29 |
|
||
|
Проблема с переводом 00 в символ для отправки в COM порт
|
|||
|---|---|---|---|
|
#18+
wadman DmSer А в норме порт даёт по 15 байт! Нет такого правила. Можно настроить таймаут после которого буфер "выплевывается". И там вполне могут быть все 4096 байт. +100500 Картинка специально для DmSer ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2020, 09:41 |
|
||
|
Проблема с переводом 00 в символ для отправки в COM порт
|
|||
|---|---|---|---|
|
#18+
Где гарантия, что обработчик VaComm1RxChar не вызовется в середине принимаемого пакета? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2020, 11:10 |
|
||
|
Проблема с переводом 00 в символ для отправки в COM порт
|
|||
|---|---|---|---|
|
#18+
Хотя если речь о пакете из 7 байт, то приведённых примеров достаточно. Сложно представить ситуацию, когда эти байты не считаются за один вызов обработчика. Мои замечания относятся к случаю, когда принимается пакет из нескольких десятков / сотен байтов. В этом случае не обойтись без дополнительного буфера, в который придется складывать принятые куски. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2020, 11:32 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=40015883&tid=2037877]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
158ms |
get topic data: |
8ms |
get forum data: |
4ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 452ms |

| 0 / 0 |
