看板 C_Sharp 關於我們 聯絡資訊
各位先進大家好,小弟在做關於感測器方面的應用 我是使用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