RS232與ESC/pos
串列傳輸&並列傳輸
pos周邊大部分都是串列傳輸(Serial)和並列傳輸(LPT),一般我們會稱呼為RS232、RS485主要是早期用來溝通硬體設備的語言,至今依舊是溝通硬體的主要方式。在pos中最常串接的發票機、熱感機、磅秤機、條碼掃描器、客戶顯示器都是利用RS232 或 LPT來達到溝通的動作。主要是透過WINDOW你要設備間互通S提供的API來操作
使用RS232一定要了解RS232的
鮑率(Baud Rate): 300, 1200, 2400, 9600, 19200, 115200 等bit/s
同位檢查(Parity Check): 奇同位(Odd)、偶同位(Even)、不減查同位(None)
資料位元(Data Bit) :5、6、7、8 bit/s。
停止位元(Stop Bit): 1 、 1.5 、 2 bit/s。
特別強調這四點的原因是因為。你要設備間互通。這四組一定要一致才會收的到正確的資訊。
台灣設備一般都是9600,n,8,1 or 9600,E,7,1
這是種周邊的語言。舉凡發票機熱感機客戶顯示器都是透過這標準的ESC/pos指令來完成動作由EPSON定義。在編寫使用此指令的設備時,不需要使用到最新的技術文章。要找到相符的版本級指令集較好。[文件]
1.1 印紙本發票特別注意事項[WP-T810例外]
- 1. 在QRCODE部分進PAGMODE模式處理
- 2. PAGEMODE須定義長度及大小
- 3. 定義完畢後須先定義QRCODE的列印位置
- 4. 再送QRCODE
- 5. 如需平行列印兩顆以上QRCODE 必須在離開PAGEMODE之前都先定義好
- 6. 離開PAGEMOD->STANDMODE 再繼續列印接續資料。
- 1. 一般標準BARCODE只能印17個字元
- 2. 若要提高只能縮小BARCODE的列印寬度及長度。相對的會降低掃描能力
1.2 印BARCODE注意事項
- 1. 提供RS232 送收指令的元件[磅秤機整合]、[發票機整合]、[熱感機整合]、[客戶顯示器整合]
- 2. 信用卡元件
- 3. 電子發票的列印
信用卡UML
1. 利用RS232送命令觸發卡機。
- 3. 卡機回傳卡號pos判斷[授權碼]&[驗證碼]。
RS232元件使用
|
TCommDev– [RS232元件底層屬性]
|
|
參數
|
屬性
|
說明
|
|
FBaudRate
|
TBaudRateType
|
鮑率 Ex. 9600
|
|
FDataBits
|
TDataBitsType
|
資料位元 Ex. 8
|
|
FParityCheck
|
TparityCheckType
|
位元檢查 Ex. None
|
|
FStopBits
|
TStopBitsType
|
停止位元 Ex. _1
|
|
FDevicePort
|
TDevicePort
|
連接埠 Ex. COM1
|
|
FCheckDSR
|
Boolean
|
設備告訴電腦已準備好(過電)
|
|
FDelay
|
integer
|
下一筆指令間延遲時間
|
發票機、熱感機元件
|
TinvPrinter. SendString – [直接送字串給周邊]
|
|
參數
|
屬性
|
說明
|
|
SendString
|
AnsiString
|
預列印的字串
|
|
回傳
|
屬性
|
說明
|
|
Result
|
Boolean
|
True 指令已送出
False連線失敗
|
|
TinvPrinter. SendCOMString – [送ESC/pos指令給周邊]
|
|
參數
|
屬性
|
說明
|
|
SendString
|
AnsiString
|
預送出的ESC/pos指令
|
|
回傳
|
屬性
|
說明
|
|
Result
|
Boolean
|
True 指令已送出
False連線失敗
|
|
TinvPrinter. OpenCashDrawer – [開錢櫃]
|
|
回傳
|
屬性
|
說明
|
|
Result
|
Boolean
|
True 指令已送出
False連線失敗
|
|
TinvPrinter. PrintBarcode – [印barcode]
|
|
參數
|
屬性
|
說明
|
|
xBarcode
|
AnsiString
|
要列印的BARCODE內容
|
|
回傳
|
屬性
|
說明
|
|
Result
|
Boolean
|
True 指令已送出
False連線失敗
|
|
TinvPrinter. PrintQRcode – [印QRCODE]
|
|
參數
|
屬性
|
說明
|
|
xBarcode
|
AnsiString
|
要列印的QRCODE內容
|
|
回傳
|
屬性
|
說明
|
|
Result
|
Boolean
|
True 指令已送出
False連線失敗
|
|
TinvPrinter. EndPageMode– [結束PageMode]
|
|
因Pagemode每一種機型都不相同。故此沒做成祖先
|
信用卡元件
|
TEDCCom. SendToEDC – [送]
|
|
參數
|
屬性
|
說明
|
|
TransType
|
AnsiString
|
交易型態 [參考規格文件]
|
|
Payment
|
AnsiString
|
交易金額
|
|
StoreNo
|
AnsiString
|
店號
|
|
posNo
|
AnsiString
|
機號
|
|
TrnNo
|
AnsiString
|
交易序號
|
|
回傳pos
|
屬性
|
說明
|
|
Result
|
Boolean
|
True 指令已送出
False連線失敗
|
|
TEDCCom. SendToEDC2 – [Call廠商提供的EXE檔]
|
|
參數
|
屬性
|
說明
|
|
TransType
|
AnsiString
|
交易型態 [參考規格文件]
|
|
Payment
|
AnsiString
|
交易金額
|
|
StoreNo
|
AnsiString
|
店號
|
|
posNo
|
AnsiString
|
機號
|
|
TrnNo
|
AnsiString
|
交易序號
|
|
回傳
|
屬性
|
說明
|
|
Result
|
Boolean
|
True INI已寫入
False連線失敗
|
信用卡通訊過程
Time out:60 seconds or more before sending response block.
|
ECR
|
Route
|
AS320 EDC
|
|
REQUEST message
|
è
|
|
|
|
ç
|
<ACK> <ACK>
|
|
(ECR is waiting for response…)
|
|
|
(EDC is in processing…)
|
|
|
ç
|
RESPONSE message
|
|
<ACK><ACK>
|
è
|
(DONE)
|
REQUEST Data 144 bytes 固定長度
|
項
|
欄位名稱
|
長度
|
位置
|
備註
|
|
1
|
Trans Type
|
2
|
1
|
交易別
|
|
2
|
Host ID
|
2
|
3
|
銀行別
|
|
3
|
Receipt No
|
6
|
5
|
調閱編號
|
|
4
|
Card Number
|
19
|
11
|
信用卡卡號(左靠右補空白)
|
|
5
|
Expiration Date
|
4
|
30
|
信用卡有效期(以****取代)
|
|
6
|
Trans Amount
|
12 pos
|
34
|
交易金額
|
|
7
|
Trans Date
|
6
|
46
|
交易日期
|
|
8
|
Trans Time
|
6
|
52
|
交易時間
|
|
9
|
Approval Code
|
9
|
58
|
授權碼(左靠右補空白)
|
|
10
|
ECR Response Code
|
4
|
67
|
通訊回應碼
|
|
11
|
Terminal ID
|
8
|
71
|
端末機代號
|
|
12
|
Reference No
|
12
|
79
|
銀行交易序號
|
|
13
|
Store ID
|
16
|
91
|
櫃號(左靠右補空白)
|
|
14
|
Amount1
|
12
|
107
|
金額1
|
|
15
|
Amount2
|
12
|
119
|
金額2
|
|
16
|
Amount3
|
12
|
131
|
金額3
|
|
17
|
Installment Period
|
2
|
143
|
期數
|