请选择 进入手机版 | 继续访问电脑版

工业软件开发社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 107|回复: 2

关于读取AB PLC的string类型数据的问题

[复制链接]

1

主题

7

帖子

3

积分

新手上路

Rank: 1

积分
3
QQ
发表于 2019-8-6 16:02:27 | 显示全部楼层 |阅读模式
        现在HSL里边AB PLC的通信类(.\Profinet\AllenBradley\AllenBradleyNet.cs)其中读取字符串string类型数据的方法使用的还是继承自父类NetworkDeviceBase.cs中的方法,这个方法的位置在:.\Core\Net\NetworkBase\NetworkDeviceBase.cs  (ln380)
         有兴趣的同行可以在demo文件里加断点,最后会到这里。
         我要说的是我在使用的时候发现AB PLC没有写相对应的读取string类型的方法,基类的方法读取上来的数据在转换成ASCII码之前,是一个数组长度90的byte数据,这个数组(暂命名array[90])的array[0]==206,array[1]==15,array[2]是有效数据长度,array[3],[4],[5]==0;从array[6]开始才是真正的string数据。这里,array[2],[3],[4],[5]可能都是数据长度位,也可能前两个是数据长度,后面是用0补位,我没细研究。
          NetworkDeviceBase.cs中的这个 ReadString()方法,需要传入两个参数,但第二个参数只能传1,(传0也能运行),传入大于1的数就会报错,(错误码255,未知错误)。而且我在AB中添加的string 变量默认长度是82,虽然我实际有效数据长度可能只有不到10,但ReadString()会读取90长度的数据返回,我没找出来这个90是根据什么设定的值。

          现在我说说上边的调试流程。你只要在NetworkDeviceBase.cs的380行ReadString()方法上加断点,然后运行Demo,选择AB PLC那个,然后连接PLC,填写正确的变量标签名,在“字符串读取”按钮左边填入读取长度:1,点击“字符串读取”,好了,单步调试吧。你会发现读取上来的result.Content是一个长度90的byte数组。你的字符串变量长度小于84,那就全读上来;大于84,我不知道会发生什么。
          暂时想要读取字符串并解析成功就只能改代码,自己写一个ReadString(),重新编译一个dll出来。

          感觉大家用AB PLC用的少。实际上我这边用的也少,我主要用的是西门子S7-1500系列的产品,这是刚好电气的人手里有个AB的PLC,我拿来玩玩。
回复

使用道具 举报

41

主题

222

帖子

3107

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3107
发表于 2019-8-12 08:20:52 | 显示全部楼层
收到,打算开始改进这个字符串读写的接口信息。
回复

使用道具 举报

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2019-8-12 15:58:37 | 显示全部楼层
需要的话可以远程连接使用我的AB PLC调试。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|bbs.hslcommunication.cn

GMT+8, 2019-8-23 04:22 , Processed in 0.074899 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表