【问题标题】: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"));