有一臺收銀機,顧客顯示屏的控制命令是如圖,如何在DELPHI中呼叫來控制顯示金額資訊?
如圖:
uj5u.com熱心網友回復:
手冊都給了,那就可以了。
原理是向串口發送命令就可以了。
uj5u.com熱心網友回復:
參考 1 樓 SmallHand 的回復: 手冊都給了,那就可以了。
原理是向串口發送命令就可以了。
感謝,請寫個例子示下,不好意思真是新手
uj5u.com熱心網友回復:
跟廠家要demo
uj5u.com熱心網友回復:
把命令寫成字串,把字串發給串口就行了
var
ComStr:string;
begin
ComStr := Chr(27) + Chr(12);//清屏
//把ComStr給com口即可,具體發送方式有API也有com三方控制元件,自己可以搜一搜
end;
uj5u.com熱心網友回復:
procedure TForm26.Button2Click(Sender: TObject);
var
mystr: string;
begin
{
3. ESC @初始化命令
ASCII碼 格式:ESC @
十進制 格式:[027][064]
十六進制 格式:[1BH][40H]
說明:恢復到上電開機時的狀態。
4. CLR清屏命令
ASCII碼 格式:CLR
十進制 格式:[012]
十六進制 格式:[0CH]
說明:清除螢屏上的所有字符。
5. ESC Q A d1d2d3…dn CR送顯示資料命令
ASCII碼 格式:ESC Q A d1d2d3…dn CR
十進制格式:[027][081][065]d1d2d3…dn[013] 48<=dn<=57或dn=45或dn=46
十六進制 格式:[1BH][51H][41H]d1d2d3…dn[0DH]
30H<=dn<=39H或dn=2DH或dn=2EH
說明:a.執行該命令時,會以覆寫模式送要顯示的資料,這樣就不需要在每次送顯
示資料前都去執行CAN清除游標行命令了。
b.顯示的d1…dn沒有小數點時1<=n<=8。
c.顯示的d1…dn有小數點時1<=n<=15(8位數值+7位小數點)。
d.顯示的內容可用CLR或CAN命令清除。
6. ESC s n設定“單價”、“總計”、“收款”、“找零”字符顯示狀態命令
ASCII碼 格式:ESC s n 0<=n<=4
十進制 格式:[027][115] n 48<=n<=52
十六進制 格式:[1BH][73H] n 30H<=n<=34H
說明:(1)當 n=0,四種燈 全暗。
(2)當 n=1,“單價”燈 亮,其它三種 暗。
(3)當 n=2,“總計”燈 亮,其它三種 暗。
(4)當 n=3,“收款”燈 亮。其它三種 暗。
(5)當 n=4,“找零”燈 亮。其它三種 暗。
// com_send(Pchar(PDStr),Length(PDStr))
}
//顯示合計
myStr := Chr(27) + Chr(115) + '2';
try
self.CnRS2322.WriteCommData(pchar(mystr), Length(myStr));
sleep(30);
except
end;
//顯示金額
mystr := floattostr(self.DBGridEh1.Columns[10].Footers[0].SumValue);
if trim(mystr) = trim(self.Edit2.Text) then exit;
self.Edit2.Text := trim(mystr);
//if self.DBGridEh1.Columns[10].Footers[0].SumValue=https://bbs.csdn.net/topics/0 then mystr:='';
//mystr:=' '+trim(mystr);
//mystr:=rightstr(mystr,8);
myStr := Chr(27) + Chr(81) + Chr(65) + mystr + Chr(13);
try
self.CnRS2322.WriteCommData(pchar(mystr), Length(myStr));
sleep(30);
except
end;
end;
以前專案中的應用,可供參考一下。。。。
uj5u.com熱心網友回復:
參考 5 樓 babydog01 的回復:
procedure TForm26.Button2Click(Sender: TObject);
var
mystr: string;
begin
{
3. ESC @初始化命令
ASCII碼 格式:ESC @
十進制 格式:[027][064]
十六進制 格式:[1BH][40H]
說明:恢復到上電開機時的狀態。
4. CLR清屏命令
ASCII碼 格式:CLR
十進制 格式:[012]
十六進制 格式:[0CH]
說明:清除螢屏上的所有字符。
5. ESC Q A d1d2d3…dn CR送顯示資料命令
ASCII碼 格式:ESC Q A d1d2d3…dn CR
十進制格式:[027][081][065]d1d2d3…dn[013] 48<=dn<=57或dn=45或dn=46
十六進制 格式:[1BH][51H][41H]d1d2d3…dn[0DH]
30H<=dn<=39H或dn=2DH或dn=2EH
說明:a.執行該命令時,會以覆寫模式送要顯示的資料,這樣就不需要在每次送顯
示資料前都去執行CAN清除游標行命令了。
b.顯示的d1…dn沒有小數點時1<=n<=8。
c.顯示的d1…dn有小數點時1<=n<=15(8位數值+7位小數點)。
d.顯示的內容可用CLR或CAN命令清除。
6. ESC s n設定“單價”、“總計”、“收款”、“找零”字符顯示狀態命令
ASCII碼 格式:ESC s n 0<=n<=4
十進制 格式:[027][115] n 48<=n<=52
十六進制 格式:[1BH][73H] n 30H<=n<=34H
說明:(1)當 n=0,四種燈 全暗。
(2)當 n=1,“單價”燈 亮,其它三種 暗。
(3)當 n=2,“總計”燈 亮,其它三種 暗。
(4)當 n=3,“收款”燈 亮。其它三種 暗。
(5)當 n=4,“找零”燈 亮。其它三種 暗。
// com_send(Pchar(PDStr),Length(PDStr))
}
//顯示合計
myStr := Chr(27) + Chr(115) + '2';
try
self.CnRS2322.WriteCommData(pchar(mystr), Length(myStr));
sleep(30);
except
end;
//顯示金額
mystr := floattostr(self.DBGridEh1.Columns[10].Footers[0].SumValue);
if trim(mystr) = trim(self.Edit2.Text) then exit;
self.Edit2.Text := trim(mystr);
//if self.DBGridEh1.Columns[10].Footers[0].SumValue=https://bbs.csdn.net/topics/0 then mystr:='';
//mystr:=' '+trim(mystr);
//mystr:=rightstr(mystr,8);
myStr := Chr(27) + Chr(81) + Chr(65) + mystr + Chr(13);
try
self.CnRS2322.WriteCommData(pchar(mystr), Length(myStr));
sleep(30);
except
end;
end;
以前專案中的應用,可供參考一下。。。。
感謝!
但是“self.CnRS2322”這個控制元件從那里找呢?
uj5u.com熱心網友回復:
我用的是delphi 10
uj5u.com熱心網友回復:
參考 5 樓 babydog01 的回復:
procedure TForm26.Button2Click(Sender: TObject);
var
mystr: string;
begin
{
3. ESC @初始化命令
ASCII碼 格式:ESC @
十進制 格式:[027][064]
十六進制 格式:[1BH][40H]
說明:恢復到上電開機時的狀態。
4. CLR清屏命令
ASCII碼 格式:CLR
十進制 格式:[012]
十六進制 格式:[0CH]
說明:清除螢屏上的所有字符。
5. ESC Q A d1d2d3…dn CR送顯示資料命令
ASCII碼 格式:ESC Q A d1d2d3…dn CR
十進制格式:[027][081][065]d1d2d3…dn[013] 48<=dn<=57或dn=45或dn=46
十六進制 格式:[1BH][51H][41H]d1d2d3…dn[0DH]
30H<=dn<=39H或dn=2DH或dn=2EH
說明:a.執行該命令時,會以覆寫模式送要顯示的資料,這樣就不需要在每次送顯
示資料前都去執行CAN清除游標行命令了。
b.顯示的d1…dn沒有小數點時1<=n<=8。
c.顯示的d1…dn有小數點時1<=n<=15(8位數值+7位小數點)。
d.顯示的內容可用CLR或CAN命令清除。
6. ESC s n設定“單價”、“總計”、“收款”、“找零”字符顯示狀態命令
ASCII碼 格式:ESC s n 0<=n<=4
十進制 格式:[027][115] n 48<=n<=52
十六進制 格式:[1BH][73H] n 30H<=n<=34H
說明:(1)當 n=0,四種燈 全暗。
(2)當 n=1,“單價”燈 亮,其它三種 暗。
(3)當 n=2,“總計”燈 亮,其它三種 暗。
(4)當 n=3,“收款”燈 亮。其它三種 暗。
(5)當 n=4,“找零”燈 亮。其它三種 暗。
// com_send(Pchar(PDStr),Length(PDStr))
}
//顯示合計
myStr := Chr(27) + Chr(115) + '2';
try
self.CnRS2322.WriteCommData(pchar(mystr), Length(myStr));
sleep(30);
except
end;
//顯示金額
mystr := floattostr(self.DBGridEh1.Columns[10].Footers[0].SumValue);
if trim(mystr) = trim(self.Edit2.Text) then exit;
self.Edit2.Text := trim(mystr);
//if self.DBGridEh1.Columns[10].Footers[0].SumValue=https://bbs.csdn.net/topics/0 then mystr:='';
//mystr:=' '+trim(mystr);
//mystr:=rightstr(mystr,8);
myStr := Chr(27) + Chr(81) + Chr(65) + mystr + Chr(13);
try
self.CnRS2322.WriteCommData(pchar(mystr), Length(myStr));
sleep(30);
except
end;
end;
以前專案中的應用,可供參考一下。。。。
uj5u.com熱心網友回復:
那個串口控制元件,CNPACK中有,用SPCOMM也可以。
uj5u.com熱心網友回復:
http://www.cnpack.org/index.php?lang=zh-cn
國產免費控制元件,推薦使用。
uj5u.com熱心網友回復:
cport也可很好用啊。
就是write---發送 例:Write(buf, size);
read---讀取 例:Read(buf, size);
然后注意一下讀取超時,把它封裝到一個執行緒里就可以了。讀取結果可以用sendmessage()從執行緒中向主程式發送。
uj5u.com熱心網友回復:
要是不明白的話,下個串口工具,向設備試發一下資料就明白了。很簡單吧。
uj5u.com熱心網友回復:
你的哪個說明書寫的很詳細啊,什么ASCII碼,十進制格式,十六進制都給你提供了,很方便除錯啊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/131915.html
標籤:語言基礎/算法/系統設計
上一篇:從零開始的SpringBoot前后端分離入門級專案(六)
下一篇:作業10年后,再看String s = new String(“xyz“) 創建了幾個物件?