MS-キャッシュドロワ、間違ったコードを開きますか?不正なコード?
-
19-09-2019 - |
質問
屈辱expierenceと私はこの1つは私が.NETに古代のレジのプログラムを変換しようとしている私の愚か者を作る、しかし...と思います。他のすべてを征服し、私はレジを開けポップすることはできません。そのCOM1に接続され、あなたはレジスタが開くようになりますCOM1ダウン「トリガー」テキストを送信することになっています。
ここでは、.NETコードです。
MsgBox("Opening Drawer")
Dim port As System.IO.Ports.SerialPort
port = New System.IO.Ports.SerialPort("Com1")
port.PortName = "COM1"
port.BaudRate = 9600
port.Parity = IO.Ports.Parity.None
port.DataBits = 8
port.StopBits = IO.Ports.StopBits.One
'port.Handshake = IO.Ports.Handshake.RequestToSend
port.RtsEnable = True
'port.DtrEnable = True
port.Open()
If port.IsOpen Then
'MsgBox("Attempt 1")
port.Write("@@@@@@@@@@@@@@@@@@@@")
MsgBox("Signal Sent: " & Chr(65))
Else
MsgBox("Port is not open")
End If
port.Close()
MsgBox("Pop, durn it!")
私はmsgboxes "信号送信" を取得するには、 "完了ポップ引き出し"
ダンの事、ちょうどポップません。これは、MS-キャッシュドロア(EP125KC)です。確かに間違いなく力を持って、COM1に接続されています。 CHR(65)は、引き出しを開くために使用される古いコードで、それが動作します:
Open drawerComPort For Output Access Write As #1
Print #1, Chr$(65); "A";
Close #1
注:上記のコードが正常に働いていました。根本的な問題は、(負の間違った側にあった)reveresed電源コードによって引き起こされた。
すべてのヘルプみんなありがとう!
解決
あなたはなしに、あなたのハンドシェイクを設定しましたが、現金の引き出しはおそらく、独自のアイデアを持っています。また、TrueにDtrEnableを設定します。 CHR(65)は、あなたのVBのコードは、実際のコマンドが "AA" であることを示唆している、 "A" のASCIIコードです。
キャッシュドロワそのボーレートを自動調整し、マニュアルの文書。これは、文字@、少なくとも20の送信を推奨しています。そして、それは本当のコマンドは、Ctrlキー+ G(CHR(7))です。 「AA」コマンドが原因ボーレートの不一致に以前に働いている可能性があります。多分ます。
他のヒント
私は私を覚えている場合は、の非常に錆びのBASIC。
Print #1, Chr$(65); "A";
文字列「A」に続く文字65をPORT1するプリントを意味し、今文字65は、「A」であるので、あなたは、
PORT1する「AA」を送付しなければならないように、これは私には見えますport.Write("AA");
または交互に、
port.Write(new byte[]{65,'A'}, 0, 2);
よく終わらないであろう、0065だろうUnicodeの65を、送信される可能性があります。
ただ、思考、あなたは生のint型の送信を試みることができますか?
私は、.NETを使用してはいけない、しかしポートはバッファリングされていますか?あなたはフラッシュ/にfflushを送信する必要がありますか()?
あなたはこのコードを送ることになっていますか?私はいつも現金引き出しのために...コードはESCすなわちとして0x1B進が付けられていると考えているだろう...
"\x1bA"
ダブル 'A' が使用されていることは興味深い...まあいい...:)
の編集は、このことを考えた後、私は読んで、それを行うための別の方法があります実現...
私はopendrawer.bas
するためにそれを保存...弾丸プルーフのビットを使用して、元のBASICコードを変更しました。
Sub OpenDrawer() drawerComPort = "COM1" Open drawerComPort For Output Access Write As #1 REM ADDED ERROR HANDLING ON ERROR GOTO ErrHandler Print #1, Chr$(65); "A"; Close #1 print "Drawer Ok" OpenDrawer_Exit: On Error Goto 0 Exit Sub ErrHandler: print "Oops, Write Failed" Goto OpenDrawer_Exit End Sub REM The Main.... OpenDrawer
古いQB4.5 MS-クイックBasicコンパイラをダウンロードして、opendrawer.exe
に、実行ファイルにそれをコンパイルし、QB4.5は<のhref = "http://www.phatcode.net/downloads.php見つけることができます?ID = 172" のrel = "nofollowをnoreferrer">ここを。今、責任は私が
そして、あなたは隠されたウィンドウを使用してシェルにSystem.Diagnostics.Process
を使用することができます。
public class TestDrawer { private StringBuilder sbRedirectedOutput = new StringBuilder(); public string OutputData { get { return this.sbRedirectedOutput.ToString(); } } public void Run() { System.Diagnostics.ProcessStartInfo ps = new System.Diagnostics.ProcessStartInfo(); ps.FileName = "opendrawer"; ps.ErrorDialog = false; ps.CreateNoWindow = true; ps.UseShellExecute = false; ps.RedirectStandardOutput = true; ps.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; using (System.Diagnostics.Process proc = new System.Diagnostics.Process()) { proc.StartInfo = ps; proc.Exited += new EventHandler(proc_Exited); proc.OutputDataReceived += new System.Diagnostics.DataReceivedEventHandler(proc_OutputDataReceived); proc.Start(); proc.WaitForExit(); proc.BeginOutputReadLine(); while (!proc.HasExited) ; } } void proc_Exited(object sender, EventArgs e) { System.Diagnostics.Debug.WriteLine("proc_Exited: Process Ended"); if (this.sbRedirectedOutput.ToString().IndexOf("Oops, write failed") > -1){ MessageBox.Show(this, "Error in opening Cash Drawer"); } if (this.sbRedirectedOutput.ToString().IndexOf("Drawer Ok") > -1){ MessageBox.Show(this, "Drawer Ok"); } } void proc_OutputDataReceived(object sender, System.Diagnostics.DataReceivedEventArgs e) { if (e.Data != null) this.sbRedirectedOutput.Append(e.Data + Environment.NewLine); //System.Diagnostics.Debug.WriteLine("proc_OutputDataReceived: Data: " + e.Data); }
プロセス・非表示ウィンドウにアウトシェルと、すべての出力は、イベントハンドラにリダイレクトされ、処理される...トリックを行う必要があります。リダイレクトされた出力はsbRedirectedOutput
(StringBuilderのインスタンス)に入る方法に注目してください。 proc_ProcExited
イベントハンドラでは、QB4.5プログラムから発行されることになるメッセージ「おっと失敗書く」のsbRedirectedOutput
をチェックします。
あなたが同じディレクトリにQB4.5のランタイムライブラリを含める必要があるかもしれないことに注意して下さい... 100%確実ではない...それは何年ものだ...
あなたはどう思いますか?
これが、お役に立てば幸い 宜しくお願いします、 トムます。