倍福上位机TcHmi: 异步子线程调用ADS,更新UI界面

/// <summary>
/// 读(ASYNC),根据输入的变量名,读变量值
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private async void button1_Click(object sender, EventArgs e)
{
  string plcVar = textBox1.Text.Trim();
  string VarType = comboBox1.Text;

  Debug.WriteLine("读变量(ASYNC)Mian Thread start, 线程ID:{0}", System.Threading.Thread.CurrentThread.ManagedThreadId);

  try
  {

      await TaskAsyncReadAny( plcVar,  VarType);
     
      Debug.WriteLine("读变量(ASYNC),Mian Thread end,线程ID:{0}", System.Threading.Thread.CurrentThread.ManagedThreadId);
  }
  catch (Exception ex)
  {
      MessageBox.Show(ex.Message);
  }
}

public async Task TaskAsyncReadAny(string plcVar,string VarType)
{
  await Task.Run(()=>
  {
      Debug.WriteLine("TaskAsyncReadAny Thread start, 线程ID:{0}", System.Threading.Thread.CurrentThread.ManagedThreadId);

      string result;
      switch (VarType)
      {
          case "BOOL":
              TcVar<bool> tcVar1 = new TcVar<bool>(this.tcAdsPlcServer1.tcAdsPlcClient, plcVar);
              result = tcVar1.RemoteValue.ToString();
              break;
          case "INT":
              TcVar<short> tcVar2 = new TcVar<short>(this.tcAdsPlcServer1.tcAdsPlcClient, plcVar);
              result = tcVar2.RemoteValue.ToString();
              break;
          case "UIINT":
              TcVar<ushort> tcVar3 = new TcVar<ushort>(this.tcAdsPlcServer1.tcAdsPlcClient, plcVar);
              result = tcVar3.RemoteValue.ToString();
              break;
          case "UDINT":
              TcVar<uint> tcVar4 = new TcVar<uint>(this.tcAdsPlcServer1.tcAdsPlcClient, plcVar);
              result = tcVar4.RemoteValue.ToString();
              break;
          case "REAL":
              TcVar<float> tcVar5 = new TcVar<float>(this.tcAdsPlcServer1.tcAdsPlcClient, plcVar);
              result = tcVar5.RemoteValue.ToString();
              break;
          case "LREAL":
              TcVar<double> tcVar6 = new TcVar<double>(this.tcAdsPlcServer1.tcAdsPlcClient, plcVar);
              result = tcVar6.RemoteValue.ToString();
              break;
          default:
              throw new Exception("请设置变量类型");
      }
      //
      Action<string> action = new Action<string>((string str) => {textBox2.Text = str;MessageBox.Show(str);});
      textBox2.Invoke(action,new object[] { result });
  });
  Debug.WriteLine("TaskAsyncReadAny Thread end, 线程ID:{0}", System.Threading.Thread.CurrentThread.ManagedThreadId);
}
  • 执行结果
    在这里插入图片描述
读变量(ASYNC)Mian Thread start, 线程ID:1
TaskAsyncReadAny Thread start, 线程ID:9
TaskAsyncReadAny Thread end, 线程ID:1
读变量(ASYNC),Mian Thread end,线程ID:1
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 倍福(Phytec倍福技术(上海)有限公司)是一家专业从事嵌入式系统的设计、开发和制造的公司,其ADS(Advanced Development System)是一套基于C++语言开发的通用控制面板软件开发工具包。 倍福ADS上位机的通信方式,可以通过TCP/IP协议或者串口通信实现。在TCP/IP协议下,ADS会作为一个服务器的角色(监听一个指定的端口),当上位机连接到ADS时,ADS会创建一个新的套接字来处理与该上位机的通信;在串口通信下,ADS将串口配置为指定的波特率、校验方式、数据位和停止位等参数,通过串口收发数据来实现与上位机的通信。 在具体实现过程中,可以采用socket编程实现TCP/IP通信,或者使用串口库实现串口通信。同时,ADS可定制化配置,可根据客户的需求,选择合适的通信方案,并进行相应的编程实现,以实现ADS上位机之间的高效、稳定的通信。 ### 回答2: 倍福是一种智能硬件系统,可以在工业控制和自动化等领域中应用。在工作过程中,倍福需要通过串口与上位机进行通信。而在实际应用中,具体的ADS通信和上位机通信步骤如下: 首先,用户需要连接倍福上位机所在的串口,然后运行ADS软件,确保ADS已经连接上了硬件设备。在建立通信之前,需要首先给硬件系统进行编程,然后把编程代码上传到硬件设备中,这样才可以使设备与ADS软件相互通信。 接下来,用户需要在ADS中选择相应的端口、波特率等配置,并设置相应的命令。这些命令可以包括读取传感器数据、设定倍福输出信号等。在设置完成之后,用户可以通过ADS界面操作,并通过串口与硬件系统进行交互。 在整个通信过程中,硬件系统需要实现以下功能:处理ADS发送的命令信息,根据命令信息进行相应的操作,例如读取数据、处理数据等。在数据处理完成之后,硬件系统需要将结果通过串口返回给上位机。 总的来说,ADS上位机通信是一个重要的功能,它能够让倍福智能硬件系统与用户进行数据交互,实现更多的工业控制和自动化应用。 ### 回答3: 倍福ADS(Active Dual Sensor)是一种基于MEMS制造技术的高精度角度测量传感器,它可以通过串行外设接口(SPI)与上位机进行通信。具体来说,通过ADS的SPI接口可以向上位机发送传感器采集的数据,比如角度值、温度值等等。同时,ADS也可以接收来自上位机的指令,比如配置传感器的采样率、滤波器、校准等参数。通过这样的通信方式,上位机可以实时地获取倍福传感器的输出数据,进而进行更加精细的算法计算和控制应用。 在硬件接口方面,倍福ADS可以与各种MCU(Micro Controller Unit)进行接口。一些常用的开发板包括STM32F系列,Arduino,Raspberry Pi等等。同时,倍福也提供了Windows下的GUI(Graphical User Interface)软件,可以对ADS进行配置和数据读取。值得一提的是,ADS的SPI接口通信速率可以高达10MHz,保证了高效率的数据传输。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值