ハンディターミナルを使用する最大の要因は、バーコードの読込みを行うことです。 商品に貼られたバーコードや、商品棚に印刷されたバーコードを読み取り、いろいろな作業を行います。
BHTシリーズで読込み可能なバーコードには EAN-13(JAN-13)、EAN-8 (JAN-8)、NW-7、Code39、Code93、Code128等があります。
バーコードを読込む処理は以下の一連の命令の実行で行います。
・OPEN命令によりバーコードデバイスをオープンする。
・バーコードが読込まれるのを待つ。
・バーコードバッファから読込まれた文字列を取得する。
・CLOSE命令によりバーコードデバイスをクローズする。
バーコードデバイスのオープンの OPEN命令 について説明します。
上記のほかにいろんな指定がありますが、それは各BHTの取説を見てください。
この例では読取モードとしてはモメンタリスイッチモードで、読取コードは 共通商品コード、Code39の4桁~25桁、Code128の4桁~25桁を可能としています。
このオープン例を使った簡単なテストプログラムを以下に示します。
実際の処理としては、上記のテストプログラムでは不十分です。 商品などのバーコードコードをスキャンする場合、そのバーコードが準備されていればいいのですが、 準備できていないことがあります。
そんな時には、バーコードスキャンでもキー入力でもコード入力が可能な様に組んでおくことが必要です。
以下のソースはバーコードスキャンを途中でやめて、キー入力出来る様にしたバーコード入力関数の例です。
この関数の処理は以下の様な仕様になっています。
(1)最初にカーソル位置を退避する。
(2)バーコードデバイスオープンを行い、キー入力とバーコードスキャンを待つ。
(3)バーコードスキャンがあれば、コードを変数に戻し、関数を終わる。
(4)[F4]キーが押下された場合は、戻り値にそのフラグを持って関数を終わる。
(5)[F1]キーが押下された場合は、キー入力処理になる。
(6)数字キーであれば入力文字列に追加する。
(7)[F2]キーが押下された場合は、バーコードスキャン(2)に戻る。
(8)[F4]キーが押下された場合は、戻り値にそのフラグを持って関数を終わる。
この関数はまだまだ足りない点があると思いますので、改造をして下さい。
=====
2016/04/02:の時の情報
BHTシリーズで読込み可能なバーコードには EAN-13(JAN-13)、EAN-8 (JAN-8)、NW-7、Code39、Code93、Code128等があります。
バーコードを読込む処理は以下の一連の命令の実行で行います。
・OPEN命令によりバーコードデバイスをオープンする。
・バーコードが読込まれるのを待つ。
・バーコードバッファから読込まれた文字列を取得する。
・CLOSE命令によりバーコードデバイスをクローズする。
■バーコードデバイスのオープン
バーコードデバイスのオープンの OPEN命令 について説明します。
[書式1:パラメタを直接指定] OPEN "BAR:[読取モード][ブザー制御][LED制御]" AS [#]ファイル番号 CODE 読取コード[,読取コード...] [書式2:パラメタをシステム設定値から指定] OPEN "BAR:SP" AS [#]ファイル番号 <引き数> ・[読取モード]: ■モメンタリスイッチモード(M): トリガスイッチを押している間だけ照明LEDが点灯し、 バーコードを読み取ることができる。 ■オートオフモード(F) トリガスイッチを押すと照明LEDが点灯し、トリガスイッチを放すか、 またはバーコードを読み取ると、照明LED は消える。 ■オルタネートスイッチモード(A) トリガスイッチを押すと照明LEDが点灯し、トリガスイッチを放しても、 照明LED は点灯している。バーコードデバイスファイルがクローズされるか、 またはトリガスイッチを再度押すと照明LED は消える。 ■連続読み取りモード(C) トリガスイッチに関係なく照明LEDはバーコードデバイスファイルが クローズされるまで点灯しています。 ※4モードとも照明LEDが点灯している間は、 バーコードを読み取ることができます。 ・[ブザー制御]:"B" バーコードの読み取り成功時にブザー(バイブレータ)を作動 ・[LED制御]:"L" バーコードの読み取り成功時に青LED が点灯しないようにする ・ファイル番号:(OPEN命令で指定したファイル番号を指定) ・読取コード: ■共通商品コード("A","B","C") 先頭文字(国フラグ)やアドオンの指定ができますが "A"のみ指定でEAN-13(JAN-13),EAN-8(JAN-8),UPC-E全てが 読込める ■NW-7("N"): 書式:N[:[最小桁数[-最大桁数]][スタート ストップ][CD] [,[最小桁数[-最大桁数]][スタート ストップ][CD]] [,[最小桁数[-最大桁数]][スタート ストップ][CD]]] ■Code39("M"): 書式:M[:[最小桁数[-最大桁数]][CD] [,[最小桁数[-最大桁数]][CD]] [,[最小桁数[-最大桁数]][CD]]] ■Code93("L"): 書式:L[:[最小桁数[-最大桁数] [,[最小桁数[-最大桁数]] [,[最小桁数[-最大桁数]]] ■Code128("K"): 書式:K[:[最小桁数[-最大桁数] [,[最小桁数[-最大桁数]] [,[最小桁数[-最大桁数]]]
上記のほかにいろんな指定がありますが、それは各BHTの取説を見てください。
■オープン指定の例
OPEN "BAR:M" AS #1 CODE "A", "M:4-25", "K:4-25"
この例では読取モードとしてはモメンタリスイッチモードで、読取コードは 共通商品コード、Code39の4桁~25桁、Code128の4桁~25桁を可能としています。
このオープン例を使った簡単なテストプログラムを以下に示します。
PRIVATE intLen%, pstrBarCode$ 'バーコードデバイスオープン OPEN "BAR:M" AS #1 CODE "A", "M:4-25", "K:4-25" 'バーコードスキャニング待ち WAIT 0, &h02 'バーコードバッファ内の文字数取得 intLen% = LOC(#1) 'バーコード読込 pstrBarCode$ = INPUT$(intLen%, #1) 'バーコードデバイスクローズ CLOSE #1 PRINT "BARCODE=" + pstrBarCode$ WAIT 0, &H1 'キー待ち END
実際の処理としては、上記のテストプログラムでは不十分です。 商品などのバーコードコードをスキャンする場合、そのバーコードが準備されていればいいのですが、 準備できていないことがあります。
そんな時には、バーコードスキャンでもキー入力でもコード入力が可能な様に組んでおくことが必要です。
■バーコード・キー入力の両方を行える関数例
以下のソースはバーコードスキャンを途中でやめて、キー入力出来る様にしたバーコード入力関数の例です。
この関数の処理は以下の様な仕様になっています。
(1)最初にカーソル位置を退避する。
(2)バーコードデバイスオープンを行い、キー入力とバーコードスキャンを待つ。
(3)バーコードスキャンがあれば、コードを変数に戻し、関数を終わる。
(4)[F4]キーが押下された場合は、戻り値にそのフラグを持って関数を終わる。
(5)[F1]キーが押下された場合は、キー入力処理になる。
(6)数字キーであれば入力文字列に追加する。
(7)[F2]キーが押下された場合は、バーコードスキャン(2)に戻る。
(8)[F4]キーが押下された場合は、戻り値にそのフラグを持って関数を終わる。
'この変数はどこかで宣言する Global GcKeyF1$ : GcKeyF1$ = "A" Global GcKeyF2$ : GcKeyF2$ = "B" Global GcKeyF3$ : GcKeyF3$ = "C" Global GcKeyF4$ : GcKeyF4$ = "D" Global GcGetRetNormal% : GcGetRetNormal% = 0 '[ENT]キーでの終了 Global GcGetRetF1% : GcGetRetF1% = 1 '[F1]キーでの終了 Global GcGetRetF2% : GcGetRetF2% = 2 '[F2]キーでの終了 Global GcGetRetF3% : GcGetRetF3% = 3 '[F3]キーでの終了 Global GcGetRetF4% : GcGetRetF4% = 4 '[F4]キーでの終了 '--------------------------------------- 'バーコード入力 '--------------------------------------- 'Function GfGetBar%(Byref pstrBarCode$) '引 数: ' pstrBarCode$:入力されたバーコード文字列 '戻り値: ' GfGetBar% :どのキーで終了したかを示す以下のフラグを返す ' : GcGetRetNormal% = 0 '[ENT]キーでの終了 ' : GcGetRetF4% = 4 '[F4]キーでの終了 '--------------------------------------- Function GfGetBar%(Byref pstrBarCode$) Private intX%, intY%, intLoop%, intLen%, strKey$, intRet%, strInp$ 'エラー処理宣言 On Error Goto GfGetBar.ErrProc '結果格納領域の初期化 pstrBarCode$ = "" 'カーソル位置退避 intY% = CSRLIN intX% = POS(0) GfGetBar.ReStart 'バーコード再スタート Locate intX%, intY%, 2 Cursor ON 'バーコードデバイスオープン OPEN "BAR:M" AS #1 CODE "A", "M:4-25", "K:4-25" intLoop% = GcTrue% While intLoop% = GcTrue% 'キー入力とバーコードスキャニング待ち Wait 0, &h03 'バーコードバッファ内の文字数取得 intLen% = Loc(#1) If intLen% <> 0 Then 'バーコードスキャニングがあった場合 pstrBarCode$ = Input$(intLen%, #1) 'バーコードをセット intRet% = GcGetRetNormal% intLoop% = GcFalse% Else 'キー入力があった場合 strKey$ = Input$(1) '入力されたキーの文字を取得 SELECT strKey$ CASE "A" '[F1]キー文字の場合 intLoop% = GcFalse% intRet% = GcGetRetF1% '下のキー入力をさせる CASE "D" '[F4]キー文字の場合 intLoop% = GcFalse% intRet% = GcGetRetF4% '関数を抜ける END SELECT End If WEnd 'バーコードデバイスクローズ Close #1 if intRet% = GcGetRetF1% Then 'キー入力ループ intLoop% = GcTrue% While intLoop% = GcTrue% '表示 Cursor OFF Locate intX%, intY% Print " "; Locate intX%, intY% Print strInp$; Cursor ON 'キーを1文字取得 strKey$ = GfGetKey$ '数字のみしか受け付けない!! IF "0" <= strKey$ And strKey$ <= "9" THEN strInp$ =strInp$ + strKey$ ELSE '数字以外の場合 SELECT strKey$ CASE CHR$(13) '[ENT]キー文字の場合 If strInp$ <> "" Then pstrBarCode$ = strInp$ 'コード戻す intLoop% = GcFalse% 'ループ脱出 intRet% = GcGetRetNormal% Endif CASE CHR$(8) '[BS]キーの場合 If LEN(strInp$) > 0 Then strInp$ = LEFT$(strInp$, LEN(strInp$) - 1) Endif CASE CHR$(24) '[クリア]キーの場合 strInp$ = "" CASE "B" '[F2]キー文字の場合 intLoop% = GcFalse% intRet% = GcGetRetF2% 'バーコード再入力へ CASE "D" '[F4]キー文字の場合 intLoop% = GcFalse% intRet% = GcGetRetF4% '関数を抜ける END SELECT ENDIF WEnd Endif If intRet% = GcGetRetF2% Then 'バーコード再入力へ Goto GfGetBar.ReStart Endif GfGetBar% = intRet% GfGetBar.Return '関数戻り On Error Goto 0 Exit Function '----- 'エラー処理 '----- GfGetBar.ErrProc GfGetBar% = GcGetRetNormal% pstrBarCode$ = "" Resume GfGetBar.Return End Function '----- 'この関数の実行例 '----- SCREEN 1 '漢字モード LOCATE , , 2 'カーソルをブロック表示 PRIVATE intRet%, intLen%, pstrBarCode$ WHILE 1 LOCATE 1, 2 PRINT " "; LOCATE 1, 2 PRINT "CODE="; intRet% = GfGetBar%(pstrBarCode$) LOCATE 1, 4 PRINT " "; LOCATE 1, 4 If intRet% = GcGetRetF4% Then PRINT "**コード無しでの戻り" Else PRINT "INP=" + pstrBarCode$ Endif WEND
この関数はまだまだ足りない点があると思いますので、改造をして下さい。
=====
2016/04/02:の時の情報
PR
コメント