討論區快速選單
知識庫快速選單
政府補助!學嵌入式+物聯網 網路投保旅行平安險
[ 回上頁 ] [ 討論區發言規則 ]
wpt810問題4
更改我的閱讀文章字型大小
作者 : sha() 貼文超過200則人氣指數超過10000點
[ 貼文 272 | 人氣 21340 | 評價 120 | 評價/貼文 0.44 | 送出評價 36 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/12/18 下午 01:25:30
燃燒的大地兄,我加入printf("Data size: %d\n", lstrlen(Buffer));卻好像沒執行一樣,沒印出Buffer的內容,現我再設計下列程式,確認不論印條碼的與印點陣圖的都沒執行printf,當然點陣圖也沒印出來,只印出條碼.
我再說明清楚些,我是用usb轉rs232連接線來連接電腦與wpt810,而且下列所有指令都應該是wpt810的指令,我就是不了解為何印點陣圖的指令,就不能像印條碼的起作用.懇請燃燒的大地兄明白指出到底點陣圖的指令到底要如何使用才能正確使用,拜託!謝謝!
// 起始設定
strcpy(Buffer,"\x1b\x40");
WriteFile(handle,&Buffer,lstrlen(Buffer),&dwWrite,0);
// 設定高度
strcpy(Buffer,"\x1d\x68\x32");
WriteFile(handle,&Buffer,lstrlen(Buffer),&dwWrite,0);
// 設定寬度
strcpy(Buffer,"\x1d\x77\x01");
WriteFile(handle,&Buffer,lstrlen(Buffer),&dwWrite,0);
// 列印 code39 (19碼) 條碼
strcpy(Buffer,"\x1d\x6b\x45\x13\x30\x41\x32\x42\x34\x43\x36\x44\x38\x45\x30\x31\x32\x33\x34\x35\x36\x37\x38");
printf("Data size: %d\n", lstrlen(Buffer));
WriteFile(handle,&Buffer,lstrlen(Buffer),&dwWrite,0);
// 列印點陣圖 strcpy(Buffer,"\x1d\x76\x30\x0\x30\x00\x02\x00\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x41\x52\x63\x74\x85\x96\x27\x38\x49\x5a\x6b\x7c\x8d\x9e\x2f\x30\x41\x52\x63\x74\x85\x96\x27\x38\x49\x5a\x6b\x7c\x8d\x9e\x3f\x40\x51\x62\x73\x84\x95\x36\x57\x68\x79\x8a\x9b\x2c\x3d\x4e\x5f\x67");
printf("Data size: %d\n", lstrlen(Buffer));
WriteFile(handle,&Buffer,lstrlen(Buffer),&dwWrite,0);
// 跳行
strcpy(Buffer,"\x0a");
WriteFile(handle,&Buffer,lstrlen(Buffer),&dwWrite,0);
// 切紙
strcpy(Buffer,"\x1d\x56\x42");
WriteFile(handle,&Buffer,lstrlen(Buffer),&dwWrite,0);
// print & feed 0 lines 若不執行此指令,最後一張不會切紙
strcpy(Buffer,"\x1b\x4a\x00"); // 520/T810
WriteFile(handle,&Buffer,lstrlen(Buffer),&dwWrite,0);
作者 : ice_emissary(燃燒的大地) 貼文超過200則
[ 貼文 408 | 人氣 0 | 評價 1890 | 評價/貼文 4.63 | 送出評價 18 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/12/18 下午 01:54:08
先說回文的問題,不然這幾串看的也有點辛苦!
你用什麼瀏覽器?換其它瀏覽器會不會好?
說實在的,這個網站有蠻多缺陷的,比方說每次留言時的秒數也不對,不過好像已經都沒有在維護了!
深深覺得網站愈來愈少人逛一定和眾多網頁缺陷有關!

關於 printf 的問題,一個合格的、或者有上過入門班、或者有從書本開始學過 C/C++ 的人,
一定知道 printf 的作用是什麼?當它印不出東西的時候應該怎麼辦?或至少知道問題出在哪?
所以我極度的建議你,應該去買本 C 語言的書從頭好好學一遍,不然你的問題會問不完。
其實你可能已經發現老鼠大大對你的一些低級錯誤很受不了!
(其實我也受不了,只是耐著性子而已)

我就先不要賣太多關子了,不然等你一一處理完可能要世界末日。

## printf 印不出東西的問題

因為你開的是 GUI 類型的專案,所以自作聰明的微軟不會幫你打開一個終端機給你用,所以當然什麼都看不到!
解決方法:

1. 你就不能開個 console 專案嗎?
難道你不覺得至少在開發調試的過程中,console 比 GUI 還要好用嗎?
就不能在 console 獨立的開發調試完一個功能,再把它整併到 GUI 程式裡嗎?

2. 不管任何理由你必須要使用 GUI 程式來進行開發除錯,
看到我寫 printf,你應該要知道這是在幹什麼的,然後用其他方式把訊息丟出來,
比如說改用 message box 什麼之類的。

3. 你什麼都不會或不想動的話,不會把 printf 的訊息改輸出到文字檔案來看嗎?
喔我忘了你沒學過 C,我直接給以下範例:

do{ FILE *file = fopen("log.txt", "a"); fprintf(file, "Data size: %d\n", lstrlen(Buffer)); fclose(file); } while(0);

這樣你執行程式的時候就會跑出一個 "log.txt" 文字檔。

就先這樣,
你的程式的其他問題我晚一點再來回覆,要去上班了!
作者 : sha(sha) 貼文超過200則人氣指數超過10000點
[ 貼文 272 | 人氣 21340 | 評價 120 | 評價/貼文 0.44 | 送出評價 36 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/12/18 下午 04:42:58
先感謝燃燒的大地兄能耐著性子給我循循善誘,我改用另一瀏覽器就好了,謝謝!
我後來改用AfxMessageBox來顯示Buffer的內容,結果如下 :
1.針對條碼 0A2B4C6DBE012345678 , buffer的內容是 kE 0A2B4C6DBE012345678,kE 應該是該指令前面的參數而產生
2.針對點陣圖的 , buffer的內容只有 V0 ,應該是該指令前面的參數而產生,而後面48組點陣圖的資料完全沒顯示.
所以wpt810只印出條碼.
我覺得我的問題很單純,就是印條碼與點陣圖的指令都是wpt810的指令,為何一個能正常執行,而另一個卻不行,所以懇請燃燒的大地兄就這一點明白告訴我點陣圖的指令,我到底錯在那,應該要如何寫就能印出點陣圖來,拜託你了!謝謝!
作者 : ice_emissary(燃燒的大地) 貼文超過200則
[ 貼文 408 | 人氣 0 | 評價 1890 | 評價/貼文 4.63 | 送出評價 18 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/12/18 下午 06:15:54
很高興你自己試著除錯,並發現了一些奇怪的狀況。

先說在前面,我手邊沒有那臺列表機,雖然下載了規格書但也沒仔細看。
因為研究那個要花不少時間,這會排擠到我正常的工作,畢竟沒有人付我錢做這件事。
可是這顯然是你的工作,所以有關通訊格式、資料的部份,你看出了什麼問題再問吧!然後看看有沒有人剛好可以解答。
我這邊只先針對一眼看出的明顯錯誤來提醒你。

簡單破題,你眼前問題的根源在於你要收送「位元組資料」,卻選擇使用了「字串」處理工具,從而導致一堆問題。

在 C/C++ 裡面,零在字串裡面被用來標記字串的結束。
所以你雖然準備了很多的資料要送,但是 strlen 在計算大小的時候,一看到零,就認為結束了!
這就是為什麼你的點陣圖封包永遠只送出前三個位元組的原因,
那麼印表機沒收到完整的封包,所以不做任何處理,這是再正常不過的事情了!

再來,我對你使用 lstrlen 很有意見。
lstrlen 和 strlen 的意義和作用是不一樣的,就算你真的要處理字串,
我想在你搞懂他們實際上的差異以前,你都應改只使用 strlen 而不要去使用 lstrlen。
我不想解釋它們的不同,因為這會需要要解釋字元編碼是怎麼一回事!

但就算你想辦法得到了正確的資料長度也沒用,因為你 Buffer 裡面第四個位元組以後的資料都是垃圾!
原因很簡單,你使用了 strcpy 來複製資料,而這本是用來處理字串的函式,
所以自然的,看到零以後的東西都會被忽略掉!

要解決這些問題也很簡單,不要用「字串工具」來處理你現在需要處理的「位元組資料」!
請改使用 memset、memcpy 等函式來複製資料,妥善處理資料大小的數值,
最好把你要送出的資料 dump 出來,看看自己都送了些什麼東西?

或者你也可以像老鼠兄在「wpt810問題續集」裡的範例一樣,一個位元組一個位元組的寫資料。
另外,若你改好後仍然印不出東西,你也可以試試它的程式碼,畢竟他看起來比我熟這臺機器!
作者 : ma_hty(白老鼠(Gary))討論區板主 OpenGL卓越專家DirectX優秀好手C++頂尖高手貼文超過2000則人氣指數超過70000點
[ 貼文 2189 | 人氣 89850 | 評價 10120 | 評價/貼文 4.62 | 送出評價 79 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/12/18 下午 06:52:14
>再來,我對你使用 lstrlen 很有意見。
>lstrlen 和 strlen 的意義和作用是不一樣的,就算你真的要處理字串,
>我想在你搞懂他們實際上的差異以前,你都應改只使用 strlen 而不要去使用 lstrlen。
>我不想解釋它們的不同,因為這會需要要解釋字元編碼是怎麼一回事!

lstrlen() 這東東我也很在意, 而且問了一下Google大神. 那是 微軟16bit系統過渡32bit系統的過渡方案 的一部份.
今年何年了? 就連 32bit系統 都已被淘汰了啊, 哪來 16bit系統過渡32bit系統的需求?
(... 煞有其事地用lstrlen(), 是太詭異了, 輕小說裡的穿越平行時空情節乎? ...)


>或者你也可以像老鼠兄在「wpt810問題續集」裡的範例一樣,一個位元組一個位元組的寫資料。
>另外,若你改好後仍然印不出東西,你也可以試試它的程式碼,畢竟他看起來比我熟這臺機器!

燃燒的大地兄, 言重了. 我只是看了一看文件 ozzy123提及的spec, 然後想當然地隨筆寫一下原碼.
跟機器玩遊戲, 沒機器在手做測試, 哪裡談得上"熟這臺機器"? 不是我了解深入, 是樓主了解淺薄而已.
作者 : sha(sha) 貼文超過200則人氣指數超過10000點
[ 貼文 272 | 人氣 21340 | 評價 120 | 評價/貼文 0.44 | 送出評價 36 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/12/18 下午 07:33:03
謝謝燃燒的大地兄與老鼠兄的指教,看樣子是要改用其他指令來處理這些資料了.再一次謝謝你們!
作者 : ma_hty(白老鼠(Gary))討論區板主 OpenGL卓越專家DirectX優秀好手C++頂尖高手貼文超過2000則人氣指數超過70000點
[ 貼文 2189 | 人氣 89850 | 評價 10120 | 評價/貼文 4.62 | 送出評價 79 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/12/18 下午 07:53:55
>謝謝燃燒的大地兄與老鼠兄的指教,看樣子是要改用其他指令來處理這些資料了.再一次謝謝你們!

你是不是太頑固了? 原碼也給你寫好, 複制+貼上 就可知你的機器是否能 使用"1D 76 30 00"指令 去打印 dot images,
何以堅持不做?

( Mmm... 好吧, 我坦白, 我是有點潔癖, 是我多管閒事了 )
作者 : ozzy123(ozzy) VC++優秀好手資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4499 | 人氣 37262 | 評價 11100 | 評價/貼文 2.47 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/12/18 下午 11:07:49
http://px-download.s3.amazonaws.com/SDK/ESCPOS_Command_Manual.pdf?AWSAccessKeyId=AKIAIFUMS733QL4JIF4A&Expires=1545147460&Signature=tOjflVXhrJIUzDIgkf78SV7sDnY%3D

this is a epson command manual. please read p58 to p59, especially [details] in p59.
in the details , there are some statement to describe the usages of this command and their limits.
have fun
作者 : ozzy123(ozzy) VC++優秀好手資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4499 | 人氣 37262 | 評價 11100 | 評價/貼文 2.47 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/12/18 下午 11:45:11
strcpy(Buffer,
'\x1d GS
\x76 v
\x30 m = 0
\x0 xL = m , 0 <= m <= 3, 48 <= m <=51
\x30 xH = 48 (decimal)
\x0 yL = 0
\x1 yH = 1
\x0
\x31
....

k=(xL + xH x 256) x (yL + yH x 256) = 0 + 48*256 ) * ( 0 + 1*256 ) = 256*256*48 , d1 ... d (256*256*48) total dot data
作者 : ice_emissary(燃燒的大地) 貼文超過200則
[ 貼文 408 | 人氣 0 | 評價 1890 | 評價/貼文 4.63 | 送出評價 18 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/12/19 上午 11:00:23
>你是不是太頑固了? 原碼也給你寫好, 複制+貼上 就可知你的機器是否能 使用'1D 76 30 00'指令 去打印 dot images,
>何以堅持不做?
>
>( Mmm... 好吧, 我坦白, 我是有點潔癖, 是我多管閒事了 )

老鼠兄請息怒。
我可以理解他的做法選擇,因為我有時候也會這樣。

就讓他先試試自己的資料吧,如果他送的資料是不正確的,最後應該還是會試你給的範例。

有時候在面臨一些狀況的時候,我也會認為某部份應該沒有問題,問題應該在另外某部份上。
也許試一試之後沒發現問題,最後還會再試回來,但這就是個人在當下判斷的除錯邏輯排程。

記得多年前遇到一個 bug,剛開始除錯主管就不高興了!
他認為我應該要這樣這樣、然後那樣那樣,他指揮的很細喔,連線在該做什麼步驟都要管。
我那時就心理不開心,我不喜歡旁邊的人這樣指手畫腳。
我覺得我用的方法很好,而在最後找到問題之前,我也不能確定誰的除錯方法到底比較好?
可是面對這樣強行干預的人,我心想你既然有這麼多想法,而且顯然也有時間站在我旁邊,
為什麼不要自己測試就好了?

對照目前的狀況,他想先排除這他的方法資料送不出去的問題,那不妨就先這樣吧!
如果他資料送出去了,但仍印不出東西、或印錯東西,我想他還是會需要試試你的程式的!
作者 : sha(sha) 貼文超過200則人氣指數超過10000點
[ 貼文 272 | 人氣 21340 | 評價 120 | 評價/貼文 0.44 | 送出評價 36 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/12/19 下午 12:05:42
請各位前輩息怒!
我先回答老鼠兄的問題,我有將你給我的程式複製貼上,編輯時就出問題,我有向你請教你程式中的變數是不是要在 .h 檔中定義才能用,結果你沒回應,我就只好擱下來,再向燃燒兄請教為何條碼可印而點陣圖不能印,直到我用AfxMessage將Buffer的資料顯示出來後才知道原來當Buffer中有 0 的資料時,就會認為資料已經結束,而不理會後面的資料,而碰巧我在使用wpt810的指令來印文字與條碼時,剛好沒有 0.所以一直沒想到遇到 0 會不理會後面的資料這個問題.
而wpt810的參數本來就有 0,因此結論就是不能使用strcpy,lstrlen這些指令,而燃燒兄就建議我改用memset、memcpy與dump的指令來處理資料.所以我才說要改用這些指令來解決遇到 0 會結束的問題.
當然若老鼠兄願意再提供你所說那段程式,當然是希望是完整的,因我比較魯鈍,若所提供的不完整,編輯時就出問題,我恐怕領悟不出來,要補充那裡才能使用.那就拜託老鼠兄了,謝謝!
作者 : ice_emissary(燃燒的大地) 貼文超過200則
[ 貼文 408 | 人氣 0 | 評價 1890 | 評價/貼文 4.63 | 送出評價 18 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/12/19 下午 01:26:58
> 而wpt810的參數本來就有 0,因此結論就是不能使用strcpy,lstrlen這些指令,
> 而燃燒兄就建議我改用memset、memcpy與dump的指令來處理資料.
> 所以我才說要改用這些指令來解決遇到 0 會結束的問題.

提醒一下,dump 是一個術語,我是不知道 Windows 上面是不是存在同名函式,注意不要誤用!
Dump 的意思就是把你要接收、或送給印表機的二進位資料,以各種形式存檔、或顯示出來,
然後親自確認所收送的每一個位元組。

通常,你必須要自己寫一小段程式來做這件事,
因為既然要檢查二進位資料,你用的 AfxMessage 顯然將不足以應付!
如果你不會寫這些功能,也可以去購買專門的 RS-232 Monitor 硬體,直接從串列埠監看資料。
這東西我在前公司有用過,但是公司買的,我不知道多少錢,也不知道去哪裡買。

> 當然若老鼠兄願意再提供你所說那段程式,當然是希望是完整的,
> 因我比較魯鈍,若所提供的不完整,編輯時就出問題,我恐怕領悟不出來,要補充那裡才能使用.
> 那就拜託老鼠兄了,謝謝!

依我看,你是不是駑鈍我不確定,但幾乎肯定是不負責任。
有很多的問題,對於學過初級 C/C++ 的人就不應該會發生,
所以幾乎可以確定,你沒有學過,或者沒有好好學過 C/C++,
然後妄想可以在問問題的過程中一邊精進。
問題是很多東西你就不會啊!

以前教官說過一個他經歷的故事:
A: 「同學,等會英文考試要照我。」
B: 「好!」
考試時…
A: 「同學,第一題答案多少?」
B: 「Girl。」
過了一陣子…
A: 「同學,Girl 怎麼寫?」
B: 「G-i-r-l。」
又過了一陣子…
A: 「同學,G 怎麼寫?」
B: 「……」

你的問題解完一個還有下一個,根源就是你根本沒好好學過程式。
要能夠完整解答你全部的問題的話,解答的量可能比一本入門書還多,
那為什麼不先看書學呢?

> 我先回答老鼠兄的問題,我有將你給我的程式複製貼上,編輯時就出問題,

我不知道我這樣幫老鼠兄回答問題會不會讓他不開心?
但他的程式碼我沒看出明顯的問題,應該是可以運作的。
如果你那裡不能編譯通過的話,兩個可能的問題如下:

1. writebyte 是一個函式,
如果你把它複製貼上到你的事件函式裡的話,那應該就會發生不能編譯通過的問題。

2. 0b???????? 的表示法沒記錯的話是 C++14 以後才加入的語法,所以可能會造成編譯不通過。
解決方法是你要自己把它換算成 0x??。
作者 : ozzy123(ozzy) VC++優秀好手資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4499 | 人氣 37262 | 評價 11100 | 評價/貼文 2.47 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/12/19 下午 01:55:58
https://kuraki5336.pixnet.net/blog/post/188697357-rs232-與-esc-pos

Maybe it could give you some ideas .
作者 : sha(sha) 貼文超過200則人氣指數超過10000點
[ 貼文 272 | 人氣 21340 | 評價 120 | 評價/貼文 0.44 | 送出評價 36 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/12/19 下午 03:00:04
謝謝燃燒兄與ozzy兄的解釋與提供,我會好好自我學習學習,日後若有問題再向諸位請教!謝謝!
作者 : ma_hty(白老鼠(Gary))討論區板主 OpenGL卓越專家DirectX優秀好手C++頂尖高手貼文超過2000則人氣指數超過70000點
[ 貼文 2189 | 人氣 89850 | 評價 10120 | 評價/貼文 4.62 | 送出評價 79 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/12/19 下午 05:30:25
>我不知道我這樣幫老鼠兄回答問題會不會讓他不開心?
>但他的程式碼我沒看出明顯的問題,應該是可以運作的。
>...

^^",我是有點潔癖,不過,都老大不少了,不至於會閒到為這點瑣碎事影響心情吧。

Mmm... 我還以為潔癖的比喻,足夠指出我會想啥呢。我說"潔癖" 就是指 要整理到井井有條 才收手的那份堅持呀。這堅持,由編程式而起,至寫文章而甚,現已深入日常,病入膏肓。

我呀,就連看到別人亂七八糟的,也會覺得不爽。樓主堅持亂來,本跟我無關,但是,我就是不爽唷。

至於樓主嘛,他堅持不用我的原碼,我除了好像看到有人插隊一般的不爽,沒別的了。

另外,樓主呀,編程式,要小心 小心 + 小心。我給你的那段原碼,是用 visual studio 2015 community 編譯到乾乾淨淨,才貼出來的。

若你真的試過我的原碼,我估你大概是連編譯器的基本操作也有困難吧。若真的試了,請問編譯器有何投訴? 若還沒,就去試吧。


作者 : sha(sha) 貼文超過200則人氣指數超過10000點
[ 貼文 272 | 人氣 21340 | 評價 120 | 評價/貼文 0.44 | 送出評價 36 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/12/20 上午 10:15:44
老鼠兄的指教我心領,但我已說過將你那段原碼貼進去後就是不行,一下子也不知要從何下手,而且現在已了解就是當遇到 0 就會不理會後面的資料,所以當務之急當然是找出用什麼指令就能解決 0 的問題.當然我還是會抽空仔細研究你那段程式.假如你能夠再提供更好的程式,讓我不需要還要花時間來解決不能編譯的問題,不是更好嗎?
作者 : ice_emissary(燃燒的大地) 貼文超過200則
[ 貼文 408 | 人氣 0 | 評價 1890 | 評價/貼文 4.63 | 送出評價 18 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/12/20 上午 11:10:08
> 老鼠兄的指教我心領,但我已說過將你那段原碼貼進去後就是不行,一下子也不知要從何下手,
> 而且現在已了解就是當遇到 0 就會不理會後面的資料,
> 所以當務之急當然是找出用什麼指令就能解決 0 的問題.
> 當然我還是會抽空仔細研究你那段程式.假如你能夠再提供更好的程式,讓我不需要還要花時間來解決不能編譯的問題,不是更好嗎?

我可以理解你對除錯的時程和步驟安排,我之前解釋過。
但你說老鼠兄的程式有問題這我就不能諒解了,因為他的程式碼貼上來,大家都看到,我也看到,沒有什麼問題,是非常簡單的一個範例片段。
會讓你複製貼上後編譯不過這件事幾乎完全可以歸責於你,是你沒學好程式而導致完全無法處理這一段程式碼。
即便如此,也非全無可能讓程式執行:
1. 本於助人為樂的精神,我盡可能的猜測可能發生問題的兩點原因。
2. 編譯不通過,你也沒有貼出編譯器所給的錯誤訊息來尋求幫助,讓我們只能用猜的。

最後,我想幫樓主拜託老鼠兄,如果您願意的話,是否可以把從 main 開始的整個程式碼,包含 include 的部份全貼給他呢?雖然我知道你一定會很不開心!
作者 : sha(sha) 貼文超過200則人氣指數超過10000點
[ 貼文 272 | 人氣 21340 | 評價 120 | 評價/貼文 0.44 | 送出評價 36 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/12/20 下午 01:19:04
燃燒兄,我編譯老鼠兄的程式,出現下列錯誤 :
錯在這一行 0b00010000, 0b00000000, 0b00000000, 0b00000000,
錯誤訊息是 :
 error C2059: syntax error : 'bad suffix on number'
D:\bill520810測試\A1.cpp(71) : error C2061: syntax error : identifier '0b00010000'

後來我依你給我的建議,將所有 0b00010000 改用16進位來表示 ,如 0x10,同時不使用
void writebyte( HANDLE handle, BYTE b )
{
  DWORD dwWrite;
  WriteFile(handle,&b,1,&dwWrite,0);
}
而直接將 writebyte(handle,0x1d); 改寫為 WriteFile(handle,&"0x1d",1,&dwWrite,0); 編譯是過關了,執行後wpt810也有東西印出來,但要研究是什麼東西,才能確認上述的修改是否正確.

不管怎麼說,還是謝謝燃燒兄與老鼠兄不厭其煩的指導.若上述的修改有錯,就請你們再給我指點指點,在此再一次謝謝你們!

作者 : ice_emissary(燃燒的大地) 貼文超過200則
[ 貼文 408 | 人氣 0 | 評價 1890 | 評價/貼文 4.63 | 送出評價 18 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/12/20 下午 01:42:14
很好,總算有些長進。

> 直接將 writebyte(handle,0x1d); 改寫為 WriteFile(handle,&"0x1d",1,&dwWrite,0);

……
你確定你知道自己在改什麼東西嗎?要改也是改成像這樣吧:

uint8_t byte = 0x1D;
WriteFile(handle,&byte,1,&dwWrite,0);

不信?dump 你送出的資料,看你都送了什麼?

> 編譯是過關了,執行後wpt810也有東西印出來,但要研究是什麼東西,才能確認上述的修改是否正確.

所以印出來的東西是正確的嗎?你可以調整一些資料來改變印出來的圖形嗎?
如果不正確的話,你有照我說的,擷取 RS-232 埠口的資料流,看看你實際都送了些什麼東西,有和你預期的一樣嗎?

另外,我後來想起來,串列埠的監視器不一定要買硬體,好像也有出純軟體的監視器,直接從作業系統還是驅動程式的地方來截收資料,
好處是應該比硬體裝置便宜、甚至可能有免費的;壞處是…當然實際的資料還是以硬體實際處理的為準!
作者 : sha(sha) 貼文超過200則人氣指數超過10000點
[ 貼文 272 | 人氣 21340 | 評價 120 | 評價/貼文 0.44 | 送出評價 36 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/12/20 下午 01:53:03
謝謝燃燒兄的提示,我再改看看,謝謝!
作者 : ma_hty(白老鼠(Gary))討論區板主 OpenGL卓越專家DirectX優秀好手C++頂尖高手貼文超過2000則人氣指數超過70000點
[ 貼文 2189 | 人氣 89850 | 評價 10120 | 評價/貼文 4.62 | 送出評價 79 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/12/20 下午 02:58:13
> 最後,我想幫樓主拜託老鼠兄,如果您願意的話,是否可以把從 main 開始的整個程式碼,包含 include 的部份全貼給他呢?雖然我知道你一定會很不開心!

^^" 甚麼是我貼原碼, 去為樓主的原碼除錯? 這是太迂迴了吧? 我的原碼, 就算從main 開始貼了,
也不可能找到樓主原碼的bug吧

除錯, 除有bug的原碼呀, 請樓主貼他的吧.

踼樓主八腳, 才行一步. 貼編譯錯誤, 但不貼原碼, 在哪去找錯呢?! 懶到這樣, 我就不浪費時間了, 你努力吧.
作者 : ozzy123(ozzy) VC++優秀好手資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4499 | 人氣 37262 | 評價 11100 | 評價/貼文 2.47 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/12/20 下午 09:25:12
if the function of printing bit map is available , you should study the format of bit map .

Have fun
作者 : sha(sha) 貼文超過200則人氣指數超過10000點
[ 貼文 272 | 人氣 21340 | 評價 120 | 評價/貼文 0.44 | 送出評價 36 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/12/20 下午 09:29:28
謝謝ozzy兄的提醒,雖然還有很多難題要解決,但目前總算已踏出第一步.日後若有問題,再向ozzy兄請教,謝謝!
作者 : ice_emissary(燃燒的大地) 貼文超過200則
[ 貼文 408 | 人氣 0 | 評價 1890 | 評價/貼文 4.63 | 送出評價 18 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/12/21 上午 09:08:53
好心提醒樓主,除了送資料給印表機以外,別忘了也要收印表機送出的資料!

收資料非常重要,而且一定要做,尤其你做的是發票機。
你把資料送出去,印表機就一定會印出來嗎?
1. 也許中途資料有出錯,你可能會需要重送,畢竟串列埠不是可靠的資料傳輸通道。問題是你怎麼知道對方有沒有收到?
2. 也許印表機沒紙了,你要怎麼知道?
3. 也許印表機電源被踢掉了,你又要怎麼知道?

答案是,正常的印表機都回回覆你有關資料是否收到、是否檢核錯誤、以及命令的執行結果等。
可是印表機回了,你要收資料才會知道啊!不然怎麼知道印表機回了什麼?
而觀察你之前的程式碼,好像都沒有相關收資料的部份,讓人有些擔心!
作者 : sha(sha) 貼文超過200則人氣指數超過10000點
[ 貼文 272 | 人氣 21340 | 評價 120 | 評價/貼文 0.44 | 送出評價 36 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/12/21 上午 10:35:37
謝謝燃燒兄的提醒.我會盡力而為,反正搞程式設計本來就是荊棘遍野,日後還有很多地方要向各位前輩請教,希望各前輩能再耐著性子來提攜後輩,再此先謝謝各位前輩的幫忙!
作者 : ozzy123(ozzy) VC++優秀好手資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4499 | 人氣 37262 | 評價 11100 | 評價/貼文 2.47 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/12/22 上午 04:35:51
http://www.sudt.com/en/ap/index.html
作者 : sha(sha) 貼文超過200則人氣指數超過10000點
[ 貼文 272 | 人氣 21340 | 評價 120 | 評價/貼文 0.44 | 送出評價 36 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/12/22 上午 09:52:02
謝謝ozzy兄的提供,我會好好研究,謝謝!
 板主 : 青衫 , Raymond
 > Visual C++ - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - Visual C++ - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
Visual C++
1 青衫 11070 
2 Raymond 10090 
3 Clier 7630 
4 小約翰 2500 
5 Cog 2030 
6 coco 1870 
7 aming 1410 
8 牧童哥 1400 
9 r2109 1380 
10 Akira 1350 
Visual C++
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.21875