統合開発環境ソフト:Microsoft Visual Studio 2010 Express
OS:windowsXP
言語:Visual Basic
上記環境で磁気カードを読み込んだカードリーダのデータをUSBにつないで、パソコンに送信し、パソコンのソフト側で受信するソフトを作りたいと思っているのですが、カードリーダでデータの方が送信されず、アドバイスいただければと思い質問させていただきました。
ネットで調べながらテキストボックスに書いたポート番号を開いて、その後、リーダーで送信するという動きをさせようと、以下のようなソースを書いてみたのですが、データが送信されません。
磁気リーダ(アメリカ製)のプログラマーズマニュアルを調べてみたところ、
Upload Data
1. ID-e will send the first record and wait for an <ACK > (hex code: 06h) to send the next one or a NAK (hex code: 15h) to resend the record.
と書いており、プログラム側で「ACK」というデータを送信しないとリーダーが送信を開始しないのかと思ったのですが、どのようにすればいいのか調べても解りませんでした。
他にも抜けていることがあるのかも知れませんが、お気づきの点ございましたら、ご教授いただけると幸いです。
また、参考までに作ったプログラムの実行時の画面を添付いたします。
尚、ポートの設定は磁気カードリーダのマニュアルの記載通り
Baud rate: 19200
Parity: None
Data bit: 8
Stop bit: 1
としております。
ただ、
Hardware flow control: None
という記載があるのですが、どこで設定すればいいのかわからないため、変更しておりません。
よろしくお願いいたします。
------------------------------------------------------------------------
Public Class Form1
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Try
If SerialPort1.IsOpen = True Then
Exit Sub
End If
SerialPort1.PortName = TextBox1.Text
SerialPort1.Open()
Catch ex As Exception
MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
SerialPort1.RtsEnable = True
End Sub
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
If SerialPort1.IsOpen = True Then
SerialPort1.Close()
End If
End Sub
Delegate Sub DataDelegate(ByVal sdata As String)
Private Sub PrintData(ByVal sdata As String)
TextBox2.Text = sdata
End Sub
Private Sub SerialPort1_DataReceived()
Dim ReceivedData As String = " "
Try
ReceivedData = SerialPort1.ReadLine
Catch ex As Exception
ReceivedData = ex.Message
End Try
Dim adre As New DataDelegate(AddressOf PrintData)
Me.Invoke(adre, ReceivedData)
End Sub
End Class
統合開発環境ソフト:Microsoft Visual Studio 2010 Express
OS:windowsXP
言語:Visual Basic
上記環境で磁気カードを読み込んだカードリーダのデータをUSBにつないで、パソコンに送信し、パソコンのソフト側で受信するソフトを作りたいと思っているのですが、カードリーダでデータの方が送信されず、アドバイスいただければと思い質問させていただきました。
ネットで調べながらテキストボックスに書いたポート番号を開いて、その後、リーダーで送信するという動きをさせようと、以下のようなソースを書いてみたのですが、データが送信されません。
磁気リーダ(アメリカ製)のプログラマーズマニュアルを調べてみたところ、
Upload Data
1. ID-e will send the first record and wait for an <ACK > (hex code: 06h) to send the next one or a NAK (hex code: 15h) to resend the record.
と書いており、プログラム側で「ACK」というデータを送信しないとリーダーが送信を開始しないのかと思ったのですが、どのようにすればいいのか調べても解りませんでした。
他にも抜けていることがあるのかも知れませんが、お気づきの点ございましたら、ご教授いただけると幸いです。
また、参考までに作ったプログラムの実行時の画面を添付いたします。
尚、ポートの設定は磁気カードリーダのマニュアルの記載通り
Baud rate: 19200
Parity: None
Data bit: 8
Stop bit: 1
としております。
ただ、
Hardware flow control: None
という記載があるのですが、どこで設定すればいいのかわからないため、変更しておりません。
よろしくお願いいたします。
------------------------------------------------------------------------
Public Class Form1
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Try
If SerialPort1.IsOpen = True Then
Exit Sub
End If
SerialPort1.PortName = TextBox1.Text
SerialPort1.Open()
Catch ex As Exception
MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
SerialPort1.RtsEnable = True
End Sub
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
If SerialPort1.IsOpen = True Then
SerialPort1.Close()
End If
End Sub
Delegate Sub DataDelegate(ByVal sdata As String)
Private Sub PrintData(ByVal sdata As String)
TextBox2.Text = sdata
End Sub
Private Sub SerialPort1_DataReceived()
Dim ReceivedData As String = " "
Try
ReceivedData = SerialPort1.ReadLine
Catch ex As Exception
ReceivedData = ex.Message
End Try
Dim adre As New DataDelegate(AddressOf PrintData)
Me.Invoke(adre, ReceivedData)
End Sub
End Class