|
|
|
COM порт
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Нужно на Дельфи сделать модуль для работы с ККТ (касса) по СОМ порту. Вроде все сделал, посылаю команды, получаю ответы. Но вот возник вопрос: как мне узнать что ККТ записал весь ответ? Я делаю WriteFile(Handle...), потом ReadFile(Handle...). Иногда случается, что считывается не вся информация. Т.е. ощущение, что я читать начинаю раньше чем получен полный ответ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2018, 19:48 |
|
||
|
COM порт
|
|||
|---|---|---|---|
|
#18+
Прочитать всё, что пришло, и добавить к буферу Проверить, что в буфере собралась полная посылка - протокол обмена обычно подразумевает наличие символов-терминаторов, например CR, LF (символы #13, #10) Обычно лучше использовать асинхронный режим - по событию прихода данных EV_RXCHAR ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2018, 20:12 |
|
||
|
COM порт
|
|||
|---|---|---|---|
|
#18+
MBoпротокол обмена обычно подразумевает наличие символов-терминаторов, например CR, LF (символы #13, #10) Я больше сталкивался с символами STX/ENQ ($02/$05) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2018, 09:58 |
|
||
|
COM порт
|
|||
|---|---|---|---|
|
#18+
Cobalt747MBoпротокол обмена обычно подразумевает наличие символов-терминаторов, например CR, LF (символы #13, #10) Я больше сталкивался с символами STX/ENQ ($02/$05)Какая разница. Без протокола на руках, в котором всё описано, все равно без толку что-то начинать. А если он есть - зачем гадать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2018, 10:44 |
|
||
|
COM порт
|
|||
|---|---|---|---|
|
#18+
Писать самому с нуля - идиотство.Там целый космос логики. Всегда к ККМ идет библиотечка для работы с конкретным аппаратом. Для штатной работы кассы ее достаточно. А еще есть такие универсальные OLE-драйверы OPOS. Не очень представляю, как эта универсальность достигается, но видел своими глазами, как они работают. Возможно сам конкретный аппарат поддерживает этот протокол, т.е. вероятно не все модели так умеют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2018, 11:31 |
|
||
|
COM порт
|
|||
|---|---|---|---|
|
#18+
L_argoВсегда к ККМ идет библиотечка для работы с конкретным аппаратом. Для штатной работы кассы ее достаточно.Далеко не всегда :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2018, 12:42 |
|
||
|
COM порт
|
|||
|---|---|---|---|
|
#18+
Запись в ККТ (СОМ) -> ККТ переваривает -> Запись ответа ККТ (СОМ) -> Чтение ответа (СОМ) Если я начинаю читать раньше чем ККТ запишет/переварит, то у меня либо пусто, либо не полно. Дальнейшее чтение ни к чему не приводит. Т.е. буфер не наполняется более. Как я понял, если я начал читать, то ККТ туда уже ничего не запишет. Или я не прав? Если прав, то как понять когда можно читать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2018, 15:31 |
|
||
|
COM порт
|
|||
|---|---|---|---|
|
#18+
Oleg_SPBЗапись в ККТ (СОМ) -> ККТ переваривает -> Запись ответа ККТ (СОМ) -> Чтение ответа (СОМ) Если я начинаю читать раньше чем ККТ запишет/переварит, то у меня либо пусто, либо не полно. Дальнейшее чтение ни к чему не приводит. Т.е. буфер не наполняется более. Как я понял, если я начал читать, то ККТ туда уже ничего не запишет. Или я не прав? Если прав, то как понять когда можно читать? открой протокол обмена для своего аппарата, там должно быть всё детально расписано ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2018, 15:32 |
|
||
|
COM порт
|
|||
|---|---|---|---|
|
#18+
defecator, По СОМ порту там одна фраза: для передачи используется протокол связи со скоростью обмена 115200 бод с физическим кадром: 1 стартовый бит, 8 бит данных,1 стоп-бит, без проверки на четность; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2018, 15:41 |
|
||
|
COM порт
|
|||
|---|---|---|---|
|
#18+
Oleg_SPBdefecator, По СОМ порту там одна фраза: для передачи используется протокол связи со скоростью обмена 115200 бод с физическим кадром: 1 стартовый бит, 8 бит данных,1 стоп-бит, без проверки на четность; значит, ищи в интернетах протокол обмена. Что за аппарат хоть ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2018, 15:42 |
|
||
|
COM порт
|
|||
|---|---|---|---|
|
#18+
Oleg_SpbКИТ ОНЛАЙН-Ф я так понимаю, что на родной сайт производителя ты не заходил даже ? https://kit-invest.ru/Download/Протокол.pdf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2018, 15:48 |
|
||
|
COM порт
|
|||
|---|---|---|---|
|
#18+
По TCP протоколу у меня уже все работает (согласно документа) По СОМ порту вопросы... Не по ККТ, а именно по СОМ. Не работал я с ним на низком уровне. Не пойму в какой момент начинать читать ответ! раньше - он не полный, ждать 1-2 сек - не красиво... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2018, 16:08 |
|
||
|
COM порт
|
|||
|---|---|---|---|
|
#18+
Oleg_SPBПо TCP протоколу у меня уже все работает (согласно документа) По СОМ порту вопросы... Не по ККТ, а именно по СОМ. Не работал я с ним на низком уровне. Не пойму в какой момент начинать читать ответ! раньше - он не полный, ждать 1-2 сек - не красиво... В документе, который я тебе прислал, всё чётко написано. Страница номер 5 (пять) - как послать данные в порт. Страница номер 6 (шесть) - как принять данные из порта. Опрашиваешь последовательный порт, и ждёшь, когда придёт маркер начала данных - $B629 После этого два следующих байт - длина блока данных. Вот и читаешь из порта всё, что придёт, в буфер. Как принял кол-во байт, соответствующее длине сообщения, вычисляешь CRC принятых данных, сравниваешь с принятым. Если всё хорошо, разбираешь принятый пакет в соответствии с описанием протокола. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2018, 16:23 |
|
||
|
COM порт
|
|||
|---|---|---|---|
|
#18+
defecator, блин :) Код: 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. Вопрос - команда SLEEP мне нужна? Или можно как-то событие повесить на СОМ? Если я убираю SLEEP, то ReadFile либо ни чего не считывает, либо считывает только малую часть ответа и на этом все... Если SLEEP поставить 1000, то все работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2018, 16:54 |
|
||
|
COM порт
|
|||
|---|---|---|---|
|
#18+
Oleg_Spb, зачем изобретать велосипед ? возьми готовые компоненты для работы с последовательным портом. Например 21551774 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2018, 16:56 |
|
||
|
COM порт
|
|||
|---|---|---|---|
|
#18+
Oleg_SPBНе пойму в какой момент начинать читать ответ! Читать ответ нужно начинать сразу же после того, как отправил запрос. Без всяких слипов. И читать до тех пор, пока: 1. Либо не получен корректный ответ, соответствующий протоколу; 2. Либо не истек таймаут ожидания ответа. По TCP - та же логика. Если у тебя работало - значит везло просто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2018, 17:15 |
|
||
|
COM порт
|
|||
|---|---|---|---|
|
#18+
3. Либо не пришел какой-то бред, явно не по протоколу (неверное начало ответа). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2018, 17:16 |
|
||
|
COM порт
|
|||
|---|---|---|---|
|
#18+
YuRockL_argoВсегда к ККМ идет библиотечка для работы с конкретным аппаратом. Для штатной работы кассы ее достаточно.Далеко не всегда :)Те ККМ, которые есть в гос.реестре всегда имеют дистрибьюторов, у кот. всегда есть необходимый софт. Какой смысл продавать ККМ без софта ????? Это нереально. Никто в здравом уме не купит. А "левые" модели ККМ использовать стрёмно, т.к. нет софта, гарантии, поддержки, ремонта и т.д. И вообще обязательно взгреют за левизну в налоговой... зы: хотя конеш могут быть нюансы: дров может не быть под линукс/эппл. Тогда пусть страдают. :) А написать полноценный драйвер на незнакомую ККМ, это эпичная жесть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2018, 17:16 |
|
||
|
COM порт
|
|||
|---|---|---|---|
|
#18+
L_argoТе ККМ, которые есть в гос.реестре всегда имеют дистрибьюторов, у кот. всегда есть необходимый софт. Да, бывает - что только у них. L_argoКакой смысл продавать ККМ без софта ????? Чтобы монополизировать рынок "дистрибьюторов". Хотите поддержать? Пожалуйста, вот вам протокол, разбирайтесь, а мы потом посмотрим и напишем лицензию на софт, если захотим. Это не простой рынок. Во всяком случае, в Украине. У меня программа, например, поддерживает все кассы, кроме одной. У неё "секретный" протокол и они его не дают. Даже протокол. Никому. Ну, кроме налоговой, при прохождении сертификации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2018, 17:20 |
|
||
|
COM порт
|
|||
|---|---|---|---|
|
#18+
L_argoА написать полноценный драйвер на незнакомую ККМ, это эпичная жесть...Это обычная жизнь Когда я поддерживал некоторые кассы, никаких драйверов ни в каком виде для них еще не было, от слова совсем. Я брал и писал. Никакой жести не видел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2018, 17:22 |
|
||
|
COM порт
|
|||
|---|---|---|---|
|
#18+
Сейчас-то да, появились (для половины примерно). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2018, 17:23 |
|
||
|
COM порт
|
|||
|---|---|---|---|
|
#18+
Oleg_Spbdefecator, блин :) Код: pascal 1. 2. 3. 4. 5. 6. Вопрос - команда SLEEP мне нужна? Или можно как-то событие повесить на СОМ? Если я убираю SLEEP, то ReadFile либо ни чего не считывает, либо считывает только малую часть ответа и на этом все... Если SLEEP поставить 1000, то все работает Вы код откуда-то позаимствовали? Есть параметр @FOvr, который используется при асинхронном чтении, но код написан так, как для синхронного. Чтобы функция ReadFile ждала некоторое время, прежде, чем возвратить результат, нужно задать соответствующие таймауты для порта. См. фунцию SetCommTimeouts . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2018, 18:22 |
|
||
|
COM порт
|
|||
|---|---|---|---|
|
#18+
s62, например вот так Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Если задать таймауты так, то ReadFile возвратит результат или тогда, когда прочитает заданное количество байтов, или, если байты не пришли, то через 100 мс. Таймауты для записи особой роли не играют, как я понимаю, т.к. обычно по-моему в порт всё пишется без задержек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2018, 18:34 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39671665&tid=2040638]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
58ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 248ms |
| total: | 402ms |

| 0 / 0 |
