作者chris70211 (克里斯)
看板C_Sharp
標題[問題] 用TIMER定時發送資料
時間Fri Jan 4 11:42:46 2013
小弟寫了一個用232傳輸資料的程式
想利用timer達到定時發送資料的功能(如每隔兩秒發送一次)
發送程式
{
if (timer1.Enabled==false)
{
string s1 = "\x02" + Convert.ToString(A_kg) + "\x0d" + "\x0a";
serialport.Write(s1);
timer1.Enabled=true;//開啟計時器
}
}
private void timer1_Tick(object sender, EventArgs e)
{
counter++
if (counter==3)//三秒
{
timer1.Enabled=false;關閉計時器
}
}
可是卻沒辦法正常啟動 似乎計時器無法觸發
想問問要怎麼改才能照所需的功能執行
新手一枚 請大家多多指教<(_ _)>
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 39.12.111.196
1F:→ totte:您是指timer1.Start(); ?? 01/04 12:47
恩 我是用VS2008 c#
想知道要怎麼在發送資料的執行緒插入一個TIMER(時間)達到定時發送的功能
剛接觸C# 想問問要怎麼寫才正確>"<
※ 編輯: chris70211 來自: 27.246.57.225 (01/04 13:25)
2F:→ hoihkj:counter有歸零? 01/04 14:21
3F:→ rainbow001:timer不用關閉,應該要一直計數.. 01/04 15:59
4F:→ rainbow001:另外在你的發送端程式,加個判斷式 01/04 16:00
5F:→ rainbow001:if(counter%2==0) {...} 01/04 16:01
6F:→ ssccg:兩秒一次就timer1.Interval = 2000 就好 01/04 17:51
7F:→ ssccg:要定時做的動作是寫在timer1_Tick裡 01/04 17:55
8F:→ tsczx:如果是寫Service觸發不是寫在Tick,另外預設值Enabled有開? 01/06 18:39
由於在發送資料之前有利用usb將資料接收並運算 如果將發送資料的動作寫在Tick裡
由於我是用Tick.Emabled=true 但這樣好像不會正確的轉進Tick裡動作
因為動作需求 是利用一個button進行資料接收運算及發送
無法將發送資料的動作寫在另一個BUTTON
PS.小弟真的是新手一枚 有什麼觀念不清的地方 請大家多多見諒!!
也感謝大家的回覆 <(_ _)>
※ 編輯: chris70211 來自: 39.10.231.185 (01/07 08:39)
9F:→ tsczx:我不是很看得懂你的問題跟需求,可以寫清楚點,試著跑debug看 01/07 22:42
剛接觸c#兩三個禮拜而已 之前主要是用matlab再寫程式
所以一些物件導向 執行緒的觀念都不是很清楚 (還在努力中)
只是有鑑於時間的緊迫性沒辦法慢慢學 只好先從看別人的code 改code著手
目前的程式是用usb接收資料 然後根據時間設定來發送資料(232)
而主要的動作都寫在接收資料的BUTTON內 所以不知道要怎麼樣將接收資料的BUTTON與
計時器的BUTTON做結合 至於將主動做寫在計時器這一點目前還在思考怎麼做
不知道能不能寫成像下面這樣:
BUTTON1~主要動作
{
接收資料
232發送命令同時進行計時&設定時間(例如三秒)
到達設定時間(三秒)
將第三秒擷取到的這筆資料再透過232發送出去
}
BUTTON2~計時
{
count++
if (count==3){關閉計時器}
}
接收資料的部分不需要跟計時器同步動作(應該沒辦法吧)
之前試著用 timer.enable=true或false 不過似乎沒辦法觸發
所以想了解應該怎麼寫才能達到我的動作需求
如果有什麼觀念錯誤 請體諒原PO還是個學不到一個月的菜鳥吧Q__Q
※ 編輯: chris70211 來自: 114.38.114.90 (01/07 23:57)
10F:→ ssccg:timer是每過一段時間(timer.Interval)做同一件事 01/08 03:36
11F:→ ssccg:你需要的等一段時間後做一次事情,應該用Thread.Sleep(3000) 01/08 03:39
12F:→ ssccg:你還是先講清楚你是要定時"每"x秒發一次 01/08 03:44
13F:→ ssccg:還是按按鈕後,發送命令→等x秒→發送命令→結束 01/08 03:44
14F:→ hoihkj:有沒完整專案檔可提供下載? 01/08 07:40
S大 如你所說是按完按鈕後發送命令->等x秒->接收usb 資料->發送下一個命令
保持這個迴圈 秒數設定的部分會放在陣列 如果是這樣的動作的話是否用
Thread Sleep即可?
H大我是抓網路上的generic_hid_cs這是檔名 可是我忘記在哪抓得了>"<
如果你有需要
http://www.lvr.com/usbcode.htm 這個對你應該有用
※ 編輯: chris70211 來自: 39.12.23.249 (01/08 08:42)
15F:→ hoihkj:XD HID 我只是想解你的timer問題 不是很確定 若只是要收到 01/08 09:03
16F:→ hoihkj:資料後delay3S送232寫在同個button1應該可以達到阿 01/08 09:04
17F:→ hoihkj:btn1>收usb>delay3s>送232 這樣嗎? 01/08 09:10
18F:→ hoihkj:要loop就給for迴圈或timer內call button1 01/08 09:16
19F:→ hoihkj:for UI可能會卡住 用timer也許比較理想 01/08 09:16
20F:→ tsczx:等X秒後再做動作,是用Sleep,想要按下去"每"兩秒抓一次用 01/08 11:16
21F:→ tsczx:Timer,而且我有點困惑,你要先等待兩秒,再去抓,那Timer設長一 01/08 11:23
22F:→ tsczx:比較好,Sleep兩秒>>每兩秒執行Timer,會只有第一次Sleep兩秒 01/08 11:25