請教TApdComport 元件的使用 |
答題得分者是:暗黑破壞神
|
wychen57
一般會員 發表:32 回覆:77 積分:21 註冊:2003-10-04 發送簡訊給我 |
|
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
|
wychen57
一般會員 發表:32 回覆:77 積分:21 註冊:2003-10-04 發送簡訊給我 |
小弟是有個案子要用到,傳輸的資料是放到陣列中,陣列長度是不固定的,例如
InBuff:= comm1.input;InBuff is dynamic array type,
comm1.out := OutBuff
但說明檔的範例我就是不會用呀,而且程式碼寫的很多又雜,根本不知要從何截取使用,所以才請教大大們有沒有簡單一點的範例就像是
1:port開啟
2:將要送的陣列資料餵給元件
3:從元件接收資料到陣列
4:port關閉
以上動作都是為了modbus rtu所用,就這樣囉,感謝大大們指導囉
|
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
引言: 小弟是有個案子要用到,傳輸的資料是放到陣列中,陣列長度是不固定的,例如 InBuff:= comm1.input;InBuff is dynamic array type, comm1.out := OutBuff 但說明檔的範例我就是不會用呀,而且程式碼寫的很多又雜,根本不知要從何截取使用,所以才請教大大們有沒有簡單一點的範例就像是 1:port開啟 2:將要送的陣列資料餵給元件 3:從元件接收資料到陣列 4:port關閉 以上動作都是為了modbus rtu所用,就這樣囉,感謝大大們指導囉 >>< face="Verdana, Arial, Helvetica"> 1.設成 autoopen 就不用管它開關了。 不然有個 open = true; open = false 就可以開關。 2.用 putchar 就可以把東西由232丟出來了。自己寫迴圈處理。HELP有講。 3.利用ontriggeravail 去做接收。自己看它的HELP怎麼寫。 4.同第一點。 方向給了。自己去看HELP。自己去試。 不然出了狀況。你還會無法解決。 http://www.mcu51.com/list.asp?id=1588 想想別人怎麼學,我們有這麼用心嗎? 憂心啊~~~~~~ |
wychen57
一般會員 發表:32 回覆:77 積分:21 註冊:2003-10-04 發送簡訊給我 |
|
wychen57
一般會員 發表:32 回覆:77 積分:21 註冊:2003-10-04 發送簡訊給我 |
引言: 1.設成 autoopen 就不用管它開關了。 不然有個 open = true; open = false 就可以開關。 2.用 putchar 就可以把東西由232丟出來了。自己寫迴圈處理。HELP有講。 3.利用ontriggeravail 去做接收。自己看它的HELP怎麼寫。 4.同第一點。 方向給了。自己去看HELP。自己去試。 不然出了狀況。你還會無法解決。以下是小弟的程式,但使用並不成功,inbuff為接受自commport的資料,要移做設備讀值(如sign integer ,unsign integer,.... etc.),請大大指導錯誤所在,謝謝 unit frmMain; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, OoMisc, AdPort, StdCtrls; type TForm1 = class(TForm) Comm1: TApdComPort; Label1: TLabel; btnExit: TButton; procedure FormCreate(Sender: TObject); procedure btnExitClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var inbuff : char; begin comm1.ComNumber:=1; comm1.Baud:=9600; comm1.Parity:=pnone; comm1.DataBits:=8; comm1.Open:=true; inbuff := comm1.GetChar ; if inbuff := null then label1.Caption:= "No data"; else label1.Caption:= inbuff; end if end; procedure TForm1.btnExitClick(Sender: TObject); begin comm1.Open:=false; close; end; end. |
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
|
wychen57
一般會員 發表:32 回覆:77 積分:21 註冊:2003-10-04 發送簡訊給我 |
接收就直接寫在form的oncreat事件裡,或者以後會寫在timer裡,因為之前使用vb的mscomm元件是寫在timer的ontrigger裡,小弟看apdcomport的help有很多種事件,如ontriggeravil,ontriggeroutsend,....等,好幾個event都可以把接收程式寫在裡頭(還是一定要寫在OnTriggerAvail裡?),根本不知要寫在哪個事件才對,所以才會依舊習慣,直接呼叫apdcomport.getchar,也就因為不熟悉這個元件的呼叫方式(包括通訊參數的指定無法像其他元件可以直接指定9600,n,8,1甚至直接把參數讀自ini檔),help檔又寫的很片段,才會需要大大們能給我完整的程式片段(小弟的英文真的不好,實在不容易看懂help在寫啥),付上我的程式就是希望大大能指導我使用上的錯誤,不然我再重寫一個接收跟傳送各在一個timer裡的程式讓大大指導錯誤可以嗎,謝謝
|
wychen57
一般會員 發表:32 回覆:77 積分:21 註冊:2003-10-04 發送簡訊給我 |
小弟再附上之前用mscomm寫的程式片段
procedure TfrmMain.FormCreate(Sender: TObject);
var
OutByte: Array[0..10] Of Byte ;
inbyte : Array[0..1024] Of Byte;
crcData : Word ;
StrByte : OleVariant;
Meter_Val : Single ;
begin
mscomm.CommPort:=1;
mscomm.Settings:= '9600,n,8,1';
mscomm.InputMode:=1;
mscomm.PortOpen:= true;
outbyte[0] := $01;
outbyte[1] := $03;
outbyte[2] := $00;
outbyte[3] := $1A;
outbyte[4] := $00;
outbyte[5] := $02;
CrcData := crc16( outbyte , 6 );
// 算出CRC值後再寫入到outbyte[6..7]
outbyte[6] := Trunc(crcData/256) ;
outbyte[7] := (crcData Mod 256);
MsComm.out := outbyte;
inbyte := MsComm.input;
|
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
引言: 接收就直接寫在form的oncreat事件裡,或者以後會寫在timer裡,因為之前使用vb的mscomm元件是寫在timer的ontrigger裡,小弟看apdcomport的help有很多種事件,如ontriggeravil,ontriggeroutsend,....等,好幾個event都可以把接收程式寫在裡頭(還是一定要寫在OnTriggerAvail裡?),根本不知要寫在哪個事件才對,所以才會依舊習慣,直接呼叫apdcomport.getchar,也就因為不熟悉這個元件的呼叫方式(包括通訊參數的指定無法像其他元件可以直接指定9600,n,8,1甚至直接把參數讀自ini檔),help檔又寫的很片段,才會需要大大們能給我完整的程式片段(小弟的英文真的不好,實在不容易看懂help在寫啥),付上我的程式就是希望大大能指導我使用上的錯誤,不然我再重寫一個接收跟傳送各在一個timer裡的程式讓大大指導錯誤可以嗎,謝謝 >>< face="Verdana, Arial, Helvetica"> 1.你懂不懂 Delphi 的 onFormCreate 幹了什麼事? 2.如果你要問問題。而別人也給了答案。那請你按著答案去試一次吧。 否則。要完全依你的方法去做。那你就慢慢玩吧。 3.再次要求你依我的指示。去完成它。 |
wychen57
一般會員 發表:32 回覆:77 積分:21 註冊:2003-10-04 發送簡訊給我 |
引言: 1.你懂不懂 Delphi 的 onFormCreate 幹了什麼事? 2.如果你要問問題。而別人也給了答案。那請你按著答案去試一次吧。 否則。要完全依你的方法去做。那你就慢慢玩吧。 3.再次要求你依我的指示。去完成它。大大您別生氣嘛,小弟真的不是很懂,所以才會問(第一點真的不是很懂),在來是,小弟要的是兩個TIMER,一個管傳送,一個管接收,而OnTriggerAvail只是單一事件,如何在兩個timer中各別獨立呼叫,大大您就大人大量,不厭其煩,講清楚一點我的疑惑,為何會使用這個event而不是其他的event,小弟第一次用,困惑(白癡問題)一定會很多的,您就海量包容一下囉 |
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
引言:引言: 1.你懂不懂 Delphi 的 onFormCreate 幹了什麼事? 2.如果你要問問題。而別人也給了答案。那請你按著答案去試一次吧。 否則。要完全依你的方法去做。那你就慢慢玩吧。 3.再次要求你依我的指示。去完成它。大大您別生氣嘛,小弟真的不是很懂,所以才會問(第一點真的不是很懂),在來是,小弟要的是兩個TIMER,一個管傳送,一個管接收,而OnTriggerAvail只是單一事件,如何在兩個timer中各別獨立呼叫,大大您就大人大量,不厭其煩,講清楚一點我的疑惑,為何會使用這個event而不是其他的event,小弟第一次用,困惑(白癡問題)一定會很多的,您就海量包容一下囉 >>< face="Verdana, Arial, Helvetica"> 真會被你。。。。。。。。。最近心跳都維持在>>> > |
wychen57
一般會員 發表:32 回覆:77 積分:21 註冊:2003-10-04 發送簡訊給我 |
大大,您可能誤會了,我在之前的文章有提到,這是設備通訊用的(數位多功能電表),因為有很多個站,所以要分兩個timer,一個是管對哪一站要資料,而且有時要分好幾次才能把所有暫存器的值都抓回來,另一個當然就是送出查詢字串後的接收動作囉,這樣講你能了解我為何要分兩的timer了嗎,還有,我送出的485 modbus命令字串是byte of array,接收也是byte型態,包括crc16也是接收byte陣列(三篇回應之前應該有po),但apdcomport接受的是char跟string,是否通用,因為我用起來數值怪怪的,煩請解答,謝謝囉
|
wychen57
一般會員 發表:32 回覆:77 積分:21 註冊:2003-10-04 發送簡訊給我 |
|
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
引言: 大大,您可能誤會了,我在之前的文章有提到,這是設備通訊用的(數位多功能電表),因為有很多個站,所以要分兩個timer,一個是管對哪一站要資料,而且有時要分好幾次才能把所有暫存器的值都抓回來,另一個當然就是送出查詢字串後的接收動作囉,這樣講你能了解我為何要分兩的timer了嗎,還有,我送出的485 modbus命令字串是byte of array,接收也是byte型態,包括crc16也是接收byte陣列(三篇回應之前應該有po),但apdcomport接受的是char跟string,是否通用,因為我用起來數值怪怪的,煩請解答,謝謝囉1.485 已經是架構問題了。要動到通訊協定了。不是你用 timer 可以解決的。 2.Delphi 怎麼搞定那些基本型態。你自己去處理。沒理由要教到這種基本的東西。 3.基本的動作都沒還確認。你就去搞那些鳥東西? 你知道在寫程式時。就像在攀岩。要保持三點不動一點動。 你把所有能動的都動了。你就等著摔下山吧。 先確定那些東西是正確的。你再去改一部份一部份的變因。這樣你的程式才能完成。 這些都是入門要學的。現在還在這個地方踏步?真的很懷疑這樣的情況。怎麼把 AsyncPro 整進來。 |
wychen57
一般會員 發表:32 回覆:77 積分:21 註冊:2003-10-04 發送簡訊給我 |
引言: 1.485 已經是架構問題了。要動到通訊協定了。不是你用 timer 可以解決的。1,跟485無關,要小弟用vb寫都不是問題,,在vb中只要timer時間一到即可觸發收或送的程式螞,收送的程式都會寫,只是vb先天限制太多,所以轉型至delphi撰寫,而apdcomport功能及複雜度遠勝於vb內建的mscomm元件許多,呼叫方式亦複雜的多,所以才有這些怪問題,但可以確定的一點,呼叫收或送的程式勢必要寫在timer的ontimertrigger中,但此時卻要呼叫ontriggeravail event,就是這點把我搞混了,不知如何在event中又呼叫event 2.oop的觀念雖然相同,但各語言的差異,是小弟跨過門檻的障礙,只要這障礙跨過了,後面的道路小弟有自信能自己走 3.大大或許您認為這些問題很不上抬面,但卻是我們這些入門者學習上的大絆腳石,您可能信手捻來就可以輕鬆寫出一段程式,但我們是擠破頭卻也想不通呀,其他版的大大或版主有可能功力不若您,但他們卻很願意"秀"部份程式片段給我們這些入門者參考,而非單只有文字的敘述,而這小小的片段程式往往能讓我們的困惑豁然開朗喔,雖然小弟很笨,但還是萬分感謝您不吝花時間指點我,剩下的我再想辦法問程度比較接近我的,可能比較容易"切磋求進步"。小弟的一點心聲,若有冒犯之處,還請海涵 |
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
引言: 1,跟485無關,要小弟用vb寫都不是問題,,在vb中只要timer時間一到即可觸發收或送的程式螞,收送的程式都會寫,只是vb先天限制太多,所以轉型至delphi撰寫,而apdcomport功能及複雜度遠勝於vb內建的mscomm元件許多,呼叫方式亦複雜的多,所以才有這些怪問題,但可以確定的一點,呼叫收或送的程式勢必要寫在timer的ontimertrigger中,但此時卻要呼叫ontriggeravail event,就是這點把我搞混了,不知如何在event中又呼叫event我想您對 OnTriggerAvail Event 誤解了 只要 Comport 有收到資料, 這個 Event 就會觸發 在 Event 觸發時再去做處理 使用者不需要在 Timer 裡去呼叫, 也不應該去呼叫 再者您可以用如下的流程來做收送的動作: 1.TApdComport.Output := 'xxx'; // 傳送字串 2.Delay 一段時間, 等待 OnTriggerAvail Event 觸發 可以設個變數來判斷 OnTriggerAvail Event 有沒有觸發 沒有觸發表示 Timeout 沒收到資料 3.再做接下來的事 ... 如前幾篇討論提到的, TApdComport 有很多 Trigger 的 Event OnTriggerAvail 的意思上面有說 其它小弟會用的像是 OnTriggerData 假設如下一行設了一 TriggerHandle: LoginTrig := TApdComPort.AddDataTrigger('login:', True); PasswordTrig := TApdComPort.AddDataTrigger('password:', True); 然後 TApdComPort 在收到 login: 或 password: 字串時 就會發觸 OnTriggerData 事件 這個事件中有個 TriggerHandle 參數 如果 TriggerHandle 值等於 LoginTrig 表示收到 login: 字串 如果 TriggerHandle 值等於 PasswordTrig 表示收到 password: 字串 您可以依程式的需求來搭配 當然您可以不用它的事件中來接資料 比方說用個 Timer 來檢查 然後在 Timer 裡用 GetChar 或 GetBlock 的方式來取得收到的資料 如果所收到的資料很有規則的話 TApdDataPacket 元件也不錯用 -- hagar. |
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
引言: 1,跟485無關,要小弟用vb寫都不是問題,,在vb中只要timer時間一到即可觸發收或送的程式螞,收送的程式都會寫,只是vb先天限制太多,所以轉型至delphi撰寫,而apdcomport功能及複雜度遠勝於vb內建的mscomm元件許多,呼叫方式亦複雜的多,所以才有這些怪問題,但可以確定的一點,呼叫收或送的程式勢必要寫在timer的ontimertrigger中,但此時卻要呼叫ontriggeravail event,就是這點把我搞混了,不知如何在event中又呼叫event 2.oop的觀念雖然相同,但各語言的差異,是小弟跨過門檻的障礙,只要這障礙跨過了,後面的道路小弟有自信能自己走 3.大大或許您認為這些問題很不上抬面,但卻是我們這些入門者學習上的大絆腳石,您可能信手捻來就可以輕鬆寫出一段程式,但我們是擠破頭卻也想不通呀,其他版的大大或版主有可能功力不若您,但他們卻很願意"秀"部份程式片段給我們這些入門者參考,而非單只有文字的敘述,而這小小的片段程式往往能讓我們的困惑豁然開朗喔1.請你依我說的下去做。開個空的 project 去依我上一個指示去做。 2.想用 Delphi 請先了解它。不要用VB的使用方式來用它。 Delphi 是一種 event 模式。 VB 是 polling 模式。兩個是不同的。 event 就像是中斷一樣。只要條件達成。就會觸發。 polling 就是你要在程式中,一次兩次三次一直去問它,有沒有東西進來。 兩種模式是不同的。 3.我也依最簡單的方式要你開空 project 然後把它的接收方式寫出來給你了啊。 難道你要我像寫書那樣。連圖連動畫。都貼上來教你嗎? 請按照我之前寫的程序去做。先放掉你的成見。依我說的去做。 依那樣做,有問題再提出吧。 |
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
|
wychen57
一般會員 發表:32 回覆:77 積分:21 註冊:2003-10-04 發送簡訊給我 |
看了hagar大大的解釋,我想我應該知道問題點在哪了,確實是使用觀念的差異,我會改過來滴,剩下的部份我會再試試看,但有一個問題,我翻遍help檔,都沒提到apdcomport有類似count這個變數讓user拿來檢查傳送或接受的byte數對不對,是否要用類似下列語法才能辦到
var
str : string;
i, j : integer ;
for i=1 to 40
str = str apdcomport.getchar();
j = strlen(str);
判斷收到的位元總數是否正確,大大們看的懂小弟在問啥嗎,謝謝
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
wychen57
一般會員 發表:32 回覆:77 積分:21 註冊:2003-10-04 發送簡訊給我 |
|
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
引言: 看了hagar大大的解釋,我想我應該知道問題點在哪了,確實是使用觀念的差異,我會改過來滴,剩下的部份我會再試試看,但有一個問題,我翻遍help檔,都沒提到apdcomport有類似count這個變數讓user拿來檢查傳送或接受的byte數對不對,是否要用類似下列語法才能辦到唉。。。。你要這樣寫。。。會死人啦。 基本上用這個動作。你要了解一件事。是 com port 把東西丟進來時。 會觸動一次 event. 而一次 event 可能就會收進來 14 bytes 我的經驗是 max 14bytes 讀入。 所以。你這樣寫。除非你傳送的資料少於 14 bytes 否則。你永遠都會 check error. 會跟你說用 AnsiString S 一直去累加。是一種舉例。 可是。當資料不是可見文數字時呢? 比方說 '\0' 這種 null 呢? 你是不是要自己修改這個東西。把收到的資料丟進 memory. 之所以說 memory 是因為它不會因為 null 而代表結束。。。。。 而你應該要再做的是: 當收到某個 字元 時。表示這一行結束。ex. '\n', or '\r' 舉個例來說 你外面會送來 "this is a test string........\n" 這個很明顯的超過 14 bytes 所以。你會在兩次的 on..... 來接收。 所以你在 ontriggeravail 的函數中。要去對收到的字做判別。 以C來說var str : string; i, j : integer ; for i=1 to 40 str = str apdcomport.getchar(); j = strlen(str);判斷收到的位元總數是否正確,大大們看的懂小弟在問啥嗎,謝謝 ..... AnsiString S; ontriggeravail(...) { char c; for (int i=0;i其他的問題就是你對 Delphi 的問題了。無關 AsyncPro 了。 |
wychen57
一般會員 發表:32 回覆:77 積分:21 註冊:2003-10-04 發送簡訊給我 |
|
wychen57
一般會員 發表:32 回覆:77 積分:21 註冊:2003-10-04 發送簡訊給我 |
|
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
|
wychen57
一般會員 發表:32 回覆:77 積分:21 註冊:2003-10-04 發送簡訊給我 |
引言:引言: 附帶說明,接收的電表讀值80%都是hex 00 ,所以我試著用getchar()還真給我"秀斗"勒,還在找解決方案中 >>< face="Verdana, Arial, Helvetica"> getchar() 可以用啊。而且還只有它可以讓你用。 所以我才說啊。 把收到的資料丟進 memory. 之所以說 memory 是因為它不會因為 null 而代表結束。。。。。 真怪勒。我不是把解法都給你了嗎? >>< face="Verdana, Arial, Helvetica"> 拍謝啦,這次"純粹"是用法錯誤,資料判斷式去剔除到null,已經在修改中了,之前用getchar跟getstring沒搞對 舉例來說,傳回的資料為 |
wychen57
一般會員 發表:32 回覆:77 積分:21 註冊:2003-10-04 發送簡訊給我 |
小弟改寫程式了,但用法上有點問題,請大大指導一下
unit frmMain; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OoMisc, AdPort, StdCtrls, ExtCtrls,Func; type
TForm1 = class(TForm)
Comm1: TApdComPort;
Label1: TLabel;
btnExit: TButton;
btnSend: TButton;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure btnExitClick(Sender: TObject);
procedure Comm1TriggerAvail(CP: TObject; Count: Word);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject);
begin
comm1.ComNumber:=1;
comm1.Baud:=9600;
comm1.Parity:=pnone;
comm1.DataBits:=8;
comm1.Open:=true; end; procedure TForm1.btnExitClick(Sender: TObject);
begin
comm1.Open:=false;
close;
end; procedure TForm1.Comm1TriggerAvail(CP: TObject; Count: Word);
var
i : integer;
inbuff : string;
begin
timer1.Enabled := false;
for i:=0 to count-1 do
inbuff := inbuff + comm1.GetChar ;
label1.Caption:=inbuff;
timer1.Enabled := true;
end; procedure TForm1.Timer1Timer(Sender: TObject);
var
OutByte: Array[0..7] Of byte;
crcData : Word ;
meter_val : Single ; begin
OutByte[0] := $01;
OutByte[1] := $03;
OutByte[2] := $03;
OutByte[3] := $e9;
OutByte[4] := $00;
OutByte[5] := $01;
CrcData := crc16( outbyte , 6 );
// 算出CRC值後再寫入到outbyte[6..7]
outbyte[6] := Trunc(crcData/256) ;
outbyte[7] := (crcData Mod 256);
comm1.Output := OutByte;
^^^^^^^^^^^^^^^^^^incompatible types: 'array' and 'string'
end; end.
如果改成comm1.output:= (str(OutByte))會出現Imcompatible types;,請問有解ㄇ 附上crc16的含式 function CRC16(CRCData: array of Byte; Datalen: Integer):Word;
var
CRC16Lo: Byte;
CRC16Hi: Byte;
SaveLo:Byte;
SaveHi:Byte;
GLo:Byte;
GHi:Byte;
i:Integer;
Flag:Integer;
begin
CRC16Lo:=$ff;
CRC16Hi:=$ff;
GLo:=$01;
GHi:=$a0;
for i:=0 to Datalen -1 do
begin
CRC16Lo:=CRC16Lo xor CRCData[i];
for Flag :=0 to 7 do
begin
SaveLo:=CRC16Lo;
SaveHi:=CRC16Hi;
CRC16Hi:=CRC16Hi shr 1;
CRC16Lo:=CRC16Lo shr 1;
if (SaveHi and $01) = $01 then
CRC16Lo:=CRC16Lo or $80;
if (SaveLo and $01) = $01 then
begin
CRC16Hi:=CRC16Hi xor GHi;
CRC16Lo:=CRC16Lo xor GLo;
end;
end;
end;
CRC16 := CRC16Lo * 256 CRC16Hi;
end; 發表人 - wychen57 於 2005/05/14 17:04:35
|
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
|
wychen57
一般會員 發表:32 回覆:77 積分:21 註冊:2003-10-04 發送簡訊給我 |
|
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |