Chris
发布于 2025-09-18 / 15 阅读
0
0

C#与PLC 基于modbusTCP通讯

使用 loTClient

在Nuget内添加

声明 

    public partial class Form1 : Form

    {

        ModbusTcpClient PLC;

        V_GVL GVL = new V_GVL();



 InitializeTimer();//ms循环采集



private void InitializeTimer()

{

    // 创建 Timer 实例

    timer1 = new System.Windows.Forms.Timer();

    timer1.Interval = 100; // 设置定时器间隔为 1000 毫秒(1秒)

    timer1.Tick += Timer_Tick; // 绑定 Tick 事件

    timer1.Start(); // 启动定时器

}


private async void Timer_Tick(object sender, EventArgs e)
{
    
    // 每次定时器触发时检查 GVL.Runing 的值
    if (GVL.PLC_OK)
    {
        
        try
        {
            await LoadPlcD(sender,  e);  // 正确等待异步方法
        }
        catch (Exception ex)
        {
            Console.WriteLine($"加载PLC数据时出错: {ex.Message}");
        }
        if (GVL.PLC_TestInt >= 1)
        {

     private async Task LoadPlcD(object sender, EventArgs e)
     {
         await Task.Run(() => Forfor());  // 在后台线程执行同步操作
     }


 private void Forfor()  //记录数据
 {
     //UI_Model            
     string rawString2 = PLC.ReadString("37400", 1, 3, null, 25).Value;

     GVL.PLC_Model = SwapStringBytes(rawString2, Encoding.ASCII); // 自定义方法交换字节

     UI_Model.Invoke(new Action(() =>
     {
         UI_Model.Text = GVL.PLC_Model;
     }));

 GVL.PLC_R = PLC.ReadInt16("5000").Value;//MD2500*2


评论