Фискальный регистратор или кассовый аппарат, управление ими?

Slavaga

Что нужно для того, чтобы можно было бы программно управлять сабжем?
И где это брать?

sergey_m

Документация к нему

peter1dav

Slavaga

не катит

Slavaga

спасиб

sergey_m

Какая у тебя конкретно модель?

Slavaga

Предстоит выбрать. Посоветуешь че-нить?

sergey_m

Я этим занимался два года назад. Мы использовали http://www.dialog-universal.ru/prim07.htm, потому что он считался лучшим. Почему он считался лучшим - я хз. При покупке они дают документацию и вообще можно позвонить производителю, соединиться с техническим персоналом и получить ответы на свои вопросы.

Slavaga

А если надо написать прогу на С, которая будет работать с регистратором, там есть необходимая документация и библиотеки?

sergey_m

Документация есть по командам которые можно послать регистратору через последовательный интерфейс. Библиотеки нет.

Slavaga

Через com-порт чтоли? По битам?

kokoc88

Ещё один хороший регистратор: ШТРИХ ФР-М. Поставляется с детальной документацией и удобными средствами для программирования. От драйвера до COM-компонента, работающего с аппаратом, который позволяет писать как на C++, так и на VB или Java.

sergey_m

Через com-порт чтоли? По битам?
Да. Тебе уже страшно?

Slavaga

Вот в эту контору я ездил вчера, так там менеджеры минут 15 че-то мычали, но так и не сказали ничего дельного. Значит в комплект поставки входят все хеадеры и библиотеки? Отлично!

Slavaga

Не то что бы страшно, просто надо прогу написать быстро. А вспоминать асму и разбираться с этими портами потребует время.

evgen5555

Пост-терминалы, насколько я знаю, вообще под DOS-ом бегают.

Slavaga

Дос не катит.

kokoc88

Не знаю, там, где я этим занимался были аж 6 книжек, от описания COM-компонента до описания команд через COM-порт. А драйвера к нему ставились с кучей всяких примочек.

Marinavo_0507

> А вспоминать асму и разбираться с этими портами потребует время.
> Дос не катит.
В каких ещё системах нужно кодировать доступ к последовательному порту на ассемблере?
Да и в DOS не надо вроде, там драйвер есть...

kokoc88

Для каких ещё регистраторов нужно что-то кодировать для COM-порта?

Dasar

> Для каких ещё регистраторов нужно что-то кодировать для COM-порта?
Для большинства железок до сих пор приходится ковырять com-порт, т.к. нет более высокоуровневых стандартов на передачу данных

sergey_m

Внутри регистратора DOS. Нас это ниипёт.

sergey_m

Не то что бы страшно, просто надо прогу написать быстро. А вспоминать асму и разбираться с этими портами потребует время.
Причем здесь asm?
Ты не путай последовательный порт с портами в которые пишут ассемблерными командами in/out
Я писал на це, средства доступа к последовательному порту есть почти во всех языках. Например в perl. На perl быстро напишешь свою задачу.

Slavaga

Да не нужен мне перл!
На С надо писать!

shlyumper

Ну так пиши, йопта.
Што под виндами, что под Unix общение с ком-портом - это просто элементарная операция, даже без применения супер-спец-библиотек.

Dasar

Работа с com-портом, в целом, представляется как работа с обычным файлом.
т.е. получается что-то такое:


f = OpenFile("Com1");
WriteFile(f, bla-bla);
ReadFile(f, ...);
CloseFile(f);

shlyumper

Ну если быть совсем точным, то чуть-чуть сложнее.
CreateFile("COM1", ...);
BuildCommDCB(...); // опционально
SetCommState(...);
SetCommTimeouts(...);
и дальше пользоваться Overlapped IO чтобы не было блокировок, хотя можно и без него.

sergey_m

Еще есть установка параметров порта в самом начале, и контроль CRC по ходу работы.

Marinavo_0507

> и контроль CRC по ходу работы
контроль чего?

sergey_m

хуйню напечатал. Контроль четности.

Marinavo_0507

а типа разве это не на уровне железа/драйверов делается?

shlyumper

Еще есть установка параметров порта в самом начале, и контроль CRC по ходу работы.

BuildCommDCB(...); // опционально
SetCommState(...);

это оно и есть.

sergey_m

Драйвер может игнорировать поврежденную информацию (флаг IGNPAR а может отдавать приложению с пометкой о проблемах (PARMRK). В тех случаях, когда важно знать о том, что какие-то данные пропали, либо когда данные интересны даже в поврежденном виде, то выставляется второй режим.

Marinavo_0507

я про терминалы почти ничего не знаю, спасибо


static inline void n_tty_receive_parity_error(struct tty_struct *tty,
unsigned char c)
{
if (I_IGNPAR(tty {
return;
}
if (I_PARMRK(tty {
put_tty_queue('\377', tty);
put_tty_queue('\0', tty);
put_tty_queue(c, tty);
} else if (I_INPCK(tty
put_tty_queue('\0', tty);
else
put_tty_queue(c, tty);
wake_up_interruptible(&tty->read_wait);
}


это имхо пиздец какой-то

sergey_m

Причём это не просто так, это POSIX: http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap11.html
А что в дыбиане так плохо с мануалами, что приходится RTFS?

Marinavo_0507

ну сомневаюсь, что в каком-то мануале так же кратко и понятно написано

sergey_m

man termios
/parity
Хотя может быть тебе код понятнее чем слова. Но, согласись что найти эту функцию дольше, чем вышеописанная последовательность нажатий клавиш.

Marinavo_0507

man termios
/parity
согласен
только в свете вышеизложенного, я не знал, что надо смотреть именно termios

Dasar

> типа разве это не на уровне железа/драйверов делается?
разве на уровне железа можно отследить все битые пакеты?

Marinavo_0507

какие ещё пакеты в последовательном порту?

Dasar

на логическом уровне обмен идет пакетами, запрос-ответ обычно.

Marinavo_0507

ну протокол, который реализуется приложением, оному приложению и проверять, естественно

bleyman

какие ещё пакеты в последовательном порту?

Обыкновенные пакеты. Стартовый бит (ноль 8 бит данных, 1 бит четности, стоповый бит (еденицца затем произвольный промежуток времени в течение которого в проводе еденицца. Чем тебе не пакет?
ЗЫ: Естественно, все вышеописанные параметры могут меняться в определенных пределах (типа, полтора стоповых бита может быть, например).

sergey_m

> > типа разве это не на уровне железа/драйверов делается?
> разве на уровне железа можно отследить все битые пакеты?
Нет, только те, где кол-во ошибок нечетное
(под пакетом мы имеем в виду октет)

shlyumper

(под пакетом мы имеем в виду октет)

Вообще говоря, протокол RS-232 по которому общается COM-порт, оперирует не с октетами, а со словами. Размер одного передаваемого слова устанавливается, и может быть от 6 до 9 бит (9 бит, к сожалению, не поддерживаются компьютерным UARTом).
Оставить комментарий
Имя или ник:
Комментарий: