C# 使用S7.net plus库读取S7-1200 PLC

C# 使用S7.net plus库读取S7-1200 PLC,c#,plc,s7-1200,siemens,C#,Plc,S7 1200,Siemens,我正在尝试使用S7.net plus库从S7-1200 PLC读取值。当我尝试从数据块读取数据时,它返回“ErrorVarFormat”消息。我的代码是: using (var plc = new Plc(CpuType.S71200, "192.168.1.17", 0, 0)) { //IP is responding if (plc.IsAvailable) { ErrorCode connectionResult = plc.Ope

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

    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设置,并声明数据块和值如下:

几乎整个方法
公共对象读取(字符串变量)
都由try/catch包装,当遇到任何异常时,它总是返回ErrorCode.ErrorVarFormat

    public object Read(string variable)
    {
        ...
        try
        {
            ...
        }
        catch 
        {
            lastErrorCode = ErrorCode.WrongVarFormat;
            lastErrorString = "Die Variable '" + variable + "' konnte nicht entschlüsselt werden!";
            return lastErrorCode;
        }
    }
不管在try块中抛出什么异常,代码总是返回ErrorCode.ErrorVarFormat,并且有关崩溃的信息丢失

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

catch (Exception ex)
{
    Console.WriteLine("Got exception {0}\n", ex.ToString());
    ...
代码应该为ErrorVarFormat错误条件定义自己的异常类。catch语句应该只捕获这个异常,地址解析器中的throw语句应该更改为抛出错误的varformat Ecxeption


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

此外,为了以防万一,请检查PLC配置的许可证。如果设置不正常,PLC将拒绝任何请求


我这样做了,发现主要错误是“接收字节数错误”。。。