[問題] textBox數值更新

作者: highbr520 (工數煞到地平線)   2020-03-09 21:55:24
各位先進大家好,小弟在做關於感測器方面的應用
我是使用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
這個控制項來當作判斷式呢?
主要希望它能在過程中也能時時得到感測器的值
且根據這個值來做它必須移動到的點
或者有沒有可能這個跟多執行緒有關呢?
手機排版請見諒,希望能跟各位大大討論
小弟感激不盡,謝謝各位
作者: konkonchou (卡卡貓)   2020-03-09 23:26:00
你需要一隻BackgroundWorker去處理timer_Tick或是IoT最常用的是非同步設計, 可以去瞭解一下 async和 await 非同步程式設計方式
作者: Nilife (Al-Qaeda)   2020-03-10 07:29:00
先把text存到區域變數,判斷式讀這個變數?
作者: s4300026 (s4300026)   2020-03-10 11:55:00
application.doeventform thread 在做事情時不會更新ui所以tb.text 會拿到一樣的值
作者: highbr520 (工數煞到地平線)   2020-03-10 14:57:00
謝謝各位 我會嘗試看看的!

Links booklink

Contact Us: admin [ a t ] ucptt.com