44 / 44 / 12
Регистрация: 05.04.2015
Сообщений: 345
1

Qt serial port кассовый аппарат

09.04.2016, 00:42. Показов 1562. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Хочу реализовать обмен с кассовым аппаратом, протокол есть в открытом доступе. Так же есть исходники библиотеки для другого аппарата, но от них помощи немного так как там С и по моему мнению сделано плохо.Какое то время я только собирал информацию по этой теме, потому что она для меня новая.
Компьютер посылает команду кассовому аппарату. С аппарата приходит ответ. Компьютер должен посмотреть этот ответ и совершать дальнейшие действия исходя из этого ответа. Как лучше всего это реализовать. Данные скорей всего не приходят мгновенно, поэтому сигнал readyRead будет срабатывать несколько раз. Кто что может посоветовать а я пока буду пытаться сам.
В принципе мог обойтись без всей этой возни если бы остановился на виндосе потому что есть готовый COM объект с которым намного проще, но хочется сделать под линукс.
0
09.04.2016, 00:42
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.04.2016, 00:42
Ответы с готовыми решениями:

QT serial port
Здравствуйте! пытаюсь заставить работать ком порт в QT для начала решил попробовать простой пример ...

Serial Port на Android
Приветствую всех. Написал тестовое приложение, показывающее, сколько COM портов есть в системе и их номера (использовал QSerialPortInfo)....

Qt, Android and Serial Port
Всем добрый день или вечер, а может и ночь. Пытаюсь научить дружить планшет с программой на Qt и последовательным портом. Кто-нибудь...

15
 Аватар для RazrFalcon
1403 / 1260 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
09.04.2016, 10:15 2
Вопрос-то в чем?
0
68 / 68 / 17
Регистрация: 20.01.2015
Сообщений: 347
09.04.2016, 10:21 3
RazrFalcon, Как лучше всего это реализовать.

kolts, начать с азов. Прочитать как работает QSerialPort, например. Ну а потом взять и все быстро реализовать.
0
 Аватар для RazrFalcon
1403 / 1260 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
09.04.2016, 10:42 4
Цитата Сообщение от Amok Посмотреть сообщение
Как лучше всего это реализовать.
У ТС каша в голове. Для начала стоит задачи обозначить.
0
44 / 44 / 12
Регистрация: 05.04.2015
Сообщений: 345
09.04.2016, 12:13  [ТС] 5
Все что касается компорта я знаю. Там настраивается все просто. Жду только общих советов по работе с кассовым аппаратом если кто работал
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
09.04.2016, 14:00 6
У тебя же есть описание протокола.
0
44 / 44 / 12
Регистрация: 05.04.2015
Сообщений: 345
09.04.2016, 15:26  [ТС] 7
У меня в голове перемешались hex ascii char и bytearray .
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
    QByteArray data;
    data.append(0x02); STX
    data.append(0x5F); //код команды
    data.append("0000",5); //задаю с нулевым символом так как он является разделителем
    data.append("1",2);
    data.append("04",3);
    data.append("00",3);
    data.append("14",2); //контрольная сумма
    data.append(0x03); ETX
    port->write(data);
Загвоздка в вычислении контрольной суммы.
Контрольная сумма вычисляется сложением без переноса
всех байтов посылки, без учета байта STX и представляет собой 1-байтовое число,
передаваемое в формате битового поля. Но передается она в формате ascii. То есть у меня должно получиться 14 но передаю я его не как 0х14, а "14".
Как мне в данном случае получить 14 (который я получил с помощью прослушки порта).
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
09.04.2016, 15:53 8
Как 14-то получается? Что значит сложить без переноса?
0
44 / 44 / 12
Регистрация: 05.04.2015
Сообщений: 345
09.04.2016, 16:10  [ТС] 9
Сам не знаю так в книжке написано. Еще вот добавлено
Битовое (шестнадцатеричное) поле представляет собой набор пар символов, которые
передают один байт в ASCII представлении. Допустимыми символами для этого поля
являются «0» ... «9» (ASCII 30H ... 39H), «A» ... «F» (ASCII 41H ... 46H), «a» ... «f»
(ASCII 61H ... 66H). Длина поля различается в зависимости от конкретного применения.
Пример: 27 - «1B»
Это тоже относится к контрольной сумме.
http://www.remkas.ru/files/M1141RukProg_v3.pdf Вот описание протокола.
Оказалось что моему аппарату этот протокол не подходит, коды команд, по крайней мере некоторых, отличаются. Но я надеюсь контрольная сумма считается одинаково.
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
09.04.2016, 18:00 10
Там точно 14? Вот здесь описано какое-то сложение без переноса для работы с устройством: http://www.linux.org.ru/forum/development/1427250
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
#define SUMHB(a, b) (((a) + (b)) & 0x0F)
#define SUM_B(a, b) ((SUMHB((a) >> 4, (b) >> 4) << 4) | \
                     SUMHB((a), (b)))
 
int main(int argc, char **argv) {
  unsigned char a = 0xAF;
  unsigned char b = 0x13;
 
  unsigned char c = SUM_B(a, b);
 
  printf("c = %2.2x\n", c);
 
  return(0);
}
0
44 / 44 / 12
Регистрация: 05.04.2015
Сообщений: 345
09.04.2016, 21:28  [ТС] 11
Тоже гуглил это, но походу здесь так
0x5f + //код команды
0x30 + 0x30 + 0x30 + 0x30 //(это "0000")
+ 0x00 //нуль терминатор - разделитель полей
+ 0x30 + 0x34 // "04" данные
+ 0x00
+ 0x30 + 0x30 //"00" данные
+ 0x00 = 214; //сумма
Отбрасываем 2, так как нужен 1 байт и получаем 14. Буду посмотреть что получится дальше. Объяснено в описании конечно...
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
09.04.2016, 21:54 12
А где единица после четырёх нулей? У тебя же она в том сообщении есть.
0
44 / 44 / 12
Регистрация: 05.04.2015
Сообщений: 345
09.04.2016, 22:38  [ТС] 13
Пропустил, но уже в цикле проверил получается 214. Все вроде правильно, не думаю что это совпадение
C++ (Qt)
1
2
3
4
5
 QByteArray ba("_000010400"); // Мой массив данных, по которому должна считаться контрольная сумма, символ '_' это 0x5f
int sum = 0;  
for (int i = 0; i< ba.size();i++)
       sum += ba.at(i);
qDebug()<<QString().setNum(sum,16);
Получается 214.
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
09.04.2016, 23:01 14
Ну хорошо тогда. Только char для суммы, а не int.
0
732 / 692 / 110
Регистрация: 29.05.2015
Сообщений: 4,162
10.04.2016, 07:50 15
Со сложением без переноса у меня получилось 4, с просто сложением - 0x14(0x214).
0
68 / 68 / 17
Регистрация: 20.01.2015
Сообщений: 347
11.04.2016, 19:48 16
C++ (Qt)
1
QByteArray data("\x2\x5f")
Вместо кучи append.
1
11.04.2016, 19:48
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.04.2016, 19:48
Помогаю со студенческими работами здесь

Qt Serial Port отправляет только 3 байта
на компе два порта подсоединены к друг другу . на один ком-порт привязываю свою программу, на другой программу терменал. если отправлять...

Сборка Qt Serial Port под Android из source
Добрый день помогите пожалуйтса собарть комплект Serial port под android, скачал сорцы, выставил настройки выдает ошибку, мол не может...

Как передать значение из формы на кассовый аппарат?
кассовый аппарат как нажатием кнопки передать значение из формы на кассовый аппарат и распечатать... если есть, выложите файлы...

Работа Scilab Serial Port Library (COM port)
Как работает Scilab Serial Port Library ? (может кто то встречал описание подробное, поделитесь ссылкой) Нужно получать с COM port...

serial port
Здравствуйте. Использую стандартные классы .net для работы с ком портом. Работу с портом прослушал программой Portmon. Вот кусочек...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Опции темы

Новые блоги и статьи
Ошибка Docker "Got permission denied while trying to connect to the Docker daemon socket at"
hw_wired 14.02.2025
Разработка с использованием Docker может иногда преподносить неожиданные сюрпризы, и одним из самых распространенных камней преткновения становится ошибка с отказом в доступе к демону Docker. . . .
Ошибка "No 'Access-Control-Allow-Origin' header is present on the requested resource"
hw_wired 14.02.2025
При разработке современных веб-приложений нередко сталкиваешься с ошибкой "No 'Access-Control-Allow-Origin' header is present on the requested resource". Эта проблема возникает из-за политики. . .
Как закрыть порт в Linux
hw_wired 14.02.2025
Управление сетевыми портами в Linux - непростая, но важная задача для обеспечения безопасности системы. Каждый открытый порт - это потенциальная уязвимость, через которую злоумышленики могут. . .
Ошибка Angular "Can't bind to 'taskForm' since it isn't a known property of 'form'"
hw_wired 14.02.2025
При разработке веб-приложений на Angular можно столкнуться с ошибкой "Can't bind to '' since it isn't a known property of 'form'". Эта ошибка появляется в консоли браузера когда мы пытаемся. . .
Сообщение Git "Pulling without specifying how to reconcile divergent branches is discouraged"
hw_wired 14.02.2025
При работе с системой контроля версий Git многие разработчики сталкиваются с предупреждающим сообщением "Pulling without specifying how to reconcile divergent branches is discouraged". Это. . .
Как настроить количество пробелов в отступах табов в Visual Studio Code
hw_wired 14.02.2025
Visual Studio Code предоставляет несколько гибких способов настройки табуляции, каждый из которых имеет свои преимущества. Самый простой и наглядный метод - через графический интерфейс настроек, где. . .
Что означает знак восклицания в TypeScript
hw_wired 14.02.2025
TypeScript - удивительный язык программирования, который предоставляет множество возможностей для работы с типами данных. Особый интерес вызывает оператор утверждения ненулевого значения, который. . .
Как свернуть/скрыть секции кода в Visual Studio Code
hw_wired 14.02.2025
Ежедневно мы работам с файлами, содержащими сотни и тысячи строк кода. Навигация по такому объему становится настоящим испытанием, особенно когда нужно быстро найти нужный метод или переменную. . . .
Автоматическое создание файла requirements.tx­t в Python
hw_wired 14.02.2025
Дружелюбная среда для разработки на Python, один из самых широко используемых языков программирования, состоит не только из самого кода, но и целого ряда важных компонентов. И если вы когда-нибудь. . .
Передача переменных окружения в контейнер Docker
hw_wired 14.02.2025
При работе с Docker контейнерами возникает необходимость передать различные настройки и конфигурационные параметры - от строк подключения к базам данных до API ключей. И хотя можно жестко прописать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru