【问题标题】:S7NetPlus plc.Write() not changing cartain values in data block (Siemens S7-1500)S7NetPlus plc.Write() 不更改数据块中的 cartain 值(Siemens S7-1500)
【发布时间】:2022-08-11 21:06:43
【问题描述】:

我正在使用 S7.NetPlus 库连接到 Siemens S7-1500。尝试从 plc 读取数据时,没有问题。但是,我在向 plc 写入新值时遇到了困难。我尝试过使用 plc.Write 或 plc.WriteClass。奇怪的是,运行模拟时某些值确实会发生变化(除了 DB46.DBX0.0 之外的所有值 - 似乎没有命令会影响该字段,即使尝试在 TIA v17 门户中更改其值)。

示例 1:

Plc.Write(\"DB46.DBX0.0\", true);       
Plc.Write(\"DB46.DBX0.1\",true);

示例 2:

data.START = true;
data.STATUS_FINISHED = true;
data.STATUS_ERROR = true;
data.STATUS_ON = true;
data.LIFE_BIT = (short)(ushort)1;
Plc.WriteClass(data, 46);

当连接到实际 plc 时,使用 Write 函数时不会更改任何变量。我能做些什么?

    标签: c# asp.net console-application plc siemens


    【解决方案1】:

    这已经解决了吗?

    我经历过类似的情况:我能够写入(S7-1500 OpenController)PLC,但最终它将停止写入。还是PLC停止接受外部写入的情况?

    似乎与控制器的连接已建立,写入功能执行无误,连接最终关闭。

    当从 Windows 应用程序写入 PLC 停止工作时,必须重新启动 PC 部分才能再次写入。但同样的情况不断重演。

    logText(string.format("Card {0} detected in range. ", cardID));
    logText(string.format("Previous detected state is {0}", prevDectedStatus));
    
    logText("Attempting to open a connectiong to the PLC");
    
    plc.Open();
    
    if (plc.IsConnected)
    {
        logText("Connection established");
    
        try
        {
            // The RFID
            rfidValue.Value = cardID;
            rfidValue.Count = cardID.Length;
    
            // The DateTime datatype must be of the correct S7 format.
            String dt = DateTime.Now.ToString("yyyy-MM-dd-HH:mm:ss");
            rfidTime.Value = DateTime.ParseExact(dt, "yyyy-MM-dd-HH:mm:ss", null);
    
            // Card in range
            rfidDet.Value = isCardDetected;
    
            dataItemsWrite.Add(rfidValue);
            dataItemsWrite.Add(rfidTime);
            dataItemsWrite.Add(rfidDet);
    
            logText(string.format("Attempting to write rfid={0}, time={1}, detected={2}", rfidValue.Value, rfidTime.Value, rfidDet.Value));
            plc.Write(dataItemsWrite.ToArray());
    
            logText("Done writing to PLC");
        }
        catch (Exception ex){
            logText(string.format("Caught an exception: {0}", ex));
        }
    }
    else
    {
        logText("Failed to establish a connection to PLC");
    }
    
    logText("Store state (prev=cur), used when card leaves field");
    prevDectedStatus = isCardDetected;
    logText("Done storing state");
    
    logText("Attempt to close connection to PLC");
    plc.Close();
    logText("Done, connection is " + (plc.IsConnected ? "open":"closed"));
    

    【讨论】: