ロゴ:EPSON
ロゴ:よくあるご質問(FAQ)

製品別
質問別

URLをクリップボードにコピーしました
シェア用URL:https://faq2.epson.jp/web/Detail.aspx?id=31210
  FAQ番号:31210
用紙切れ状態の取得方法<EPSON OPOS ADK シリーズ>
TMプリンターの用紙が無くなったとき、プログラムから検出する方法を教えてください。
 
 

TMプリンターには、プリンター内部に用紙が無い、用紙残量が少ない状態などを判別する機構が搭載されています。
ここではサーマルプリンターの用紙エンド検出(用紙有無判別)、用紙ニアエンド検出(用紙残量判別)を例に説明いたします。


ハードウェアの仕様上、TM-T20, TM-T20II は用紙エンドを検出できますが、用紙ニアエンドは検出できません。

 

TMプリンターにて、用紙エンド検出または、用紙ニアエンド検出が判別されたとき、プリンターは状態の変化(ステータス)を通知します。
EPSON OPOS ADK でこのステータスを取得する方法は、以下のとおりです。

 
  1. EPSON OPOS ADK OLE版
  2. EPSON OPOS ADK .NET版
 
用紙切れ状態の取得方法
1.

プリンターの用紙切れ状態を知るには、メソッド実行時に発生するエラーを取得するか、StatusUpdateEvent によって自動的に通知されるステータスを取得します。

メソッド実行時に発生するエラーを取得する方法は、ResultCode / ResultCodeExtended の値を取得することです。

PrintNormal メソッド 実行時に用紙が無いためにエラーが発生し、そのエラーを取得する例です。

例)Visual C++ で行う場合
// レシート用紙切れ時の ResultCodeExtended の値
// ResultCodeExtended = OPOS_EPTR_REC_EMPTY
//
// ジャーナルの場合:
// ResultCodeExtended = OPOS_EPTR_JRN_EMPTY
//
// スリップの場合:
// ResultCodeExtended = OPOS_EPTR_SLP_EMPTY
//
// ResultCode の値は OPOS_E_EXTENDED になります。

void CPrinterDlg::OnBtnOut1() 
{

// Test printing
	m_Ptr1.PrintNormal( PTR_S_RECEIPT, "Hello, World.\n");
	if( m_Ptr1.GetResultCode() != OPOS_SUCCESS ) {
		sRC.Format("%ld", m_Ptr1.GetResultCode());
		sRCE.Format("%ld", m_Ptr1.GetResultCodeExtended());
		MessageBox(
			"Cannot use a POS Printer\nResultCode = " + sRC
			 + "\nResultCodeExtended = " + sRCE );
		return;
	}
}
 

また、プリンターから自動的に通知されるステータスを取得するには、StatusUpdateEvent で次のようなイベント処理をつくります。

StatusUpdateEvent は、プリンターの状態が変化したときにイベント処理として実行されます。

例)Visual C++ で行う場合
void CPrinterDlg::OnStatusUpdateEventPosprinter1(long Data) 
{
   //イベント別にメッセージを表示する例
   switch( Data )
   {
   // プリンターカバーが開いた状態
   case PTR_SUE_COVER_OPEN:
   	// メッセージ表示処理~省略
   	break;
   
   // レシート用紙なしの状態
   case PTR_SUE_REC_EMPTY:
   	// メッセージ表示処理~省略
   	break;

   // レシート用紙あり、ただし残量が少ない状態
   case PTR_SUE_REC_NEAREMPTY:
   	// メッセージ表示処理~省略
   	break;

   // プリンターカバーが閉じた状態
   case PTR_SUE_COVER_OK:

   // レシート用紙ありの状態
   case PTR_SUE_REC_PAPEROK:

   }
}
2.

プリンターの用紙切れ状態を知るには、メソッド実行時に発生するエラーを取得するか、StatusUpdateEvent によって自動的に通知されるステータスを取得します。

メソッド実行時に発生するエラーを取得する方法は、ErrorCode / ErrorCodeExtended の値を取得することです。

PrintNormal メソッド 実行時に用紙が無いためにエラーが発生し、そのエラーを取得する例です。

例)Visual C# で行う場合
// レシート用紙切れ時の ErrorCodeExtended の値
// ErrorCodeExtended = EPTR_REC_EMPTY
//
// ジャーナルの場合:
// ErrorCodeExtended = EPTR_JRN_EMPTY
//
// スリップの場合:
// ErrorCodeExtended = EPTR_SLP_EMPTY
//
// ErrorCode の値は Extended になります。

private void btnPrint_Click(object sender, System.EventArgs e)
{

// Test printing
   try
   {
       //文字列を印刷する為にPrintNormalメソッドを使用
       //[\n]は標準改行コードです。
       m_Printer.PrintNormal(
                PrinterStation.Receipt,
                "Hello OPOS for .Net \n");
   }
   catch (PosControlException ex)
   {
       MessageBox.Show("ErrorCode = " + ex.ErrorCode.ToString() +
           "\nErrorCodeExtended =" + ex.ErrorCodeExtended.ToString() +
           "\n" + ex.Message, "Printer_Sample", 
           MessageBoxButtons.OK, MessageBoxIcon.Warning);
   }
}
 

また、プリンターから自動的に通知されるステータスを取得するには、StatusUpdateEvent で次のようなイベント処理をつくります。

StatusUpdateEvent は、プリンターの状態が変化したときにイベント処理として実行されます。

例)Visual C++ で行う場合
/// StatusUpdateEventハンドラを通知します。
///
protected  void OnStatusUpdateEvent(object source, StatusUpdateEventArgs e)
{
   //プリンタの状態が変化した時、イベントが発生
   switch(e.Status)
   {
   //プリンタのカバーが開いています。
   case PosPrinter.StatusCoverOpen:
   	// メッセージ表示処理~省略
   	break;

   //レシート用紙がありません。
   case PosPrinter.StatusReceiptEmpty:
   	// メッセージ表示処理~省略
   	break;

   //プリンタのカバーが閉じています。
   case PosPrinter.StatusCoverOK:
   	// メッセージ表示処理~省略
   	break;

   //レシート用紙がセットされています。
   case PosPrinter.StatusReceiptPaperOK:

   // レシート用紙あり、ただし残量が少ない状態
   case PosPrinter.StatusReceiptNearEmpty:
   	// メッセージ表示処理~省略
   	break;
   }
}

エラーコード や ステータス の詳細につきましては、OPOS技術協議会から配布されています「OPOS 技術協議会 仕様書」を参照してください。
「OPOS 技術協議会 仕様書」は こちら から参照することができます。

モバイルプリンター TM-P20,TM-P60II
TMシリーズ TM-C100,TM-H5000II,TM-H6000II,TM-H6000III,TM-H6000IV,TM-J2000,TM-J2100,TM-L60II,TM-L90 オートカッターモデル,TM-L90 ピーラーモデル,TM-T20,TM-T20II,TM-T70,TM-T70II,TM-T88III,TM-T88IIIX (ARCX搭載),TM-T88IV,TM-T88V,TM-T90,TM-T90 KP,TM-T90II,TM-U220A,TM-U220B,TM-U220D,TM-U295,TM-U375,TM-U590,TM-U675,TM-U950
FAQ改善アンケート

このページの評価をお聞かせください。〇✖をお選びください。

 

■役に立った
■役に立たなかった