powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / MS DOS, FP2.5 ?Печать на COM1:"
11 сообщений из 11, страница 1 из 1
MS DOS, FP2.5 ?Печать на COM1:"
    #33686136
TallinAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ситуация такова

1. _=FOPEN("COM1",11) && 11 -- WRITE
2. __=FPUTS(_,"PRINT")

Если ПРИНТЕР в неготовности , то вторая команда не завершается и программа
не реагирует ни на что

Вопрос: Как прекратить выполнение команды?

Спасибо
...
Рейтинг: 0 / 0
MS DOS, FP2.5 ?Печать на COM1:"
    #33686152
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перед этим надо проверить :
Код: plaintext
PRINTSTATUS( )
...
Рейтинг: 0 / 0
MS DOS, FP2.5 ?Печать на COM1:"
    #33686184
TallinAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Владимир СА

но для этого необходимо сначала переопределить ПРИНТЕР

SET PRIN TO COM1:

А этого делать не хотелось бы
...
Рейтинг: 0 / 0
MS DOS, FP2.5 ?Печать на COM1:"
    #33686191
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TallinAl2 Владимир СА

но для этого необходимо сначала переопределить ПРИНТЕР

SET PRIN TO COM1:

А этого делать не хотелось быПочему??? На время печати кто мешает?
...
Рейтинг: 0 / 0
MS DOS, FP2.5 ?Печать на COM1:"
    #33686380
TallinAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Владимир СА

Хорошо по другому вопрос
Как прекратить выполнение второй (2.) команды?
...
Рейтинг: 0 / 0
MS DOS, FP2.5 ?Печать на COM1:"
    #33686471
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TallinAl...Как прекратить выполнение второй (2.) команды?Нет. Логика немного не такая.
Сформировать текстовый файл, который будешь выводить на печать, а уж далее
Код: plaintext
1.
2.
3.
4.
5.
6.
SET PRINTER TO COM1
IF PRINTSTATUS()
  && Посылать файл на печать
ELSE
  && Создать сообщение что принтер не готов.(Я для этого делал раньше отдельное окно)
ENDIF
SET PRINTER TO DEFAULT
...
Рейтинг: 0 / 0
MS DOS, FP2.5 ?Печать на COM1:"
    #33686915
TallinAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Владимер СА

Мне необходимо получить ошику PRINTER NOT READY при
исползовании команды низкого уровня

Вот в чем дело
...
Рейтинг: 0 / 0
MS DOS, FP2.5 ?Печать на COM1:"
    #33687514
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то я немного недопонимаю. И так, если ты послал на принтер какой-то текст, то он попадает в буфер принтера. Пусть принтер даже в состоянии "НЕГОТОВ", но в его буфере будет находиться информация и пока она нераспечатается следующая информация печататься небудет. Можно сбросить буфер принтера, у принтеров типа HP5000 эта функция имеется. Насколько я помню на старых (матричных) принтерах этого нет. И приходиться перезагружать принтер, т.е. выключать и включать заново. Как мы обсуждали выше имеются команды в FPD2.X для работы с принтером это:
SET PRINTER - Разрешает или запрещает вывод на принтер или направляет вывод в файл, в порт или на сетевой принтер.
PRINTSTATUS( ) - Возвращает значение "истина" (.T.), если принтер или печатающее устройство находится в режиме ONLINE, и значение "ложь" (.F.) в противном случае.
А так же:
SYS(13) - Возвращает статус принтера. В Visual FoxPro, FoxPro для Windows и FoxPro для MS-DOS возвращается статус OFFLINE, если принтер не готов, и статус READY, если принтер готов. Если принтер подсоединен к порту COM, SYS(13) возвратит READY в том случае, когда принтер возвращает состояние Clear To Send Data или Data Set Ready. Если принтер подсоединен к параллельному порту, SYS(13) возвратит OFFLINE в том случае, когда принтер возвращает состояние Out of Paper, I/O Error, Time Out, Printer Busy или Printer Not Selected. (М.Б. тебе использовать эту команду)
И ряд других команд. Смотри по Help.
Ну а теперь используй эти команды по своему умозаключению и делай что тебе надо.
...
Рейтинг: 0 / 0
MS DOS, FP2.5 ?Печать на COM1:"
    #33688110
TallinAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Владимир СА

Спасибо

Немного уточняю

На машине 2 принтера.
LPT1 --- EPSON LX-300
COM1 --- STAR SP200 (для печати кассовых чеков)

На EPSON печать идет через команду @ PROW() и при любых состояниях
принтера отличных от READY или ONLINE программа обработки ошибок
перехватывает управление и выдает "PRINTER NOT READY. RETRY OR CANCEL"
При выборе CANCEL управление программой передается следующей команде
за @ PROW().

Печать на STAR SP200 идет через команды
_=FOPEN("COM1",11)
=FPUTS(_,"PROBA")
и если на принтере кончается бумага , просто ломается или что-либо другое
команда =FPUTS(_,"PROBA") не завершается и программа на ней зависает.
И как пропихнуть ее дальше не знаю ( просто старая привычка обрабатывать
ситуации , которые могут возникнут раз в 100 лет
)

Почему не делаю вывод через SET PRIN TO COM1 и @ PROW() -- это вопрос уже десятый

С уважением Александр
...
Рейтинг: 0 / 0
MS DOS, FP2.5 ?Печать на COM1:"
    #33688306
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TallinAl...Печать на STAR SP200 идет через команды
_=FOPEN("COM1",11)
=FPUTS(_,"PROBA")
и если на принтере кончается бумага , просто ломается или что-либо другое
команда =FPUTS(_,"PROBA") не завершается и программа на ней зависает.
И как пропихнуть ее дальше не знаю....
Почему не делаю вывод через SET PRIN TO COM1 и @ PROW() -- это вопрос уже десятыйТаким образом ты сам себя загоняешь в угол. Тебе надо перед каждой командой =FPUTS(_,"PROBA") производить проверку статуса принтера. А так вроде ты просто открыл порт связи на низком уровне _=FOPEN("COM1",11) если тут проработало нормально, ты всегда считаешь, что устройство работает нормально и пихаешь туда информацию. А тут и получаются грабли. У STAR SP200 скорее всего буфера да же нет. Вот и застрял поток. Я бы пробовал использовать вопрос десятый
TallinAlПочему не делаю вывод через SET PRIN TO COM1 и @ PROW() -- это вопрос уже десятыйА так я не знаю как проверить работоспособность порта когда он уже открыт. Может более умные люди подскажут. Я бы пока использовал SET PRIN TO COM1 и проводил проверку перед каждым =FPUTS(_,"PROBA")
...
Рейтинг: 0 / 0
MS DOS, FP2.5 ?Печать на COM1:"
    #33688345
TallinAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Владимир СА

Спасибо за участие
))
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / MS DOS, FP2.5 ?Печать на COM1:"
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]