Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Сетевая печать на Zebra Z4M Plus с помощью ZPL II  [new]
mr.Gandalf
Member

Откуда:
Сообщений: 95
Всем добрый вечер.

Вопрос к профи, кто-нибудь осуществлял печать на Zebra Z4M Plus с помощью ZPL II по сети ?
Т.е. принтер установлен на одном ПК, а печать ведется из соседней комнаты с другого ПК по сети.

С уважением. mr.Gandalf
9 июл 07, 19:08    [4369588]     Ответить | Цитировать Сообщить модератору
 Re: Сетевая печать на Zebra Z4M Plus с помощью ZPL II  [new]
Valerii
Member

Откуда:
Сообщений: 749
RemoteDesktop....
9 июл 07, 19:57    [4369709]     Ответить | Цитировать Сообщить модератору
 Re: Сетевая печать на Zebra Z4M Plus с помощью ZPL II  [new]
Декоратор
Guest
Я печатал. Делал кассовый сервер, который с 1 стороны работает с оборудованием по протоколу, с другой стороны с приложением - клиентом по winsock.
10 июл 07, 11:07    [4371100]     Ответить | Цитировать Сообщить модератору
 Re: Сетевая печать на Zebra Z4M Plus с помощью ZPL II  [new]
mr.Gandalf
Member

Откуда:
Сообщений: 95
День добрый Декоратор.

Нельзя ли чуть по подробней? За общими фразами не видно сути!

За ранее благодарен. mr.Gandalf
10 июл 07, 16:39    [4374050]     Ответить | Цитировать Сообщить модератору
 Re: Сетевая печать на Zebra Z4M Plus с помощью ZPL II  [new]
mr.Gandalf
Member

Откуда:
Сообщений: 95
Через Remote Desctop.... Это чуть чуть не-то. Хотелось через приложение и ZPLII .
10 июл 07, 16:42    [4374072]     Ответить | Цитировать Сообщить модератору
 Re: Сетевая печать на Zebra Z4M Plus с помощью ZPL II  [new]
Декоратор
Guest
Ну как бы так все предельно ясно , по моему.
Пишется программа, которая работает с вашим оборудованием. Как я понимаю в том или ином виде она у вас есть. Получилось что-то типа сервера функций для работы с Zebra. Реализуем в этой же программе клиента сервер TCP-IP, слушающего N-й порт. В клиентской программе, реализуем клиента TCP-IP и при нажатии пимпочки что-то типа "Печать" , вы шлете на сервер строку с данными по вашему(то есть придуманному вами протоколу. Кране не советую слать бинарные данные протокола Zebra). Сервер парсит и уже используя свой функционал для работы с Zebra печатает засылет в порт ту или иную команду.
10 июл 07, 16:48    [4374130]     Ответить | Цитировать Сообщить модератору
 Re: Сетевая печать на Zebra Z4M Plus с помощью ZPL II  [new]
mr.Gandalf
Member

Откуда:
Сообщений: 95
Добрый вечер.

Да программа есть все работает, хочется новых возможностей.
Слабо разбираюсь в сетях и протоколах не говоря уже о слове "парсит". Примерчиком нельзя сее чудо продемонстрировать ? Очень хочется через клиента TCP-IP отправлять ту или иную команду на Zebra.

С уважением mr.Gandalf
10 июл 07, 21:07    [4375341]     Ответить | Цитировать Сообщить модератору
 Re: Сетевая печать на Zebra Z4M Plus с помощью ZPL II  [new]
Декоратор
Guest
Можно.
Реализация для VFP 8.0
Везде:
*Ip  -  IP соединившегося клиента
*hSocket -  хендл соединения, через него соединением можно рулить
*На 1 порт можно подключить 1024 клиента, у каждого будет свой hSocket 

XDllR.dll -  клиент tcp-ip, должен лежать по пути видимому приложению -  клиенту по SET("PATH")
XDll.dll  -  сервер, tcp-ip, должен лежать по пути видимому приложению - серверу (  у вас это уже принт  -  сервер ) по SET("PATH")

* Сервер
* Реализовать на машине  к которой подключен принтер
*Пример -  использоваания 
Public oServer As cWinSockSever
oServer =  Createobject("cWinSockSever")
* К сожалению, пока объект сервера может быть именован только как oServer(!)
With oServer
	.cTCPPort =  23  && Это для тестинга по телнету, лучше использовать порты за 5001
	?  .InitSocket() &&  Слушаем порт, ждем клиентов
Endwith

* Реализация 
Define Class cWinSockSever As Custom
	cTCPPort = 23
	iIDispath = Sys(3095,_vfp)
	hSocket = 0
	
	PROCEDURE Init
		Declare Integer GetSum In XDll.Dll  Integer, Integer
		Declare Integer InitSocket In XDll.Dll  Integer, Integer
		Declare Integer Send_Message In XDll.Dll  String @, Integer
		Declare Integer Socket_Close In XDll.Dll  Integer
		Declare Integer WSAGetLastError In ws2_32.Dll
	EndProc

	Procedure InitSocket
	This.hSocket = InitSocket(This.cTCPPort,This.iIDispath)
	Return ( This.hSocket > 0)
	Endproc

	Procedure WsMessage
	Lparameters cMsg
		*Асинхронное
		*Диангостические сообщения, можно выводить в статус бар.. например
		*Все ошибки критические, если такую словили все, разбирайтесь что-то не так либо с сетью либо с параметрами ( в частности порт )
		*Возвращает:
		*WSAStartup Error           - ошибка инициализации интерфейса winsocket 2.0
		*INVALID_SOCKET             - ошибка создания сокета
		*bind error                 - ошибка ассоциации сокета с сетевым интерфейсом (очень редкая,но возможная)
		*Error listen               - ошибка инициализации слушателя порта
		*WSA_WAIT_FAILED            - ошибка времени ожидания событий FD_READ|FD_CLOSE ( установлено в бесконечно, реализовано в потоке, работу не тормозит)
		*SOCKET_ERROR               - ошибка перечесления собитий для слушателя порта
		*Accept Error   		    - ошибка  анализа запроса соединения
		*WSAEnumNetworkEvents Error - фиг знает что за собтие приперлось вместо сетевого
		
		*OK -  все Хокей!
		*Реальные номера ошибок можно получить через WSAGetLastError , описание в MSDN
	?"Error ",cMsg
    ? WSAGetLastError()
	Endproc

* Принял соединение
	Procedure WsAccept
	*Асинхронное
	* Тут можете послать клиента через Socket_Close( hSocket )  если адрес не устраивает,
	* если нет, то  соединение клиента принимается по умолчанию
	Lparameters Ip As String, hSocket As Integer
	? "Accept ",Ip
	? "hSocket ",hSocket
	Endproc


	Procedure WsRead
	*Асинхронное
	*Событие  -  прием данных
	*Send_Message(@tStr,hSendSock) эхо ответ, для тестинга
	*тут разбираете tcStr и пихаете в порт данные. Лучше   MS Com Control ActiveX  не использовать.
	* лучше описать функции ввода  - вывода на с++ и сделать асинхронные очереди.
	Lparameters tcStr As String
	?? tcStr
	Endproc

	Procedure WsClose
	*Асинхронное
	* собитие  -  узер с адресом Ip закрыл соединение
	Lparameters Ip, hSocket
	? "CLOSE ",Ip, ' ', hSocket
	ENDPROC
Enddefine


*Клиент
*Реализовать на строне приложения- клиента
*Пример -  использоваания
	Public oClient
	oClient =  Createobject("cWinSockClient")
	* К сожалению, пока объект клиента может быть именован только как oClient(!)
	oClient.nTcpPort = 23
	oClient.sHost = "192.168.0.1" && Для случая когда клиента и сервер запущены на 1 машине
	oClient.Connect()
	
	* Заершение работы приложения клиента - выдать oClient.CloseConnect(), на сервере возникнет собитие oClient.WsClose( Ip, hSocket )

* Реализация 	
Define Class cWinSockClient As Custom
	nTcpPort = 23
	sHost = ""
	iIDispath = Sys(3095,_vfp)
	hSocket = 0

	Procedure Connect
	*Асинхронное
	* Запрос на соединение с сервером 
	Local lcHost
	lcHost =  This.sHost
	With This
		This.hSocket = WsConnect( .nTcpPort, .iIDispath, @lcHost)
	Endwith
	Return ( This.hSocket > 0)
	Endproc

	Procedure WsMessage( tMessage As String )
	*Асинхронное
	? tMessage
	
	Endproc

	Procedure WsConnected( )
	*Асинхронное
	* Соединение с сервером установлено, можно слать данные
	? "Соединение установлено"
	Endproc

	Procedure WsClose()
	*Асинхронное
	* Сервер закрыл соединение с текущим клиентом

	Endproc

	Procedure CloseConnect
	* Если нужно отрубиться от сервера, стоит ее вызвать
	Return Socket_Close_Cli( This.hSocket )
	Endproc

	Procedure WsRead(tData As String)
	*Асинхронное
	* Пришли данные от сервера
	? tData
	Endproc

	Procedure Init
	Declare Integer WsConnect 	 In XDllR.Dll  Integer, Integer, String @
	Declare Integer Send_Message In XDllR.Dll  String @, Integer, integer 
	Declare Integer Socket_Close In XDllR.Dll As Socket_Close_Cli Integer
	Declare Integer WSAGetLastError In ws2_32.Dll
	Endproc

	Procedure s_message(tData As String)
	* Послать сообщение на сервер, сервер примет данные в событии oServer.WsRead(...)
	* Вот тут и посылаете свои данные из любого места  программы клиента (ну конечно после соединения с сервером)
             * Строка для обмена 100 байт, могу увеличить
	LOCAL  cMessage as String
	cMessage  = tData+CHR(0)
	Send_Message(@cMessage , This.hSocket,LEN(cMessage  ))
	Endproc
ENDDEFINE
Сами библы во вложении.

К сообщению приложен файл (VfpWinSock.zip - 62Kb) cкачать
11 июл 07, 00:36    [4375785]     Ответить | Цитировать Сообщить модератору
 Re: Сетевая печать на Zebra Z4M Plus с помощью ZPL II  [new]
mr.Gandalf
Member

Откуда:
Сообщений: 95
Добрый вечер Декоратор .

Огромное спасибо за столь подробное пояснение. На первй взгляд вроде все понятно. Буду разбираться , попробую приминить на практике. Вот только один вопрос, на VFP 6.0 пойдет?
Или есть какие-нибудь тонкости?

Еще раз спасибо. С уважением mr.Gandalf
11 июл 07, 20:51    [4380885]     Ответить | Цитировать Сообщить модератору
 Re: Сетевая печать на Zebra Z4M Plus с помощью ZPL II  [new]
Декоратор
Guest
mr.Gandalf эта версия не пойдет для VFP 6.0. Вообще без вариантов. Всегда будет падать.
Только для VFP 8.0. Причем для приложений нормально регистрирующих RTL фокса. Тоесть в командном окне написать что-то типа
? _vfp.Application.Version
и данная команда выполнится.
11 июл 07, 23:01    [4381075]     Ответить | Цитировать Сообщить модератору
 Re: Сетевая печать на Zebra Z4M Plus с помощью ZPL II  [new]
mr.Gandalf
Member

Откуда:
Сообщений: 95
Доброе утро Декоратор .

Все понял.
А на VFP 9.0 ? Пройдет ? Или нужна только 8.0 версия !
12 июл 07, 08:44    [4381457]     Ответить | Цитировать Сообщить модератору
 Re: Сетевая печать на Zebra Z4M Plus с помощью ZPL II  [new]
Декоратор
Guest
Эта только для 8-ки. Для 9-ки легко исправить.
12 июл 07, 09:06    [4381510]     Ответить | Цитировать Сообщить модератору
 Re: Сетевая печать на Zebra Z4M Plus с помощью ZPL II  [new]
DmGr
Member

Откуда:
Сообщений: 185
А чем не подходит мой вариант, который я предложил в предыдущей ветке про Zebra

Ставим принтер Generic TextOnly.
Расшариваем его и печатаем на него.

Или вопрос в чем то другом?
12 июл 07, 16:05    [4384977]     Ответить | Цитировать Сообщить модератору
 Re: Сетевая печать на Zebra Z4M Plus с помощью ZPL II  [new]
mr.Gandalf
Member

Откуда:
Сообщений: 95
Ваш вариант тоже попробуем. О лучших результатах сообщим, но уже после отпуска.

Удачи.
13 июл 07, 16:49    [4387540]     Ответить | Цитировать Сообщить модератору
 Re: Сетевая печать на Zebra Z4M Plus с помощью ZPL II  [new]
mr.Gandalf
Member

Откуда:
Сообщений: 95
Всем большой привет.

*А чем не подходит мой вариант, который я предложил в предыдущей ветке про Zebra

*Ставим принтер Generic TextOnly.
*Расшариваем его и печатаем на него.

Вариант сей не прошел. Есть какая-то засада? Пытался через внутренние команды ZPL II определить принтер в сети. Не помогло!

Принтер сидит на одном из ПК на LPT 1. Использую драйвера от Seagul т.к. через них удобно закачивать во флеш память принтера русские фонты.

Кто силен в решении такой проблемы? Помогите !

Уж очень хочется через ZPL II
31 авг 07, 22:42    [4607740]     Ответить | Цитировать Сообщить модератору
 Re: Сетевая печать на Zebra Z4M Plus с помощью ZPL II  [new]
mr.Gandalf
Member

Откуда:
Сообщений: 95
Вопрос пока не решен. Вопрос к Вам "профи".
Представьте, что у Вас к одному из ПК подключен Ваш Zebra… (через LPT1), на котором у Вас идет массовая печать бирок (этикеток).
ПК находится в сети и Вам нужно с другого ПК (к которому на прямую не подключен принтер Zebra….), используя ZPL команды (это некий текст ) отправить на Вашу Zebra…. (короче распечать несколько бирок).
Как с другого ПК печатать на Zebre……. ?
Как бы Вы поступили? У меня чего-то ничего не получается. Заранее благодарен
24 сен 07, 23:04    [4708892]     Ответить | Цитировать Сообщить модератору
 Re: Сетевая печать на Zebra Z4M Plus с помощью ZPL II  [new]
Dima T
Member

Откуда:
Сообщений: 15294
mr.Gandalf
Вопрос пока не решен. Вопрос к Вам "профи".
Представьте, что у Вас к одному из ПК подключен Ваш Zebra… (через LPT1), на котором у Вас идет массовая печать бирок (этикеток).
ПК находится в сети и Вам нужно с другого ПК (к которому на прямую не подключен принтер Zebra….), используя ZPL команды (это некий текст ) отправить на Вашу Zebra…. (короче распечать несколько бирок).
Как с другого ПК печатать на Zebre……. ?
Как бы Вы поступили? У меня чего-то ничего не получается. Заранее благодарен

Вариант от Декоратора с TCP/IP ты не осилил.
1. Можешь в сторону DCOMа покопать - чтобы объект работал на машине с принтером. Примеров нет, давно как-то побаловался, но реально нигде не использовал.
2. Проще некуда. Расшареная папка куда кладутся файлы с заданиями на печать. На компе с принтером крутится менеджер печати, который постоянно проверяет папку, если там что-то появляется - печатает и удаляет файл-задание
25 сен 07, 08:08    [4709269]     Ответить | Цитировать Сообщить модератору
 Re: Сетевая печать на Zebra Z4M Plus с помощью ZPL II  [new]
sergej_57
Member

Откуда:
Сообщений: 72
Посмотри на соседнем форуме, я там тебе ответил на свой вопрос
25 сен 07, 08:39    [4709324]     Ответить | Цитировать Сообщить модератору
 Re: Сетевая печать на Zebra Z4M Plus с помощью ZPL II  [new]
mr.Gandalf
Member

Откуда:
Сообщений: 95
*Вариант от Декоратора с TCP/IP ты не осилил.
*1. Можешь в сторону DCOMа покопать - чтобы объект работал на машине с принтером. Примеров *нет, давно как-то побаловался, но реально нигде не использовал.
*2. Проще некуда. Расшареная папка куда кладутся файлы с заданиями на печать. На компе с *принтером крутится менеджер печати, который постоянно проверяет папку, если там что-то *появляется - печатает и удаляет файл-задание

Спасибо за оперативность.
Может я чего не понимаю, но вся штука в том, что на принтер идет текстовая последовательность (это и есть команды управления) . Т.е. не подготовленные к печати файлы! Ферштейн?
С помощью этих команд печатается штрих код и все остальное.

Все равно спасибо, за идею.
25 сен 07, 10:50    [4710022]     Ответить | Цитировать Сообщить модератору
 Re: Сетевая печать на Zebra Z4M Plus с помощью ZPL II  [new]
Dima T
Member

Откуда:
Сообщений: 15294
mr.Gandalf
Может я чего не понимаю, но вся штука в том, что на принтер идет текстовая последовательность (это и есть команды управления) . Т.е. не подготовленные к печати файлы! Ферштейн?
С помощью этих команд печатается штрих код и все остальное.

Последовательность откуда берется? - программно формируется. Вот и пиши в файл что наформировал. Неважно в каком виде, хоть в DBF. Главное чтобы менеджер печати (его тоже тебе писать) взял этот файл, закончил его преобразование (если нужно) и послал на принтер не задавая никаких вопросов.
25 сен 07, 16:33    [4712935]     Ответить | Цитировать Сообщить модератору
 Re: Сетевая печать на Zebra Z4M Plus с помощью ZPL II  [new]
mr.Gandalf
Member

Откуда:
Сообщений: 95
Добрый вечер Дмитрий.

*Последовательность откуда берется? - программно формируется. Вот и пиши в файл что *наформировал. Неважно в каком виде, хоть в DBF. Главное чтобы менеджер печати (его тоже *тебе писать) взял этот файл, закончил его преобразование (если нужно) и послал на принтер не *задавая никаких вопросов.

Короче, сделал следующее: Создал локальный порт(через ХР настройка принтера). Расшарил его (через net use lpt5 \\server\zebra). Но печать на принтер не приходит. Вываливается на экран монитора. Что за "хрень", пока понять не могу ?
Есть вопрос: менеджер печати(который надо написать) - это что за чудо? Можно своими словами. Просьба без обид (если вопросы дико выглядят).

Еще раз спасибо за участие.

Удачи.
25 сен 07, 22:09    [4714476]     Ответить | Цитировать Сообщить модератору
 Re: Сетевая печать на Zebra Z4M Plus с помощью ZPL II  [new]
Dima T
Member

Откуда:
Сообщений: 15294
mr.Gandalf
Короче, сделал следующее: Создал локальный порт(через ХР настройка принтера). Расшарил его (через net use lpt5 \\server\zebra). Но печать на принтер не приходит. Вываливается на экран монитора. Что за "хрень", пока понять не могу ?

На этот вопрос тебе лучше в форуме по администрированию Win ответят.

mr.Gandalf
Есть вопрос: менеджер печати(который надо написать) - это что за чудо? Можно своими словами. Просьба без обид (если вопросы дико выглядят).

Твою зебру я в глаза не видел, каким образом строится с ней взаимодействие - тоже непонятно. Понятно что это не стандартный report, а какая-то байтовая последовательность посылаемая в LPT порт. Локально на одной машине у тебя все работает. Правильно ?
Т.к. с другой машины послать в lpt порт не получается, то надо разделить процедуру печати на два этапа:
1. Подготовка данных для печати (удаленный компьютер с участием пользователя)
2. Отправка данных на печать (комп с принтером, пользователь не нужен, он же "менеджер печати")

по п.1 - это твоя прога где пользователь выбирает что печатать. Выбранное в каком-то виде сохраняется, как вариант в файл писать последовательность байт которые надо отправить на принтер (fcreate(), fwrite(),StrToFile()). Затем файл кладется в заданную сетевую папку, например \\SERVER\ZEBRA

по п.2 - на компе с принтером висит постоянно запущенная программулька (менеджер печати), которая периодически (раз в секунду например) проверяет есть ли что в папке \\SERVER\ZEBRA если в папке появился файл, то он берется (fopen(), fread(), FileToStr()) и отправляется в LPT-порт. После чего файл удаляется.

PS Расшаренную папку и файлы можно заменить на любой другой способ взаимодействия двух компов по сети. Например, установку TCP/IP соединения и передачу инфы по этому соединению.
26 сен 07, 08:28    [4715096]     Ответить | Цитировать Сообщить модератору
 Re: Сетевая печать на Zebra Z4M Plus с помощью ZPL II  [new]
mr.Gandalf
Member

Откуда:
Сообщений: 95
Огромное спасибо за разъяснения.

Бум, думать.
26 сен 07, 08:40    [4715126]     Ответить | Цитировать Сообщить модератору
 Re: Сетевая печать на Zebra Z4M Plus с помощью ZPL II  [new]
Декоратор
Guest
А в каком режиме работает устройство ? EPP или ECP ?
Советую просто для начала, выставить в BIOS правильный режим работы порта, которое поддерживает ваше устройство. Затем попробовать, просто для тестирования, открыть порт через FOPEN() и чегой-то там ему закинуть (через FWRITE() ) в соответствии с протоколом. А потом уже думать, где же в реализации команды по протоколу ошибка. А затем уже задуматься о высших материях, типа того как по сети все это добро заюзать. И кстати, это очень полезно, так как он вам ответит вне зависимости от того понял он команду или нет и во входной буфер припреться ответ ( можно его и почитать через FREAD(), только с длинной читаемых данных не переборщите, а-то будете висеть) , который по протоколу будет расшифровываться "Команда не поддерживаеться", или "недопустимый код операции", ну и т.д.
Удачи.
26 сен 07, 11:00    [4715977]     Ответить | Цитировать Сообщить модератору
 Re: Сетевая печать на Zebra Z4M Plus с помощью ZPL II  [new]
mr.Gandalf
Member

Откуда:
Сообщений: 95
Всем кто откликнулся человеческое спасибо.

Проблема решена!

Всем удачи.

mr.Gandalf
26 сен 07, 16:17    [4719046]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / FoxPro, Visual FoxPro Ответить