Протокол сего девайса открыт и любезно предоставлен производителем
Драйвера для работы с девайсом я нашел только платные и довольно старинные. Собственно это и подвигло к написанию статьи.
В наличии: старенький нетбук с COM портом. Первым делом запустил putty и проверил связь. Настройки пота paryty: Even; stopbit:2; spped:57600 передаем две буквы «U» и получаем «READY». Протокол работает, порт жив. На нетбуке от предыдущих опытов установлен mscomctl.ocx. Этого набора вполне достаточно чтоб написать сервис консоль для Марии.
В общем виде vbscript для получения конфигурации Марии выглядит так:
dim MSComm1 dim txt function fillcmd(txtma) ret = chr(253) & txtma & chr(len(txtma)+1) & chr(254) fillcmd = ret end function function sendCmd(cmdTxt) ret = "" txt.writeline "cmd="+txtcmd MSComm1.Output = fillcmd(txtcmd) WScript.Sleep(100) ret = MSComm1.Input txt.writeline "answ="+ret sendCmd = ret end function function initMaria() txt.writeline "init" MSComm1.Output="U" WScript.Sleep(1) MSComm1.Output="U" WScript.Sleep(20) rez = MSComm1.Input txt.writeline "answ="+rez initMaria = rez end function function initComm() Set MSComm1=CreateObject("MSCOMMLib.MSComm") MSComm1.Settings = "57600,e,8,2" MSComm1.CommPort = 2 MSComm1.InBufferCount = 0 MSComm1.PortOpen = True MSComm1.DTREnable = True set fso = CreateObject("Scripting.FileSystemObject") set txt = fso.CreateTextFile("maria.log") initComm = "Ready" end function sub closePort() MSComm1.DTREnable = False MSComm1.PortOpen = False Set MSComm1 = Nothing txt.close Set txt = Nothing end sub res = initComm() res = initMaria() 'get maria configurarion txtcmd="CONF" res = sendCmd(txtcmd) closePort()
Полезные функции:
initComm() — открывает порт и лог файл
fillcmd(txtma) обрамляет
Печать чека:
res = initComm() res = initMaria() 'user login txtcmd="UPAS111111111112345" res = sendCmd(txtcmd) 'cancel check txtcmd="CANC" res = sendCmd(txtcmd) 'open check txtcmd="PREP0" res = sendCmd(txtcmd) 'add line txtcmd="FISC"&"арт "&"000003000"&"000001000"&"00003"&"10"&_ "А02000"&"000000"&"000000"&"000000"&"000000"&"000000"&"000000"&"000000"&"0001" '+"&'" "&" "&"доп" res = sendCmd(txtcmd) 'close check txtcmd="COMP"&"0000003000"&"0000000000"&"0000000000"&"0000000000"&"0000000000"&"0000003000" res = sendCmd(txtcmd) closePort()
Такого кода вполне достаточно чтоб печатать чеки, отчеты из 1С, ACESS, EXCEL
Думаю написать драйвер с использованием nativ-API на замену прежнему OLE32…
ссылка на оригинал статьи http://habrahabr.ru/post/199066/
Добавить комментарий