V老弟 2023-11-18 12:06 采纳率: 13.8%
浏览 15
已结题

C# S7.Net 报错

使用 S7.Net 读取或者写入数据时 报 startIndex cannot be larger than length of string. (Parameter 'startIndex')
我的代码
S7.Net.Plc plc = new S7.Net.Plc(S7.Net.CpuType.S71200, "192.168..", 0, 1);
plc.OpenAsync().Wait(100);
plc.Write("DB10.6.0", Convert.ToInt32("3"));

地址去掉".6.0"是报错
To few periods for DB address
就是地址问题

  • 写回答

3条回答 默认 最新

  • 噼里啪啦啦 2023-11-18 13:39
    关注

    看起来你在尝试和你的西门子PLC闲聊的时候地址输错了。就好像你要发短信给朋友,但是不小心输错了号码一样,短信当然就发不出去了。

    在你的代码中,"DB10.6.0" 这个看上去有点怪怪的,因为一般来说,地址应该是像 "DB1.DBW10" 这样的格式。DB10.6.0 这种格式通常是用来读写PLC中的某个特定的位,而不是整个字或者字节。而去掉 .6.0 只剩下 "DB10" 的话,就像告诉快递员只有小区名没有门牌号一样,他肯定不知道该送到哪儿去。

    如果你想写个整数到DB10的话,你得告诉PLC你想写到哪个具体的位置(字节)。假如我们要写到从第6个字节开始的位置,应该是 "DB10.DBW6"(如果是写字,也就是16位的整数)。

    所以,修改一下地址,再试试看。如果你的PLC IP是 192.168.1.1,那么代码应该像这样:

    // 初始化PLC连接,别忘了改成你PLC的实际IP地址哦!
    S7.Net.Plc plc = new S7.Net.Plc(S7.Net.CpuType.S71200, "192.168.1.1", 0, 1);
    plc.OpenAsync().Wait(100); // 等待连接打开
    
    // 把数字3写到DB10的第6个字节起的位置
    plc.Write("DB10.DBW6", 3);
    

    这就像是告诉快递员,你住在第1栋的601室。他就能准确地把包裹送到你手上了。

    不过记得,要确定PLC上的DB10存在,并且你有权限向那写数据。如果你的PLC设置了保护,可能需要解锁或者调整一些设置才能写入数据。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 12月3日
  • 已采纳回答 11月25日
  • 创建了问题 11月18日

悬赏问题

  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥15 Python3.5 相关代码写作
  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里