西门子S7-200 CPU226MODBUS读取绝对值编码器的疑问

已锁定

蜡人

  • 帖子

    1
  • 精华

    0
  • 被关注

    0

论坛等级:新手

注册时间:2013-04-09

普通 普通 如何晋级?

西门子S7-200 CPU226MODBUS读取绝对值编码器的疑问

2207

1

2013-09-17 11:59:07

做了将近半个月了的项目,听起来很简单:用西门子S7-200系列的CPU226读取多圈绝对值编码器,编码器支持的是基于RS485的modbus通讯协议。
编码器说明书关于协议的描述:上电发送头文件01(编码器地址) 03(功能号) 02(代表编码器发送的数据长度为2byte) XX是编码器高八位数值 XX是编码器低八位数值 XXXX是 CRC 校验码。波特率9600;编码器地址是01。
个人以前没有做过类似项目,也是个菜鸟级别的,所以找来了一些资料学习了基于RS485的modbus通信相关知识,项目开始前总结了对于这款编码器识别的相关信息。
这款编码器是徐州生产的,如上说明书所述,功能号03,说明数据西门子modbus库内的保持型寄存器一类的通讯,读取”字”类型的数据,西门子modbus库支持最多120字的信息,够大了。
通过与编码器厂家联系,知道了发送的每个字符之间间隔为发送1char所用时间,发送的每个帧之间的间隔为3.5char所用时间。而这个编码器发送没帧的字符数为7位,所以如果用波特率来计算的话,发送3.5char时间为(9600/7)*3.5≈2.6ms。
使用modbus库进行,可是返回MBUS_MSG返回08错误,而且在我输入的数据存储的间接地址内读不出编码器任何数据(监视MBUS_MSG命令内的DataPtr无任何接收到的数据)。
在这里还有几点疑问:
1. 既然功能号是03,说明为保持型寄存器,使用modbus库应该是4XXXX。
2. 通过学习,个人总结后认为modbus RTU格式的报文开始(01 03 02)和结束字符(CRC校验)无法作为接收开始和停止的符号,所以用自由口编程不太适合。原因是开始的字符有可能和数据重复造成通讯错误,而结束的字符是不固定的,而且即使可以固定,也有可能与数据重复,所以不可以通过检测开始和结束字符作为通讯开始和结束的判断。
3. 如果用自由口编程,用发送结束中断来作为帧结束的接收结束标志,时间2.6ms太短了吧,PLC来得及进行吗?这个PLC的反应时间我不确定?各位专家帮我看看,可以通过帧间隔时间的判断(中断号23/24吧)实现吗? 也考虑过可以让厂家通过延长帧间隔发送时间来试试,但自己又不甘心在目前条件下做不出来,而且让厂家改动也比较麻烦,而且这个项目用编码器来检测位移,实时性不可以太差,所以至今也没有联系厂家要求修改一下试一试。毕竟如果成功了好说,不成功厂家也没有耐心陪我玩了。以后再有其他事情找编码器厂家也不好使了,就像狼来了的故事,虽然我们是顾客,也要懂得做事情的规矩吧,我是这么想的。
4. 编码器厂家告诉我编码器发送的地址单元分别为:地址单元:01(50H)03(51H)02(52H)XH(53)XL(54)CRCH(55H)CRCL(56)停止位,以此类推地址递加。那么MBUS_MSG的Addr填写40050吗?还是40051?
5. MBUS_MSG内DataPtr与Addr是否相互关联?如何计算?比如Addr填写40001了,是不是DataPtr必须输入&VB200?
6. 最重要的一点信息,编码器厂家告诉我编码器只是不停的往外发送数据,不做出应答,那如果是这样,还可以使用MOBBUS库吗?因为西门子S7-200 modbus库的MBUS_CTRL内有一项TimeOut参数是关于从站应答的,如果像厂家所述没有应答,是不是会造成错误?
有时候越是做出出来越是混乱,我想我现在也许处于混乱的状态吧,每天睡觉都想着这些搞不清的问题…
西门子S7-200 CPU226MODBUS读取绝对值编码器的疑问 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200

共有33257条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。