通訊協定
- RS232序列資料通訊介面
- 傳輸模式:非同步傳輸 (Asynchronous Serial Communication)
- 傳輸鮑率 (Baud Rate):115200 bps
- 資料位元 (Data Bits):8 Bits
- 同位檢查 (Parity):None (無同位檢查)
- 停止位 (Stop Bits):1 Bits
資料結構與校驗機制
收銀機(ECR)與刷卡機(EDC)之間傳輸的所有資料封包,均需以標準 ASCII 字元包裹,交易資料格式
<STX> [DATA (600 Byte)] <ETX> <LRC>
<STX>:起始字元,0x02[DATA]:交易資料,共 600 Byte<ETX>:結束字元,0x03<LRC>:檢查碼- 計算規則:
從 DATA 的第 1 個 Byte 開始,逐 Byte 與後續位元組執行互斥或
(Exclusive-Or/XOR)運算,直到並包含<ETX>。 - 注意事項:
計算範圍不包含<STX>。
- 計算規則:
通訊內容
| Request (ECR) | Response (EDC) | |
| STXDATAETXLRC | >> | |
| << | ACKACK | |
| 等待處理中(Timeout >60秒) | 刷磁條卡,插晶片或感應信用卡 | |
| << | STXDATAETXLRC | |
| ACKACK | >> |
-
<ACK>(0x06): 表示成功收到共 603 Byte 的資料,並且需傳送兩個<ACK>。 -
<NAK>(0x15): 表示資料接收不完全或資料校驗錯誤,並且需傳送兩個<NAK>。 - Timeout: 交易逾時時間建議設定為 60~120 秒。
通訊內容說明
STX byte
- ASCII字符集中的控制字符STX(Start of Text)
- 十六進制(Hexadecimal)值為 0x02
byte STX = 0x02 ;
DATA byte
- 交易電文內容,長度總共600字元。
ETX byte
- ASCII字符集中的控制字符ETX(End of Text)
- 十六進制(Hexadecimal)值為0x03
byte ETX = 0x03 ;
LRC byte 電文檢查碼
- 將LRC初始值=0跟Data(請求電文內容)+ETX(請求電文結束內容)進行XOR位元運算的結果
// 計算 LRC
byte LRC = 0; // LRC 的初始值
foreach (byte b in (dataBytes))
{
LRC ^= b; // 進行 XOR 運算
}
LRC ^= ETX; // 進行 XOR 運算
ACK byte 確認回應
- 由刷卡機產生回傳
- ASCII字符集中的控制字符ACK,確認收到請求回應
- 十六進制(Hexadecimal)值為0x06
byte ACK = 0x06 ;
通訊流程
- 正常情況
注意事項:
- 刷卡機需在主畫面才能接收POS指令
- POS等待處理中 (timeout總秒數至少要60秒逾時)
- 非正常情況
Request錯誤,通常發生時機:
- LRC 錯誤
- 資料長度錯誤