【发布时间】:2021-02-16 21:45:20
【问题描述】:
我创建了一个 opc 客户端以连接到 Rockwell Rslinx。我只使用了 OPCgroup.SyncRead 和 SyncWrite。 一切正常,我从 Rockwell plc 编写和读取标签。 为了测试 SyncWrite,我使用了一个正弦波,我在 plc 的趋势页面中正确地看到了它。 此外,当我按下表单上的按钮时,我设置了一个值,直到我按住按钮,当我释放按钮时返回零(比如说一个脉冲)。 该值写入PLC,我可以在趋势中检查它。然后我以表格的形式从PLC读回它。 为此,我用正弦波的值对 array[0] 充电,用脉冲的值对 array[1] 充电。然后将数组传递给 SyncWrite。 所以,正如我所说,一切都很好。 但现在我不得不添加一个新功能。这是一个二阶系统(T(s) 或二阶滤波器)。 我当然使用相同的数组,现在数组 [0] 是过滤器的结果,数组 [1] 又是脉冲。 脉冲从 PLC 读回,现在是扰动系统的力。 为了从正弦波计算切换到滤波,我使用了一个启用滤波或正弦波的按钮。 在这里我发疯了,因为当我切换到过滤器并按下生成要从 PLC 读回的脉冲的按钮时,主要是脉冲没有到达 PLC。 但最奇怪的是,在 array[1] 中我看到了脉冲的值。当我在下面的行中设置中断点时,我在调试中看到了这一点 同步写入
public static void Write_synchr(RSIOPC r)
{
try
{
DataToSend.SetValue(r.array_to_send, 1);
r.RSLinxOPCgroup_w.SyncWrite(1, ref r.SyncServerHandles_w, ref DataToSend, out SyncErrors2);
}
catch (Exception e)
{
MessageBox.Show(e.ToString(), "Error: ",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
更奇怪的是,有时我看到它工作,我不知道如何,但并非总是如此。所以我试图纠正,所以我来到了这一点。 当我看到它工作时,有时激活停用滤波器或正弦波的 sw 策略是不同的,但在我看来是错误的。事实上,它并不总是有效。 当它工作时,我可以看到并测试过滤器响应脉冲的行为,这很好。
【问题讨论】:
-
我使用 OPC 多年,代码和管理总是很耗时。大约 2 年前,我改用 Node-Red。如果您需要一些帮助来设置它,我可以给您一些工作示例。好消息是您不再需要购买 RsLinx!我几乎所有代码都使用 C#,但 Node-Red 可能需要一些 JavaScript,如果您不喜欢 JavaScript 的想法,那么 Node-Red 不适合您。