缓引【关于S7-200Smart自由口通讯,你能找出西门子文档里面的错误么?】一文的回复

已锁定

WWCWWC

西门子1847工业学习平台

  • 帖子

    8065
  • 精华

    145
  • 被关注

    1342

论坛等级:至圣

注册时间:2008-07-26

钻石 钻石 如何晋级?

缓引【关于S7-200Smart自由口通讯,你能找出西门子文档里面的错误么?】一文的回复

973

7

2018-04-10 08:00:30

缓引【关于S7-200Smart自由口通讯,你能找出西门子文档里面的错误么?】一文的回复

    在上周看到有这么一个找错误的贴子,大致的含义是西门子S7-200 Smart帮助文档之通讯---串口通讯---自由口通讯的案例有不足之处,请大家查找一番错误之源。我看到这个贴子,判断可能的原因是定义中断出错(仅仅按图片说明)。说实在,我自己真的还没有仔细去看过这些帮助文档中的案例程序段,仅仅只粗略的浏览了一下大致的内容,平时看到西门子文档最新推出,一般都是大致看一下内容,了解一个概况,到需要使用类似的文档时再细细阅读或者参考,那怕需要借鉴的某一些程序段都需要自己编写、验证再调用的习惯。

   问题的链接:

http://www.ad.siemens.com.cn/service/answer/tobe_solution.aspx?Q_ID=188114&cid=1076

   记得当时的回复是可能定义的中断号不正确,因为看到楼主说无法接收这茬说法。

   在星期天晚上,又看到这样的回复贴子,链接:

http://www.ad.siemens.com.cn/service/answer/tobe_solution.aspx?Q_ID=188291&cid=1076

   我的回复是这个问题我开始感兴趣了,等有时间再重新看看这个帮助文档,到底是否如同描述那样出了“状况”?按我以往对西门子工作者那种严谨的工作态度的认识,这个可能性非常之小。下午借了一个200 smart plc准备在晚上测试一番,看看问题的所在。西门子200或者200samrt这个帮助文件我每次看到关于200的问题的求助时,基本都推荐大家去下载看看,里面的内容非常广泛;也非常之实用是平时编程工作的参考,也是初级入门的好教材。

   西门子200 smart 帮助文档最新的版本是V2.0的,今天下午还特意下载了一个,以作为问题的参考作证。

   打开200smart的帮助文档,看通讯---参考通讯---自由口通讯下的常问问题集5有如下说明:“S7-200 SMART CPU 为通信主站,对通信从站发送查询报文后需要调用 RCV 指令接收从站的应答报文,如果从站故障或者通信电缆损坏时,S7-200 SMART CPU 的通信端口将始终处于接收状态。S7-200 SMART CPU 在指定时间段内对从站未发出任何应答的超时该如何处理?”

方法一:使用任意字符检测为接收消息的起始条件时,选择消息定时器和其它结束条件组合为接收消息的结束条件。

   首先,该程序的接收通讯数据的起始条件为任意字符,即只要有信息进来,则判断为信息的开始,其次,是采用消息定时器和其它结束条件作为接收信息的结束条件。

重新温固一下对200smart 自由口通讯各控制字节、字的认识开始:针对于通讯口prot0口

通讯控制字节,定义SMB87各位有具体的含义

通讯信息的起始,定义在控制字节SMB88

通讯信息的结束,定义在控制字节SMB89

空闲信息定时器,定义在控制字SMW90

信息定时器,定义在控制字SMW92

接收信息数量,定义在控制字节SMB94(这个字节是必须填写的内容)

验证例程一:

1)  定义通讯参数SMB30 = 2# 00001001

2)  定义通讯的控制字节SMB87 = 2# 10111100

3)  定义信息结束字符16#0A

4)  定义空闲先定时器SMW90 = 0;信息定时器SMW92 = 100(mS);通讯数据量SMB94 = 10(字符)

5)  定义发送完成中断,中断事件号9并连接到发送完成中断子程序

6)  编辑一个“TEST”检测字符串,并将此信息按特殊标志位SM0.5的脉冲发送出去

程序条例清楚,没有什么值得可疑的问题,这些基本都是编辑自由口通讯的基本步骤。

再看控制字节SMB87的具体定义:

SMB87   = 2#  1       0       1       1       1       1       0       0

                       使能            信息     空闲    信息    启用

                       接收            结束      线    定时器   定时器

   这个例程的含义是当发送“TEST”信息完成后,进入发送完成中断等待接收。如果接收到16#0A或者信息定时器时间到达后,作为信息接收的结束标记。

我用串口调试软件进行测试验证:

程序文档中有,这里不列举,看测试结果,图示:



程序能够以每秒时间间隔发送TEST数据到串口调试软件中正常显示。

   由于,文档中没有编辑接收程序的具体字符数据,我继续在发送完成中断中编辑接收指令,假设文档内容将接收指令数据存放定义在VB200开始的10个字节中,通讯数据暂定义为“SMART”。

大家都知道串口通讯为半双工机制,即一条通讯线路上只允许只有唯一的一条命令有效!

我将程序稍加修改,将发送条件的秒脉冲SM0.5修改为以人为的触发发送模式,地址为M0.0,以配合串口调试软件的特性。



   当激活M0.0发送使能位,使程序能够进入到发送完成中断,启用接收指令RCV时,接收的数据区中有“SMART”字符出现。再测试几次触发M0.0 = 0;1变化,所接收到的数据仅仅只是在指定的10个数据区中移动,这个主要原因是触发M0.0的时间周期机制及定义的信息接收条件引起的。

写到此,我真的开始放下了那个颗被所谓错误的决断的心态释然了。到底是哪里出的问题说该程序有错误?如果说有“错误”也不全面,也只是一个片面的理解,上诉说明仅仅是我对提问者的理解,所谓解铃还需系铃人,话说错误也应该有他的理由,无论是正确的还是错误的。从整个程序的含义上分析所谓的“错误”,我也只能说这个程序针对你的测试不够完善或者说编程测试者对通讯指令尚不够熟悉的原因吧。

   说起西门子工作者对待问题的严谨态度,我在文档的下面又一次找到了答案,缓引“例子程序请参见:超时处理1.smart例子程序中的 CPU 类型可能与用户实际使用的类型不同,用户可能需要先对例子程序做修改和调整,才能将其用于测试,例子程序仅供参考”。也就是说例子程序有可能在测试时,需要根据自己测试的内容(测试的软件及通讯数据量)稍加修改、调整的。

   再次打开楼主回复的内容,看楼主在回答的下面提示中看到无法接收的话题,哦,原来他指的应该是这些了(无法接收数据)。首先这个例子程序应该能够接收的,接收的条件也能够满足接收的需求(严格按接收控制字节测试),如果在完全按此例子程序无法接收的,也只是对串口调试软件通讯的认识问题了,即通讯线路上只能允许唯一的一条指令有效,而我测试的是该串口调试软件,即串口发送数据的按时间循环的,所以,可能会与plc的发送指令冲突了,修改发送指令触发条件后能够正确接收数据。但是,如果用其它软件方式测试通讯,那应该需要具体问题具体分析、对待了,这里的“片面”是指我测试的串口调试软件特性所致。


缓引【关于S7-200Smart自由口通讯,你能找出西门子文档里面的错误么?】一文的回复 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有7608条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

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