pos机开启钱柜的问题 |
尚未結案
|
minggl
一般會員 發表:4 回覆:11 積分:8 註冊:2002-10-22 發送簡訊給我 |
|
bruce0211
版主 發表:157 回覆:668 積分:279 註冊:2002-06-13 發送簡訊給我 |
應該又是 rs-232 的問題吧
基本上偶是還沒找到Kylix 3 上可用的 ComPort Component
你口不口以告訴偶你是用啥方法寫資料到 rs-232 上滴呀 ?
簡單的 interface 是口以直接用寫檔的方式
把 ComPort 當成一個 file 來做 output
但稍微複雜的裝置需要設定 bps , 同位檢查 , byte 等等 (如 9600,N,8,1)
則無法單存用寫檔方式來控制
等偶找到好用的 ComPort component 偶會再公佈
你也不要藏私喔 ....
|
bruce0211
版主 發表:157 回覆:668 積分:279 註冊:2002-06-13 發送簡訊給我 |
下面是偶找到的一個 rs-232 範例 , 偶還在研究如何寫成 Kylix C++ Muti-thread 版
{ Kylix Delphi 版 讀寫 ComPort 範例 0.此範例完整原始檔案下載位置 ftp://members.aol.com/db1joe/kyserex.zip 1.以檔案觀念讀寫 ComPort 2.使用時要將 /dev/ttyS0 讀寫權限開放 (使用指令 chmod 777 /dev/ttyS0 ) 3.真正的應用上 , 要用多執行緒去不停的讀 ComPort , 此範例用 Timmer 去讀 ComPort } unit comtest1; { 15.05.2001: Funktioniert, fgt jedoch bei jedem Lesevorgang ein Linefeed hinzu. 23.05.2001: fixed } interface uses SysUtils, Types, Classes, Variants, QGraphics, QControls, QForms, QDialogs, QStdCtrls, LibC, QTypes, QExtCtrls; type TForm1 = class(TForm) OpenButton: TButton; CloseButton: TButton; WriteButton: TButton; ReadButton: TButton; Box: TListBox; ReadLabel: TLabel; WriteEdit: TEdit; WritelnButton: TButton; OpenLabel: TLabel; EndButton: TButton; WriteLabel: TLabel; Timer: TTimer; procedure OpenButtonClick(Sender: TObject); procedure CloseButtonClick(Sender: TObject); procedure WriteButtonClick(Sender: TObject); procedure ReadButtonClick(Sender: TObject); procedure WritelnButtonClick(Sender: TObject); procedure EndButtonClick(Sender: TObject); procedure TimerTimer(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } serFileTx, comfd:integer; ss: string; end; var Form1: TForm1; implementation {$R *.xfm} { Button1 intialized the port Button2 Close the port Button3 write the string to the port } {-----開啟 COM1 通訊埠 (重點 !!)---------------------------------------------} procedure TForm1.OpenButtonClick(Sender: TObject); var ios: termios; begin serFileTx:= LibC.Open ('/dev/ttyS0',fmOpenReadWrite or o_nonblock); tcgetattr (serFileTx,ios); cfmakeraw (ios); cfsetospeed (ios, b115200); cfsetispeed (ios,b115200); tcsetattr (serFileTx,tcsanow,ios); OpenLabel.Caption:= IntToStr (serFileTx) end; {-----關掉 COM1 通訊埠 ------------------------------------------------------} procedure TForm1.CloseButtonClick(Sender: TObject); begin fileClose(serFileTx); OpenLabel.Caption:= '' end; {-----寫入資料至 COM1 通訊埠 ------------------------------------------------} procedure TForm1.WriteButtonClick(Sender: TObject); var d:string; resultat: integer; begin d:= WriteEdit.Text; {WriteEdit 只不過是畫面上的一個 Edit 元件 } resultat:= FileWrite (serFileTx, d[1], Length(d)); WriteLabel.Caption:= IntToStr (resultat) end; {-----寫入資料至 COM1 通訊埠 ( 有加 CHR(13) )--------------------------------} procedure TForm1.WritelnButtonClick(Sender: TObject); var d: string; resultat: integer; begin d:= WriteEdit.Text #13; resultat:= FileWrite (serFileTx, d[1], Length(d)); WriteLabel.Caption:= IntToStr (resultat) end; {$O-} {-----讀出 COM1 通訊埠資料 --------------------------------------------------} procedure TForm1.ReadButtonClick(Sender: TObject); var a: array [1..4096] of char; s: string; zaehler, index: integer; begin s:= ''; zaehler:= FileRead (serFileTx, a, sizeof (a)); ReadLabel.Caption:= IntToStr (zaehler); if zaehler > 0 then begin for index:= 1 to zaehler do s:= s a [index]; Box.Items.Text:= s end end; {$O } {-----結束程式 -------------------------------------------------------------} procedure TForm1.EndButtonClick(Sender: TObject); begin Application.Terminate end; {-----計時器(InterVal=100)不停去讀出 COM1 通訊埠資料------------------------} procedure TForm1.TimerTimer(Sender: TObject); begin ReadButtonClick(Sender) end; end. |
bruce0211
版主 發表:157 回覆:668 積分:279 註冊:2002-06-13 發送簡訊給我 |
下面是我找到的兩個比較新的(原作者有一直在維護) Kylix Comport solution
但在 Kylix 3 下好像都不能 Run
若有機會研究,別忘了寫研究報告分享大家
(不是我不想測試,而是公司這半年在趕 case (WIN2K BCB)
偶不好意思在公司玩這些有的沒有的
而在家又沒環境...但我有測過在KYLIX 3 下,安裝都有問題...) synaser.zip
http://www.ararat.cz/synapse/files/synaser.zip NrComm Lib v.5.22
http://www.torry.net/kylix/clx/comp_klx_comms/nrcomm.zip 發表人 - bruce0211 於 2002/11/11 22:07:41
|
minggl
一般會員 發表:4 回覆:11 積分:8 註冊:2002-10-22 發送簡訊給我 |
|
bruce0211
版主 發表:157 回覆:668 積分:279 註冊:2002-06-13 發送簡訊給我 |
|
minggl
一般會員 發表:4 回覆:11 積分:8 註冊:2002-10-22 發送簡訊給我 |
我的问题都已经解决了:
1、因为我的钱柜是连在打印机上的,所以要输出一串开柜指令给打印机,我的做法是先将要打印的内容保存在一memo中,将memo的内容保存为一文本文件(test1.txt)
user libc libc.system('lp /u/test1.txt');
这样钱柜就可以打开了。
2、对于RS-232,把它当做一个文件来用就可以了
比如你要发送一串字符到串口一(ttyS0):
var a:textfile;
begin
assignfile(a,'/dev/ttyS0')
rewrite(a);
writeln(a,'abcdefg');
closefile(a);
end;
这样就可以了,在kylix3中测试通过!
|
bruce0211
版主 發表:157 回覆:668 積分:279 註冊:2002-06-13 發送簡訊給我 |
|
koncon
一般會員 發表:0 回覆:7 積分:1 註冊:2003-01-06 發送簡訊給我 |
|
bruce0211
版主 發表:157 回覆:668 積分:279 註冊:2002-06-13 發送簡訊給我 |
|
koncon
一般會員 發表:0 回覆:7 積分:1 註冊:2003-01-06 發送簡訊給我 |
|
koncon
一般會員 發表:0 回覆:7 積分:1 註冊:2003-01-06 發送簡訊給我 |
|
bruce0211
版主 發表:157 回覆:668 積分:279 註冊:2002-06-13 發送簡訊給我 |
|
koncon
一般會員 發表:0 回覆:7 積分:1 註冊:2003-01-06 發送簡訊給我 |
|
bruce0211
版主 發表:157 回覆:668 積分:279 註冊:2002-06-13 發送簡訊給我 |
|
koncon
一般會員 發表:0 回覆:7 積分:1 註冊:2003-01-06 發送簡訊給我 |
|
bruce0211
版主 發表:157 回覆:668 積分:279 註冊:2002-06-13 發送簡訊給我 |
|
koncon
一般會員 發表:0 回覆:7 積分:1 註冊:2003-01-06 發送簡訊給我 |
|
bruce0211
版主 發表:157 回覆:668 積分:279 註冊:2002-06-13 發送簡訊給我 |
|
minggl
一般會員 發表:4 回覆:11 積分:8 註冊:2002-10-22 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |