作者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://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1583762126.A.377.html
1F:→ konkonchou: 你需要一只BackgroundWorker去处理timer_Tick 03/09 23:26
2F:→ konkonchou: 或是IoT最常用的是非同步设计, 可以去了解一下 async 03/09 23:29
3F:→ konkonchou: 和 await 非同步程式设计方式 03/09 23:29
4F:推 Nilife: 先把text存到区域变数,判断式读这个变数? 03/10 07:29
5F:推 s4300026: application.doevent 03/10 11:55
6F:→ s4300026: form thread 在做事情时不会更新ui 03/10 11:56
7F:→ s4300026: 所以tb.text 会拿到一样的值 03/10 11:56
8F:→ highbr520: 谢谢各位 我会尝试看看的! 03/10 14:57