作者highbr520 (工數煞到地平線)
看板C_Sharp
標題[問題] textBox數值更新
時間Mon Mar 9 21:55:24 2020
各位先進大家好,小弟在做關於感測器方面的應用
我是使用TwinCAT與感測器建立PLC變數
並使用C#的ADS協議來獲取我要的感測器數值
這部份程式大概會是這樣:
private TcAdsClient tcAdsClient=new TcAdsClinet();
private int hvar=new int();
int dataone;
void DataLoad ()
{
hvar=tcAdsClinet.CreateVariableHandle("Plc");
dataone=(int)tcAdsClient.Readany(hvar,typeof(int));
textBox.Text=Convert.ToString(dataone);
}
private void timer_Tick(object sender, EventArgs e)
{ DataLoad
}
以上主要是將我的感測器數值建立並顯示在textBox
我目前想做到的是能夠透過這個感測器的數值變化
來做為我機器移動的判斷依據
將我的機器移動到我想要移動到的位置
這邊的控制程式是以button去寫的
我的這部份程式大概是這樣:
private void button_Click(object sender,EventArgs e)
{
Move (1,2,3);//移動至(1,2,3)座標位置
for(int j=2;j<10;j++)
{
if(double.Parse(textBox.Text)<5)
{
Move (1,j,3+1);
}
else
{
Move (1,j,3-1);
}
}
}
程式主要的問題在於這個感測器數值textBox
它一直是在介面上刷新,而我時時在監測數值
而當我把textBox.Text當成條件式來使用時
條件式會直接讀取button按下去的瞬間的textBox值
來判斷它要走哪一行程式,在機器移動過程中
它就不會再去做判斷,假設button按下去時數值為3
它就只會執行Move (1,j3+1);
在這個迴圈走完前都只走一樣的路徑
即使過程中textBox數值改變都不會執行另外一行
我不太曉得問題出在哪裡,還是不能把textBox.Text
這個控制項來當作判斷式呢?
主要希望它能在過程中也能時時得到感測器的值
且根據這個值來做它必須移動到的點
或者有沒有可能這個跟多執行緒有關呢?
手機排版請見諒,希望能跟各位大大討論
小弟感激不盡,謝謝各位
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.124.33.222 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1583762126.A.377.html
→ konkonchou: 你需要一隻BackgroundWorker去處理timer_Tick 03/09 23:26
→ konkonchou: 或是IoT最常用的是非同步設計, 可以去瞭解一下 async 03/09 23:29
→ konkonchou: 和 await 非同步程式設計方式 03/09 23:29
推 Nilife: 先把text存到區域變數,判斷式讀這個變數? 03/10 07:29
推 s4300026: application.doevent 03/10 11:55
→ s4300026: form thread 在做事情時不會更新ui 03/10 11:56
→ s4300026: 所以tb.text 會拿到一樣的值 03/10 11:56
→ highbr520: 謝謝各位 我會嘗試看看的! 03/10 14:57