首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从s7-1200按类读取字符串的C# s7net问题

从s7-1200按类读取字符串的C# s7net问题
EN

Stack Overflow用户
提问于 2022-04-12 15:10:19
回答 1查看 193关注 0票数 1

在我的第一个C#项目中,我有一个类:

代码语言:javascript
复制
    internal class DbVisuStart
{
    //      Start                       6.0 -   
    //      Start_Lines                     6.0 -   
    [S7String(S7StringType.S7String, 40)]
    public string Start_Lines_Lines0 { get; set; } = "";    //  6.0 -   
    [S7String(S7StringType.S7String, 40)]
    public string Start_Lines_Lines1 { get; set; } = "";    //  48.0    -   
    [S7String(S7StringType.S7String, 40)]
    public string Start_Lines_Lines2 { get; set; } = "";    //  90.0    -   
    [S7String(S7StringType.S7String, 40)]
    public string Start_Lines_Lines3 { get; set; } = "";    //  132.0   -   
    [S7String(S7StringType.S7String, 40)]
    public string Start_Lines_Lines4 { get; set; } = "";    //  174.0   -   
    [S7String(S7StringType.S7String, 40)]
    public string Start_Lines_Lines5 { get; set; } = "";    //  216.0   -   
    [S7String(S7StringType.S7String, 40)]
    public string Start_Lines_Lines6 { get; set; } = "";    //  258.0   -   
}

我正在使用S7.Net库,在第101行的class.cs文件中,我得到了一个异常,我不知道我的类有什么问题。

在VS2022中,输出数据是:

抛出的异常:"System.ArgumentException“在S7.Net.dll异常中抛出:"System.ArgumentException”在System.Windows.Forms.dll中,未处理的"System.ArgumentException“类型异常发生在System.Windows.Forms.dll中,请将S7StringAttribute添加到string属性中

我只对绳子有问题。请帮帮我。

编辑:这是来自class.cs文件S7.Net库的代码片段(Jason/s7netplus来自github):

代码语言:javascript
复制
            case "String":
                numBytes = Math.Ceiling(numBytes);
                if ((numBytes / 2 - Math.Floor(numBytes / 2.0)) > 0)
                    numBytes++;
                
                S7StringAttribute? attribute = type.GetCustomAttributes<S7StringAttribute>().SingleOrDefault();
                
                
                if (attribute == default(S7StringAttribute))
                    throw new ArgumentException("Please add S7StringAttribute to the string property"); //Line 101
                
                numBytes += attribute.ReservedLengthInBytes;
                break;

屏幕截图VS2022 class.cs与断点在第100行

System.Linq.Enumerable.SingleOrDefault (zwrócona)空S7.Net.Types.S7StringAttribute属性空S7.Net.Types.S7StringAttribute类型{Name = "String“FullName = "System.String"} System.Type {System.RuntimeType}

EDIT2:对不起,我用错了库的链接。现在它是正确的。

下面是我的程序中的调用路径:

代码语言:javascript
复制
        DbVisuStart dbVst = new();

    private void Timer1_Tick(object sender, EventArgs e)
    {
        timer1.Interval = 250;
        lblDateTime.Text = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
        ReadS7(this);//InvUpd(this.Controls);
    }

    private static void ReadS7(FrmMain frm)
    {
        //frm.plc.ReadClass(frm.dbVa, 1, 0); // this is without strings and is ok
        frm.plc.ReadClass(frm.dbVst, 1, 6);
        //frm.plc.ReadClass(frm.dbVAc,1, 718); // this is without strings and is ok
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-12 16:56:42

属性不支持S7StringAttribute,只能在字段中使用。我假设您的问题是属性的后台字段没有使用属性修饰(因为它们是自动生成的)。我看到的第二件事是,您使用了一个类,据我所知,您可以使用struct来表示数据。因此,您的课程应该重新考虑到这一点:

代码语言:javascript
复制
internal struct DbVisuStart
{
    //      Start                           6.0 -   
    //      Start_Lines                     6.0 -   
    [S7String(S7StringType.S7String, 40)]
    public string Start_Lines_Lines0;    //  6.0 -   
    [S7String(S7StringType.S7String, 40)]
    public string Start_Lines_Lines1;    //  48.0    -   
    [S7String(S7StringType.S7String, 40)]
    public string Start_Lines_Lines2;    //  90.0    -   
    [S7String(S7StringType.S7String, 40)]
    public string Start_Lines_Lines3;    //  132.0   -   
    [S7String(S7StringType.S7String, 40)]
    public string Start_Lines_Lines4;    //  174.0   -   
    [S7String(S7StringType.S7String, 40)]
    public string Start_Lines_Lines5;    //  216.0   -   
    [S7String(S7StringType.S7String, 40)]
    public string Start_Lines_Lines6;    //  258.0   -   
}

我个人切换到付费产品来自treager的IP S7链接.NET SDK

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71845097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档