メアリー301MTMの飼いならし

デバイスMaria-301MTMが手に入れました...これはウクライナの会計レジストラ-現金領収書のプリンターです。

画像



このデバイスのプロトコルは公開されており、 メーカーから親切に提供されています

デバイスを操作するためのドライバーは、有料で非常に古いことがわかりました。 実際、これは記事の執筆を促しました。



在庫あり:COMポートを備えた古いネットブック。 最初にしたことは、パテを実行して接続を確認することでした。 汗設定パリティ:偶数。 ストップビット:2; 速度:57600は2つの文字「U」を渡し、「READY」を取得します。 プロトコルは機能し、ポートは有効です。 以前の実験のネットブックにmscomctl.ocxをインストールしました。 このセットは、Maryのサービスコンソールを作成するのに十分です。



トランスポートプロトコル:

1.コマンド:<start> <command_oparameters> <length> <end>;

2.回答:<開始> <情報> <長さ> <終了>、

ここで、<start> = chr(253)、<end> = chr(254)。 コマンドの長さは255文字以下にする必要があります。





プリンターは、「WAIT」、「DONE」、「READY」でコマンドに応答します。 「準備完了」-次のチームを受け入れる準備ができていることを意味します。 応答にエラーがある可能性があります。 たとえば、「 'HARDTXD'」接続タイプが間違ったタイプのパリティを指定している場合、または「 'SOFTPROTOC」はシーケンスエラーコマンドです...



一般に、Mariaの構成を取得する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()
      
      







このコードは、小切手、1C、ACES、EXCELからのレポートを印刷するのに十分です

nativ-APIを使用して古いOLE32を置き換えるドライバーを作成すると思います...



All Articles