2

我正在尝试使用 s7.net plus 库从 S7-1200 PLC 读取值。当我尝试从数据块中读取数据时,它会返回"WrongVarFormat"消息。我的代码是:

    using (var plc = new Plc(CpuType.S71200, "192.168.1.17", 0, 0))
    {
    //IP is responding
    if (plc.IsAvailable)
    {
        ErrorCode connectionResult = plc.Open();
        //Connection successful
        if (connectionResult.Equals(ErrorCode.NoError))
        {
            //Get data
            object b2 = plc.Read("DB1.DBD38");//This part always return "WrongVarFormat"
        }
    }

此外,我设置了 plc 设置,并将数据块和值声明为: S7-1200 DB1

4

3 回答 3

0

几乎整个方法public object Read(string variable)都由 try/catch 包装,当遇到任何异常时,它总是返回 ErrorCode.WrongVarFormat。

    public object Read(string variable)
    {
        ...
        try
        {
            ...
        }
        catch 
        {
            lastErrorCode = ErrorCode.WrongVarFormat;
            lastErrorString = "Die Variable '" + variable + "' konnte nicht entschlüsselt werden!";
            return lastErrorCode;
        }
    }

不管在 try-block 内部抛出什么异常,代码总是返回 ErrorCode.WrongVarFormat 并且有关崩溃的信息会丢失。

作为调试的帮助,可以将 catch 更改为:

catch (Exception ex)
{
    Console.WriteLine("Got exception {0}\n", ex.ToString());
    ...

代码应该为 WrongVarFormat 错误条件定义自己的异常类。catch 语句应仅捕获此异常,并且地址解析器中的 throw 语句应更改为抛出 WrongVarFormat-Ecxeption。

除非您愿意更改库的代码,否则您只能使用调试器来查找问题的原因。

于 2016-10-31T19:31:46.970 回答
0

此外,以防万一,请检查 PLC 配置是否允许。如果设置不正确,PLC 将拒绝任何请求。

https://www.youtube.com/watch?v=tYTjNG8YL-c

于 2016-12-17T21:33:35.820 回答
0
  1. 确保您的 plc 允许 Get/Put(在 HW-config 下)
  2. 您不能使用优化的块访问。
于 2021-12-02T12:06:47.790 回答