HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0828
可憐POS端末との連動30解決


可憐

リンク

2015/8/28(Fri) 00:59:45|NO.71086

現在新規事業を開設中でして
業務用のPOS端末であるレシートプリンタとの連動をしようと思っております
そこで、一カ月程前に何も分からずRS-232Cケーブルを繋いで通信を行うプリンタを安く購入
そこからRS-232Cケーブルを購入しましたが、どうやら変換に失敗しているみたいです(初めからたぶん対応してない)
そこからまた2台程RS-232C対応のレシートプリンタを購入したのですがダメで・・・
どうやら調べたらRS-232CはWindowsXP頃によく使われていたものらしく、現在はUSB接続だとネットで知りました。

そこで本題なんですが

USB対応のプリンタを購入しようと考えておりまして、接続方法や印字方法
色んなサイトを見て回ったところ、『◯◯◯の文字をx,yに記述しろ』
という命令をレシートプリンタに送るみたいなんですが・・・
どのプリンタを購入していいか、印字方法についても書かれてる物全てと言っていいほどC言語なのでお手上げ状態です。
ハードウェアとの連動は初めてなもので知恵を貸して頂ければなと思っております。

参考になるサイトは見つけたのですが
USB接続対応のレシートプリンタも手元に無く全くの知恵なしなので何がなんだかさっぱり・・・

http://www.onionsoft.net/wp/archives/304

よろしくお願いします



この記事に返信する


KA

リンク

2015/8/28(Fri) 06:01:49|NO.71089

RS-232Cの
1:ケーブルの内部結線は合っていますか?
2:通信環境は合わせていますか?
3:通信手順は正しいですか?

「メモ帳から印刷しても出ない!」なんて意味では無いと
思いますが、どういうスクリプトを書いたのでしょうか?

これはUSBでも同じ事です。



skyblue

リンク

2015/8/28(Fri) 12:41:13|NO.71090

連動とはどういうのですか?
説明書を読みしっかりと設定していますか?

連動がPOS端末で読み取った情報をレシートプリンターで印刷した上に
コンピュータに取り込みたいと言う事なら
リーダーとプリンタ、コンピュータが必要です。

パソコンで接続するならドライバーをインストールした上に設定を行わなくてはだめです。
その上ハードウェアの詳細な仕様書が必要です。もしくは、APIの仕様書等



可憐

リンク

2015/8/28(Fri) 15:50:26|NO.71092

携帯端末から失礼します。

KA様、skyblue様

お世話になります。
接続には成功し、レシートプリンターの専用ドライバも入れましたが。。
と、その前に記事に書き忘れてたのですが、RS-232C変換ケーブルを使い接続してるので
すが、変換ケーブルを用いてパソコンに接続しても読み取れない型が多くて
自分のレシートプリンターが繋がらないのはそれが原因っぽいです。(RSは25ピン仕様で自分のパソコンは9ピン仕様なので変換ケーブルを用いるしかなかった。)
ちなみにEpson様のレシートプリンターでして、電話お問い合わせしたのですが
やはり変換ケーブルを用いて接続してるから動作しないとのことでした。

上記のような状態なので、初めからUSB直結でレシートプリンターを購入しようとしている段階です。。が
何もかも分からない状態なので皆様のお力を貸していたきたい次第です



(´ω`)

リンク

2015/8/28(Fri) 17:05:50|NO.71094

はい毎度!( ゚ω゚ )

USB接続方式のレシートプリンタであれば、Bitbltによるプリンタデバイスへの出力が可能です。
ウチで実際に使ってるのは、EPSONのTM-T88IVおよび、SITIZENのCT-S601です。

Bitblt方式ではなくエスケープシーケンスを送る方式であれば、以前私が教えていただいた、
http://hsp.tv/play/pforum.php?mode=pastwch&num=52333
↑の内容がかなり参考になるかと。

Bitbltで十分にきれいな印字ができますが、転送速度でちょっと間ができます。
多分、エスケープシーケンス制御モジュールを作るのが正解でしょうね。

ウチは時間ないのでそこまでしてません。
後はがんばってください。(u´ω`)



mamo

リンク

2015/8/28(Fri) 18:13:57|NO.71098

USBへ変換するケーブル&ドライバは使えない?
モデムとレシートプリンターでは違いすぎるかな。



KA

リンク

2015/8/28(Fri) 18:27:37|NO.71100

>>変換ケーブルを用いてパソコンに接続して〜
>>(RSは25ピン仕様で自分のパソコンは9ピン仕様〜
>>やはり変換ケーブルを用いて接続してるから動作しない〜

ピン同士の接続が異なるのでしょう。
RS-232Cは、機器によってピン同士の接続が数種類存在します。
市販のケーブルは一般的な接続なので使えません。
結線図が判れば自作も可能(と言うか自作が普通)です。

>>読み取れない型が多く
通信手順(ボーレート・ストップビット等)が合っていない可能
性も有りますが、意味が分からなければUSBが無難でしょう。



可憐

リンク

2015/8/28(Fri) 20:43:46|NO.71101

ただいま帰宅しました。

(´ω`) 様

ありがとうございます。色々為になるお話を聞けてうれしいです。
とは言え、TM-T88IVもですが、色々と種類があってどれを購入していいか分からず・・・
等々色々と教えて頂きたいことがあるので・・・宜しければなんですが
Skype等を通じて色々とご教授していただければ・・・と思うのですが><!
ご検討お願いします(^^)/
その他、わかる方も良ければ教えて頂ければと思い僅かな希望ながらSkypeIDを貼らせて頂きます。

ID : shouyasama2261


mamo様 KA様

工学系ものすごく苦手で接続機の自作なんて到底自作できません><
USBでなんとか頑張ってやってみようと思います!!
とりあえずは購入からですね・・!



(´ω`)

リンク

2015/8/29(Sat) 09:29:05|NO.71106

一身上の都合でSkypeは入れておりません。悪しからずご了承ください。(´・ω・`)
あと、こういった技術的なハウツーの蓄積こそがこの掲示板の目的だと思いますので、
ここでバンバンご質問されるので問題ないかと。

どのUSBプリンターがいいか、というお話ですが、これはもう使用目的と求める利便性・機能
および予算で決まるものですので何とも言いにくいです。
私が上げた2種類のものは、どちらもほぼ同等の機能を有しておりますのでさほどの違いは
ありません。どちらもドロワ接続できます。印字速度はCT-S601のがちょい速いかな?
好みとしては、CT-S601のが好きだな、というくらいです。

で、USB接続するということは要するに、A4プリンターなどと同様ふつうのプリンターとして
OSに認識されるので、Bitbltで画像そのものを送ってしまえば印刷できてしまいます。
ESC/Pについても、事実上エプソンのコマンドが標準になってますので殆ど問題ないでしょう。

いまお抱えの不安点は、実際に使ったことがないという点に集約されるとお見受けします。
TM-T88IVは販売終了してるモデルで且つかなりの普及品ですので、安い中古を探せばいくらでも
転がっていると思いますので、それを手に入れてみるのが宜しいかと。

というか、Amazonで探したら\12,000程度でありますね。
やっすいな。(u ゚ω゚ )



skyblue

リンク

2015/8/29(Sat) 12:17:58|NO.71108

ポート制御ができないわけではありません。
最近のOSでも直接制御できます。
まず、デバイスファイルを開きます。
後はハードウェア仕様にそってリードライトするだけで制御ができます。
最近のOSはそういうふうにして制御します。



可憐

リンク

2015/8/29(Sat) 18:27:18|NO.71116

またまた携帯端末から失礼します。
レシートプリンターの購入について、Amazonで調べたところ

http://www.amazon.co.jp/gp/aw/d/B000H9I3F8/ref=mp_s_a_1_1?qid=1440839825&sr=8-1&pi=SY200_QL40&keywords=TM-T884

こちらのTM-T884のUSBインターフェイスを購入しても大丈夫なんでしょうか

http://www.amazon.co.jp/gp/aw/ol/B000H9I3F8/ref=mw_dp_olp?ie=UTF8&condition=used

同じUSBでも端末によって動作が違う事はあるのでしょうか?



可憐

リンク

2015/8/29(Sat) 20:16:15|NO.71117

パソコンからです何度も申し訳ないです


http://www.pcnettosyoppu.xyz/index.php?main_page=product_info&products_id=19988

こちらが一番安く且つUSB対応ですが
こちらでも動作するのでしょうか?
2度失敗したので、少し怖いです... (T_T)



(´ω`)

リンク

2015/8/30(Sun) 10:32:06|NO.71123

一番安くてUSB方式のやつが良さそうですね。必要な付属品も全部あるみたいですし。
ドライバやマニュアルは、EPSONサイトからダウンロードできます。
http://partner.epson.jp/support/details/contents119/

実際につないでドライバ入れて、という手順を踏めば、Windowsは普通のプリンターと
して認識してくれるはずです。Excelシートの印刷だってできます。
Windows7/8のどちらでも、普通に使えてます。
USB接続はRS-232Cよりはハードの認識も断然に楽ですし、後はもうやってみるしか。

どーしても不安だ、という場合、いちばん確実なのはお知り合いから借りてみること。
テラオカ系POSは殆どがこのプリンタを使用していますので、探せば以外とあちことに
あるもんだろうと思います。(´ω`)



可憐

リンク

2015/8/31(Mon) 00:58:40|NO.71152

一番安いサイトのクチコミ見たのですが、あまり良くないみたいですので
Amazonで14000円の中古を購入しました。
できるかどうか不安で仕方ないですが頑張ってみます。
届くのが9月2日or9月5日なので、またその頃にご質問させて頂くかもしれません(たぶんさせて頂きます^^;)



f(お茶中)

リンク

2015/8/31(Mon) 08:49:59|NO.71155

ケーブルがクロスだったりしねえ?とか一回書いたが
「変換ケーブルを用いて接続してるから動作しないとのことでした」とな。



可憐

リンク

2015/8/31(Mon) 12:26:56|NO.71159

また携帯端末から失礼します。

f(お茶中)様
そうなんですよね。
変換ケーブル経由でまさか接続できない事はないだろう。。
と思ってましたがピン同士の接続が数種類あるとは知りもしませんでした。

届くのが楽しみな反面自分の技量でできるのかが一番不安です(*_*)



可憐

リンク

2015/9/2(Wed) 01:31:53|NO.71240

昨日、プリンタが届き接続をしテスト印刷をしてみたのですが
何も印字がされてない白紙の状態で紙が送り出されました。
何故なのでしょう;;



f(就寝前)

リンク

2015/9/2(Wed) 03:52:54|NO.71243

どこの掲示板で聞くにしても同じことだと思いますが、
少なくともここの住人はエスパーじゃないので
詳細教えてくれないと答えようが無い事を
まず理解してもらう必要があります。


まず、プリンタの型番、PC側のOS及び使用ソフト、接続手段等を書いてください。
次に、どの様に操作して白紙が出たのかを教えてください。



可憐

リンク

2015/9/2(Wed) 10:43:33|NO.71248

説明不足でした。
パソコンOS:windows8
プリンター型番:TM-T884
接続手段:USB2.0

以上の環境から試した事

1.FEEDボタンを押しながら電源を入れてセルフチェックをした。
2.パソコン側からテスト印刷を実行した。

ロール紙の向きが間違ってないか、再度確認しましたが完全な白紙として
紙が送り出されてしまいました。

とりあえずEPSONさんにお問い合わせしてみようかと思います。



(´ω`)

リンク

2015/9/2(Wed) 11:25:25|NO.71249

印字テストで、白紙が出てきた?

放置されていた中古でしたら、ヘッド部分にカスが詰まっているとか?
感熱ロール紙でない、とか?ロール紙の向きも再度確認を。
ドライバはちゃんと認識されていますか?
「デバイスとプリンター」の一覧に「TM-T88IV」が出ていますか?

取り急ぎここまで。
続報をお待ちいたします。(u´ω`)



f(休憩中)

リンク

2015/9/2(Wed) 14:49:11|NO.71251

こちら
http://www.epson.jp/products/back/hyou/sd/tmt884.htm
に拠ると「TM-T884」は「RS-232Cシリアルインターフェイス」

こちら
http://www.technoveins.co.jp/products/posprinter/tmt884.htm
に拠ると「TM-T884」は「RS232Cシリアル(D-Sub 25Pinメス)」

と成っていますがUSBでの接続なのですか?

念の為ですが「感熱紙(サーマル紙)」を使っていますか?



可憐

リンク

2015/9/2(Wed) 14:50:25|NO.71252

(´ω`)様

そうなんです、なんと白紙が出てきてしまいました!!
と、先程EPSON様にお問い合わせして見たところ
感熱ロール紙ではない可能性が高いとのことでした。
(プリンター到着時にはロール紙同梱ではありませんでしたので、前分からず購入してしまったロール紙をいれていた⬅これが原因っぽいです。)
ドライバに関しては問題ないはずです
と言うのもBitblt方式ではなくエスケープシーケンスを送る方式レスNO.71094
のリンク先にあるソースコードをそのまま実行してみるとレシートプリンターの方に反応が出ました。
(勿論印字されず白紙の状態で。。)
『デバイスとプリンター』の一覧にも『TM-T88IV』が出ています。

と、今確認したいのですが、業務中で帰宅してから確認してみようと思います。



可憐

リンク

2015/9/2(Wed) 14:58:49|NO.71253

多分『TM-T884』には沢山の接続方法があるんだと思うんですが
自分のはUSBで間違いないみたいです

https://gyazo.com/e4162ed4adba26bcf320c61695ffc0eb

家に一つ感熱紙あったはずなので帰宅して試してみます!



f(休憩中)

リンク

2015/9/2(Wed) 15:08:02|NO.71254

恐らく「TM-T88IV」がシリーズ名で、正しい型番は「TMT884U481」なんでね。
まあ、動いてる様子ならとりあえずは型番云々は良いか。

手元のロール紙が感熱紙か確認するだけならライターか何かで炙ってみるという手も。
感熱紙なら黒く染まります。


…火事にはご注意を。



(´ω`)

リンク

2015/9/2(Wed) 15:35:48|NO.71255

おお、何とか事態が好転しそうなふいんき。(´ω`)

感熱ロール紙ですが、ご購入時は新品が超おすすめ。
管理の悪い場所で放置されていたら、紙が劣化してる可能性があります。
例えば、車のダッシュボードに置いてたレシートの印刷が薄くなってる現象がそれです。

引き続き、ご報告をお待ち申し上げます。



可憐

リンク

2015/9/2(Wed) 20:58:47|NO.71268

先程帰宅してロール紙を変えた所見事印字されました!!
が、日本語になると文字化けするみたいです。
後の問題点として自動カットの命令も送らなければならないという課題がありますが
どういう風にすればいいのでしょう。

ちなみに引用させて頂いたソースを使わせて頂きました!


#uselib "winspool.drv" #func GetDefaultPrinterA "GetDefaultPrinterA" sptr,sptr #func OpenPrinterA "OpenPrinterA" sptr,sptr,sptr #func ClosePrinter "ClosePrinter" sptr #func StartDocPrinterA "StartDocPrinterA" sptr,sptr,sptr #func StartPagePrinter "StartPagePrinter" sptr #func WritePrinter "WritePrinter" sptr,sptr,sptr,sptr #func EndPagePrinter "EndPagePrinter" sptr #func EndDocPrinter "EndDocPrinter" sptr sdim ss xx = 260 GetDefaultPrinterA varptr(ss),varptr(xx) :mes ss OpenPrinterA varptr(ss),varptr(hh),0 :mes hh ss = "hoge" nn = varptr(ss),0,0 StartDocPrinterA hh,1,varptr(nn) :mes stat ;spool StartPagePrinter hh :mes stat ss = "印字テスト\n" WritePrinter hh,varptr(ss),strlen(ss),varptr(ii) :mes stat :mes ii EndPagePrinter hh :mes stat EndDocPrinter hh :mes stat ClosePrinter hh :mes stat



可憐

リンク

2015/9/2(Wed) 22:10:44|NO.71274

あれから色々とフォントを変えたりしましたが
文字化けも治りませんでした。

ですが、前何処かで拾ってきたソースをそのまま使ってみると
紙の送り出し、印字、カットまで全てやってくれました・・・が
文字がかなり汚いです

ちなみに汚い方で印字したものが下記のソースになります(99.9%コピペで申し訳ない・・・)


/* USBとプリンタを接続してから起動 */ #uselib "comdlg32.DLL" #func global PrintDlg "PrintDlgA" var #func global CommDlgExtendedError "CommDlgExtendedError" #uselib "gdi32.dll" #func global SetMapMode "SetMapMode" int,int #func global SetWindowOrgEx "SetWindowOrgEx" int,int,int,nullptr #func global SetViewportOrgEx "SetViewportOrgEx" int,int,int,nullptr #func global SetWindowExtEx "SetWindowExtEx" int,int,int,nullptr #func global SetViewportExtEx "SetViewportExtEx" int,int,int,nullptr #func global ScaleViewportExtEx "ScaleViewportExtEx" int,int,int,int,int,nullptr #func global StartDoc "StartDocA" int,var #func global StartPage "StartPage" int #func global BitBlt "BitBlt" int,int,int,int,int,int,int,int,int #func global EndPage "EndPage" int #func global EndDoc "EndDoc" int #cfunc global GetDeviceCaps "GetDeviceCaps" int,int #func global DeleteDC "DeleteDC" int ;----------------------------------------------------------------------------------- #module #deffunc img_prt str docname,int v,int v3 mref bm,96+v : mref stt,64:mref ref,65 #define ctype MAKEDWORD(%1=0,%2=0) (%2<<16)|%1 ;//PRINTDLG構造体 ;// 最初の MAKEWORDは何ページ目〜何ページ目のデフォルト値 ;// 次のMAKEWORDは文書が何ページ目から何ページ目まであるか ;// (ユーザーがこれを超えて指定するとエラーが出る) ;// その他は自分で PRINTDLG をgoogleして意味を調べること。 dim pd,17 : pd=66, hWnd, 0,0, 0, $100|$100000|4, MAKEDWORD(1,1),MAKEDWORD(1,1),1 PrintDlg pd ; プリント設定ダイアログを出す if stat=0{ CommDlgExtendedError if stat!0{ ref="エラーが発生しました" if stat=$1004{ref="デバイス ドライバのロードに失敗しました"} if stat=$1007{ref="デバイス ドライバが見つかりません"} if stat=$1008{ref="デフォルトのプリンタが見つかりません"} stt=-1:return }else{ ref="キャンセルされました":stt=0:return } } ;// ダイアログが閉じられてなおかつエラーしていないとき↓ PrinterHDC = pd.4 ;// プリンタデバイスコンテキスト DisplayHDC = bm.4 ;// ディスプレイ(コピー元)デバイスコンテキスト DisplaySzX = bm.1 ;// サイズX,Y (ピクセル) DisplaySzY = bm.2 prtx = GetDeviceCaps(PrinterHDC,8) ;// プリンタDCの幅・高さ取得 prty = GetDeviceCaps(PrinterHDC,10) prtx.1=GetDeviceCaps(PrinterHDC,88);// プリンタDCの解像度取得 prty.1=GetDeviceCaps(PrinterHDC,90) prtx.2=GetDeviceCaps(DisplayHDC,88);// 画像の縦横解像度取得 prty.2=GetDeviceCaps(DisplayHDC,90) ;::::::::::ここからプリンタに情報を渡す作業。 SetMapMode PrinterHDC ,7 SetWindowOrgEx PrinterHDC, 0,0 SetViewportOrgEx PrinterHDC, 0,0 SetWindowExtEx PrinterHDC, DisplaySzX,DisplaySzY if v3=0 { SetViewportExtEx PrinterHDC, DisplaySzX,DisplaySzY ScaleViewportExtEx PrinterHDC, prtx.1, prtx.2, prty.1, prty.2 } else { SetViewportExtEx PrinterHDC, prtx,prty } dim dci,5:vDOCNAME = DOCNAME:dci = 20, varptr(vDOCNAME) ;// DOCINFO構造体 prm=pd.4; プリンタDCに転送開始 StartDoc PrinterHDC, dci if stat<0 { DeleteDC PrinterHDC : stt = -1 : ref="エラーが発生しました" } StartPage PrinterHDC ;// PrinterHDC に対してAPI描画する。 BitBlt PrinterHDC ,0,0,DisplaySzX,DisplaySzY, DisplayHDC, 0,0, $CC0020 EndPage PrinterHDC EndDoc PrinterHDC DeleteDC PrinterHDC : stt = 1 return #global buffer 0,300,600,,0,0 font "",15 mes "1234123412341234\n1234123412341234\n1234123412341234\n1234123412341234\n1234123412341234\n1234123412341234\n" img_prt "",0 </@re>

https://gyazo.com/83b98ae99d163c298ea46e1d6aea60aa




toto

リンク

2015/9/4(Fri) 01:52:09|NO.71303

>日本語になると文字化けするみたいです。
WritePrinterはプリンタに直接コマンドを送る命令なのでESC/Pに従ったコマンドを送らないとダメだと思います。
>文字がかなり汚いです
画像イメージを印刷するのでその辺はプリンタに依存すると思います。
BitBltでなくてTextOutならプリンタのフォントを使ってきれいに印刷してくれるかもしれないです。



(´ω`)

リンク

2015/9/4(Fri) 09:46:55|NO.71304

印字できた方のソースはBitbltで画面イメージを直に送る方式ですね。
私もこの方法で印刷しています。小さい文字を印字するのでなければ、実用レベルの
精細さで出てくるし。(´ω`)

ESC/P(正確にはESC/POS)については、EPSONさんが資料の配布を行っています。
ただし、最新のコマンドマニュアルはEPSONさんと機密保持契約を取り交わした後に
もらえるモノですので、もし本気でESC/POSコマンドで制御する気でしたら
まずはEPSONさんの↓にゴー。
http://partner.epson.jp/support/details/contents038/

金銭は一切かかりません。
もらえるモンはもらっとかにゃ。( ゚ω゚ )



暇人

リンク

2015/9/4(Fri) 20:39:03|NO.71319

>文字がかなり汚いです
元データ側のdpiが低いからだろう
元が96だとしたらプリンタ側が180みたいなので
1.875倍と言う半端な拡大されて汚くなる

> prtx.2=GetDeviceCaps(DisplayHDC,88);// 画像の縦横解像度取得
> prty.2=GetDeviceCaps(DisplayHDC,90)
これをプリタ側と同じ値にすれば画面表示と同等の画像になるんじゃないかな

それか
> SetWindowExtEx PrinterHDC, DisplaySzX,DisplaySzY

> SetWindowExtEx PrinterHDC, (double(prtx(1))/prtx(2))*DisplaySzX, (double(prty(1))/prty(2))*DisplaySzY
にしてみる
とにかく半端に拡大縮小されないように設定すれば良いんじゃないかな

実際にプリンタでは試してなけど・・・



可憐

リンク

2015/9/5(Sat) 00:07:32|NO.71333

toto 様 (´ω`) 様

BitBltでなくてTextOutですか・・・自分には未知の領域です。。(笑)
ESC/POSコマンドで制御するのが一般なんでしょうが、自分の技量からして
厳しいのがあるので、とりあえずBitBltでも満足してますし
これでもまあまあフォントによって綺麗な印字ができるので大丈夫そうです!
余裕ができたらESC/POSコマンドで制御してもっと綺麗な印字をしてみたいですね。

暇人 様

どちらともしてみましたが

> prtx.2=GetDeviceCaps(DisplayHDC,88);// 画像の縦横解像度取得
> prty.2=GetDeviceCaps(DisplayHDC,90)
> これをプリタ側と同じ値にすれば画面表示と同等の画像になるんじゃないかな

これを実行しても文字の綺麗さに変化はなく


> それか
> SetWindowExtEx PrinterHDC, DisplaySzX,DisplaySzY
> を
> SetWindowExtEx PrinterHDC, (double(prtx(1))/prtx(2))*DisplaySzX, (double(prty(1))/prty(2))*DisplaySzY
> にしてみる
> とにかく半端に拡大縮小されないように設定すれば良いんじゃないかな

これをしたら設定文字より小さく印字されました

たぶん、自分が今やってるのが一番綺麗なんじゃないんでしょうか・・・分かりませんが。
それにしても外部機器の制御は初めてだったので色々と勉強になりました。とても難しかったです

色々教えて下さった皆様ありがとうございました!

後は、近い未来カスタマーディスプレイとも連動してみたいです..w



ONION software Copyright 1997-2021(c) All rights reserved.