




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、主题:应用探讨一S7-200自由口通信一发帖整理 强大而灵活的自由口通信能力,是S7-200系统的一个重要特点。S7-200 CPU 的RS485通信口提供了建立在串行通信基础上的“自由”通信能力, 数据传输协 议完全由用户程序决定。通过自由口方式, S7-200可以与串行打印 机、条码阅 读器等通信。而S7-200的编程软件也提供了一些通信协议库,如 USS协议库和 MODBUS RTU从站协议库,它们实际上也使用了自由口通信功能。开设本话题的目的,在于澄清自由口通信的基本概念,强调使用中的要点,讨论应用的常见问题。经过此次集中交流,解决了如下一些问题:1. 自由口通信基本概念2. 自由口通
2、信编程指令的使用和技巧3. 自由口通信常见问题4. 产品功能建议更多信息请参考下面文档。“下载中心”参考文档:文档编号“ 1109582' S7-200可编程控制器系统手册文档编号“ A0136' 西门子 S7- 200?L0G0!?SIT0P 参考以下为本次探讨的发帖整理,查看原始交流内容请点击 此处。1. 自由口通信基本概念(1楼5楼)2. 自由口通信编程指令的使用和技巧 (6楼一一15楼)3. 自由口通信容易犯的错误 (16楼一一24楼)产品功能建议(25楼一一27楼)quote:以下是引用BABL在2011-01-20 15:17:08 的发言:我回来了,项目终于做完了
3、,可以回家过年了,:)。自由口通信真是折腾的我好惨啊,简单回顾一下,希望对像我这样的菜鸟有些借 鉴作用。先感谢一下西门子论坛和热线,没少骚扰他们。在完全没有准备的情况下甲方又加进一个仪表, 做什么自有口通信,晕阿!没办 法,迎着上吧!网上搜资料,看手册,越看越糊涂!时间紧迫,还是直接上手做吧首 先是把PLC和仪表连接起来,可仪表的口是rs232的,热线工程师告诉我得 做rs232/485的转换,打车到市场上买个转换器(打车钱比设备钱还多,可见现场多么偏僻阿),听卖转换器的老板给我分析了一下每种的区别一一不光是价 格的区别,说实在的,当时非常惭愧,老板懂的比我多多了。买回来后自己动手焊线,一个人
4、费了九牛二虎之力,焊的那个惨样就不用说了, 还好有壳可以包装一下。焊好了,实验一下效果吧,不知到怎么做了,打电话。热线工程师告诉我找个串口调试工具,连接到pc机上测试。在串口调试工具上发一串数,在 200上收,ok!高兴坏了,没白忙活。硬件上应该没问题了,接下来开始做程序了。先得理解仪表的协议,弄清了仪表先要收到请求数据的命令,然后根据命令做出 响应。同样,先用串口调试工具和仪表连接进行通信测试,还算聪明吧,:)!然后开始在200里编写收发程序,开始时整个思路都是乱的,无从下手。就把 200手册上的例子程序整个抄上,在 cpu224的两个接口间进行通信实验。经过不停的实验,终于一点一点地理解了
5、控制字节、 控制参数的含义,怎么设置 接收结束条件,怎么使用中断、怎么控制接收和发送等等。ok,开始真正地与仪表通信了发请求命令,收数据,可收到的数据是 ASCII码,得进行数据转换。根据大侠们的提醒,经过实验知道了怎么将 ASCII码转换为实际的工程数据。到此基本结束了,虽然说着好像也没什么,但只有我最了解其中的痛苦,不停地 实验,不停地修改阿!后面在实际运行中又遇到了有时通信中端的问题, 将双绞线的屏蔽接到地上后暂 时还没出现问题。总结一下,个人认为作自由口通信需要做好以下几方面工作:1、最主要的是多动手,光看资料是没有用的,只有自己亲自去动手实验一下才 能发现问题和帮助理解。2、做实验是
6、找个串口调试工具(我用的是 sscom32)是必须的,可以帮助你测 试你的通信线,调试你的程序,尽量不要直接与设备进行通信, 通信不上不好分 析原因。3、我认为200手册上的例子程序非常好,基本的处理方法和编程方法都涉及到 了,可以根据你的需要做修改,当然首先要充分地理解他。4、遇到不太容易理解的,或有问题的,多和别人交流一下,从中可以得到不同 的思路。提前给西门子和坛子里的专家们拜年了!1. 自由口通信基本概念(1楼5楼)quote:以下是引用LaoHuai在2010-12-24 08:29:48 的发言:quote:以下是引用 happy Julia 在 2010-12-23 21:58:
7、54的发言:以前很少用自由口通信,但项目里要用呀,正在学习,就接到邀请了。请教各位大侠:S7-200自由口能支持的最高速率是多少呀,我希望通信能快点。还有它的数据位、停止位是几位呀,我好确定能和什么样的设备通信呀。最高波特率是115200BPS但需要1.2或者以上版本的CPU数据位可以是7位或8位停止位是固定的1位。quote:以下是引用300小小生在2010-12-23 13:52:59的发言:300也可以实现与上位机自由通讯的,S7-200自由口通讯是基于 RS485通讯基础的半双工通讯,因此,发送和接收指令不能同时执行。这点有点不好,在300里可以422通讯,但最好是PLC发送不要连续发
8、送,而接收倒没事。我有次在调试的时候发现上位机发了任务后,PLC设备要过好长一段时间才去执行, 后来请教了老师傅,老师傅说把发送端加个间隔时间就好了以下是引用 鼠老爹在2010-12-31 15:59:24的发言:不管是什么通讯,传送的都是二进制代码。 ASCII码与二进制协议的区别在于代码所表示内 容的方式不同。如 果使用ASCII代码,则数据不能直接用于数学运算,而必须转换成普通的二进制代码。这样会加重程序负担。但是ASCII代码用于通讯有一个好处,起始字符与结束字符比较容易确定和判别,它们一般不会出现在数据区。而用二进制代码通讯,数据无需转换即可直接 使用(高低位字节可能需要交换),PL
9、C的负担较小。但是起始字符和结束字符经常会与数 据重复。因此,用二进制代码通讯, 通常是靠字符数和定时器来确定接收终点,主从站之间的步调协调非常重要。以下是引用 Am_Programer在 2010-12-27 15:48:59 的发言:西门子S7-200系列PLC支持自由口通信协议。所谓自由口协议是指通过用户 程序控制CPU主机的通信端口的操作模式来进行通信。用这种自由口模式可以用 自定义的通信协议连接多种智能设备。自由口模式支持ASCII和二进制协议。在自由口模式下,主机处于RUN方式时,用户可以用相关的通信指令所编写的程 序控制通信口的操作。当主机处于 STOP方式时,自由口通信被终止,
10、通信口自 动切换到正常的 PPI 协议操作。自由口通信指令包括:XMT自由口发送指令;RCV自由口接受指令。用特殊标 志寄存器SMB30(端口 0)和SMB130(端口 1)的各个位设置自由口模式,并配 置自由口通信参数,如波特率、奇偶效验和数据位。发送指令(XMT和发送中断:发送指令允许 S7-200的通信口上发送最多255 个字节,发送中断通知程序发送完成。接受字符中断: 接受字符中断通知程序通信口上接受到了一个字符, 应用程序就 可以根据所用的协议对该字符进行相关的操作。接受指令(RCV :接受指令从通信口接收到整条信息,当接收完成后产生中断 通知应用程序。需要在SM存储器中定义条件来控
11、制接收指令开始和停止接受信 息。接受指令可以根据特定的字符或时间间隔来启动和停止接受信息。 接受指令 可以实现多数通信协议。自由口通信功能的用途:1. 通过RS-232或RS-485串口连接多种智能仪表或 RTU根据智能仪表或RTU 定义的通信协议编写用户程序与智能仪表或 RTU通信。2. 使用USS协议与西门子MicroMaster系列变频器通信,STEP7-Micro/WIN提 供USS协议库,S7-200 CPU是主站,变频器是从站。3. 创建用户程序来模拟另外一种网络上的从站器件。例如S7-200的用户程序模仿一个Modbus从站。STEP7-Micro/WIN提供Modbus协议库。
12、4. 采用自定义通信协议与PC通信。PC上的应用软件可以采用此方法方便的访 问S7-200的数据。这是第三方软件访问 S7-200PLC比较简便,廉价的方法。对于自由口通讯, 西门子的很多资料都做了比较详细的介绍, 其中还包含了大量的例子程序。由于通讯的不可见性,很多人还是不能很好的掌握,我建议大家:1、理解什么是通讯、 什么是串口、 什么是 232、什么是 485?没有过硬的硬件知识是不可能做出通讯的,你连线都不知道怎么接,怎么调试你的程序?2、仔细阅读西门子关于通讯的资料,不需要多只需要精,因为各种版本的资料基本是一样的,关键就是 SMB30 SMB86 87、88、89、SMW90 92
13、、SMB94自己 控制通讯过程需要SMB2把这些弄明白了,才有可能做出通讯程序3、使用PC的通讯软件协助调试,有了 PC的通讯软件可以看见通讯过程中的数 据,能够更方便的调试程序4、理解各种通讯协议。大家要注意串口通讯和协议是 2码事,不论是PPI、MODBUS 还是USS它们都有自己的协议规范,根据规范来写你就可以实现这种通讯。 只不 过PPI是不公开通讯协议的,没有办法写而已!最后建议大家自己做通讯,起码会做!至于用不用自己做就要根据你的实际情况 了,西门子提供的库也是很方便的!以下是引用 yanxiao在2010-12-24 13:50:10的发言:我看过不少问S7200通讯问题的贴子,
14、觉得很多问题并不是S7200的,而是串行通讯的共性问题,也就是对串行通讯本身概念的认识问题。下面我来谈谈在我的记忆中关于串行通讯的一些认识。1、串行通讯只有一个传输通道,每个时刻只能表达一种状态。不管什么介质,不管是什么 信号,我们用1表示一种状态,用 0表示另一种状态。2、只用1和0两种状态,是不能表达更多信息的。好在有一个物理量,对每个系统来讲是统一的,那就是时间。我们现在很容易做到不同系统之间的定时误差控制在PPM数量级。1和0在时间上进行有序的组合,就可表达近乎无限的信息。3、任何一个信号,如果不赋给它一些特点的意义,实际上没什么用。两个系统要通过信号交换信息,必须对信号有一个共同的约
15、定,这就是我们通常所说的协议。4、 最基本的协议是物理层面的 (那个0SI的七层协议模型, 第一层就是物理层协议)。RS232、 RS485 RS422这些是物理层面的一些协议。5、我们现在要谈的是异步串行通讯。异步,发达方和接收方之间,没有额外的通道来传送信息何时传送与接收。 每个信息单元的起止时间,发送方编在信息中,由接收方自已解码并同步。6、好。现在来讲一下传送一个字节的过程。在没有传送信息时,传输线处于空闲状态。规定:空闲状态为1。发送方(TX)准备发送,驱动传输线让它由1变为0,并持一位的时间长度,我们把这一位叫做起始位。接收方(RX),检测到传输线由1变0,意味着可能有信息要传了,
16、RX就持续检测,以验证这个 0是不是持续 了规定的一位时间长度,若是个合法 的起始位,就按约定的定时方式,把后续的传输线状态,接收为1个字节。TX在发完起始位后,就发字节中的第一个位(bit),并依次把字节中的所有位发完,每bit均持续相同的一位时长。然后再发校验位(如果约定发/收方都采用的话)、停止位。7、停止位,这个要说一下。我们知道起始位是0,而这个停止位,规定是 1,和传输线的空闲状态1是相同的。停止位规定的时长比较乱,有1位停止位(也就持续时间占1个位长)、1.5位、和2位停止位,其它时长的停止位好象没见过。停止位的作用,其一是作为一 字节单元的成员,给接收方定时用的,也就是下一个字
17、节,在停止位之后才开始。另一个作用,可供检查字节传送的完整性。因为停止位是规定为 1状态的,若在停止位的时间里测到了非1状态,表示这个字节传送有问题,有可能被接收方丢弃,传送失败。&若收发双方的停止位不相同,怎么办?这个在论坛上经常有人问。好,我们来分析一下。若TX是2个 停止位,RX要求是1个停止位,很好,TX多发的一个停止位,会被 RX看作 是空闲状态(也可认为是字符间隔),没有任何问题。若反过来,TX是1个停止 位,RX要求是2个停止位,有问题吗? 一般问题是很大的,但也有可能可以正常通讯。这要看TX是怎么发字节的。有些系统,硬件上,发送电路比较简单,没有缓冲机构,一个字节必须完
18、整发送后,才准备下一个字节的数据,而这个准备需要花一些时间的,这就给传送的时序上,停止位之后,有了空闲时间,相当于停止位 得到了延长。所以我曾经发过一个贴子说,S7200的发送改为单字节发送,每个字节之间有意插入一些延时,人为造成空闲时间,以充当停止位,但这个方法说 归说,我并没有试过。可惜的是,现在的系统,硬件都做得很完美了, 包括S7200, TX是有缓冲的,在一个字节还未发完前就可以接受下一个要发送的字节,硬件上保证一个字节发完后可以立即启动下一个字节发送,前后两字节间除了停止位,没有额外的间隙,这种情况下,接收方就要命了,RX认为还在收停止位时,下一个字节的起始位就来了,没办法完整接收
19、,通讯就失败了。9、波特率。两边设为一致就可以了。波特率不一致,铁定不能通讯。但允许有少 量的误差。停止位实际上还用来调节这个误差的。比如1个停止位,RX并不死板要求停止位是完整的1个位时长,实际只要停止位超过 0.5个位长就算是合格 了。波特率,就是每秒最快能传送 的位数,包括了起始位、停止位这些辅助位。实际每秒能传送的最快字节数,要看这些辅助位的多少。比如一个 11位结构的字节 单元:1起始位+8字节位+1校验位+1停止位,字节 最快传送速率为 band/11。好象还有一个概念,叫比特率,也就是有效的位传送速率,比特 率=8*( ba nd/11),也就是比特率比波特率要小的。10、RS2
20、32的TX和RX是两根独立的线,收/发可以同时进行,所以叫作全双工异步串行通讯。按我们日常两人交谈的经验,总是A说B听,当B要说时,A就停下来听B说。如果A、B同时说,这是吵架,要达到相互交流就难了。同样,通讯若同时收发,一般人会白白死掉很多脑细胞而写出的程序通讯效果还是很差。所以,即使RS232能双向同时,一般使用时也是收、发不同时的。11、RS485 RS232不错了,但局限性大大的。RS485收发同线,允许多少 RS485并联使 用,电气采用差分传送信号,可以抗干扰。S7200就属于RS485 RS485设备冋一时间只能发或再改,收发是分时的,所以叫做准双向。尽管S7200中可以同时缓冲
21、 8个NETR和NETW,实际在RS485层面,还是一个一个分时完成的(由系统程序根据 PPI协议协调)。RCV和XMT完全由用户程序控制,你就不能同时让两个都执行,否则就是哄抢资源而被S7200当成错误处理。12、RS422介于RS232和RS485 RS422和RS232一样收、发线独立,但电气上采用和 RS485 一样的差分信号。所以RS422能多机通讯,比 RS232传得远,但比 RS485浪费硬件资源。RS422只要软件上采用准双向的规则,通过发收线合并,可以简化为RS485,和RS485设备通讯。但RS485却不能复杂化成RS422使用。以下是引用 yanxiao在2010-12-
22、31 16:00:57的发言:再谈一个于关通讯效率: 这里的通讯效率问题,针对主站。从站,一般根据主站的请求,及时发回应答就行了,不存 在效率问题。当主站要同多个从站通讯时,就有一个效率问题。以modbus-rtu为例。1、 定时轮询。这恐怕是最原始的方法,也是效率最低下的。比如1秒钟轮询一个站,如果 3个从站,要3秒才轮到1次。2、 高效的轮询应该根据协议的定时来调整,尽量挤掉不必要的延时。modbus-rtu, 3.5个字节传送时间作为帧间隔,但是从站的回应时间没有标准规定,要先问清楚。一般的仪表,回应时间都是很短的,几十ms内都会有回应,你可以把回应超时设在100ms。当然仪表能提供这个
23、超时参数是最好了。当主站发完请求帧后,立即进入接收状态,随时准备接收从站的回应。但若到达超时时间还 未收到,则放弃继续接收,认为从站无响应,进入下一从站的通讯。3、如果3个从站只有1个在线上,按理说是通讯速度是最快的,但如果不采取一些策略, 则通讯速率会变成最慢的。轮询一个离线的从站,通讯要等到超时才结束,这肯定比在线的从站回应要慢得多,因此大部分时间浪费在离线的从站上了。策略是为每一个从站配置1个在线状态标记位,当从站有成功回应的,标记位=1,表示 在线,若该从站连续 N次(2次)没有回应或出错,置标记位 =0,表示离线。对于在线的从站,按正常顺序轮询,而离线的从站,则每隔一定时间或每隔一定
24、的轮询周期, 发一个请求给它,若有回应且正确,则置标记位为1,认为该从站已回到在线状态,若没有回应或出错,则继续保持离线状态。 这样,可以把花在离线从站的通讯时间,控制在一个合理的范围。以下是引用 鼠老爹在2011-01-01 23:46:42的发言:yanxiao的方案很在理,我做PC与PLC通讯所采用的策略基本如此。当时并不在乎效率,而是为了监视PLC的状态。因为下位机的开启是随机的。在 PLC 与第三方仪表的通讯中, 我还没有这样做过。 在我的理念中, 只有实时性要求不是很 高的场合, 与第三方仪表之间才会采用通讯的方式交换数据。 因为第三方仪表通常只能作为 从站,等待PLC的数据请求,
25、实时性无法得到保障。因此,我认为PLC在通讯上的效率已经无所谓了。就 像现在正在做的一个项目,PC连着数台PLC每台PLC要轮询16台仪表的32个数据,波特率只能是2400 (其它波特率不太容易匹配),每台PLC还 要同时处理16个模拟量,下 位机分布面积很大。考虑通讯的可靠性,PLC每2秒钟问一个仪表。这样走一圈就需要半分钟。选择通讯是因为这些数据本身的变化 速率很慢, 且不需要控制, 只要监视记录就行了, 无需考虑实时性。用户甚至提出每5分钟读一次数据。考虑到PC的屏幕上等待5分钟跳一次数据对操作者实在是 一种折磨,还是把轮询的周期定在 1 分钟(因为想偷懒,暂时还不 想进一步缩短周期)
26、。定时也没有什么精度要求,直接用 SM0.4 的上升沿来触发。在这种情况下, 不在乎下位机是否在线对通讯效率的影响, 而是在乎下位机状态是否能在监 视终端的PC上显示出来,避免无效数据被压入数据库。yanxiao 为大家提供了一种逻辑方法,若用户有此类要求,不妨一试。以下是引用 一粒尘在 2010-12-29 15:57:27 的发言:下面是我从 MICRO/WIN 帮助文件里改的一段自由口通信程序,实现接收到后(结束字为H0A),再发回去。1 、补充了发送完成中断启动接收服务程序2、 增加了模式开关切换通信口的模式,当开关切换由RUN切换到TERM时,为PPI从属模 式;当开关由 TERM切
27、换到RUN时,P0 口为自由口模式。3、 上一条有局限性,在用软件启动和停止PLC时,P0 口初始化为自由口,不论 PLC模式开 关是在 TERM 还是 RUN 位置程序如下ORGANIZATION_BLOCK主程序:OB1TITLED序注释BEGINNetwork 1 / 主程序LDSM0.1/ 首次扫描时,MOVB16#09, SMB30/- 选择 9600 波特/- 选择 8 个数据位/- 选择无校验M0VB16#B0, SMB87/初始化RCV信息控制字节/-RCV被启用/- 检测到信息字符结束/- 将空闲行条件检测为/信息开始条件。/ 初始化自由端口:MOVB 16#0A, SMB8
28、9 符)。M0VW+5,SMW90M0VB100,SMB94ATCHINT0,23ATCHINT2,9ENIRCV VB100, 0 区的接收服务/将信息字符结束设为hex 0A(换行/ 将空闲行超时设为 5 毫秒。/ 将最大字符数设为 100。/ 将中断附加在接收完成事件上。/ 将中断 2 附加在传送完成事件上。/ 启用用户中断/为端口 0在VB100位置启用带缓冲Network 2/"RUN" 时, SM0.7=1LDSM0.7/PLC 上模式开关状态:/"TERM" 时, SM0.7=0ATCH INT_1 10 / 触发传送ATCH INT_1
29、10 / 触发传送EUOSM0.1SSM30.0,1/SM30.1 SM30.0=0 1为 P0 口为RSM30.1,1自由口通信ATCH INT_1 10 / 触发传送ATCH INT_1 10 / 触发传送RCVVB100, 0LDSM0.7EDRSM30.0,PPI从属模式/ 切换到自由口后,先开接收服务/SM30.1SM30.0=0 0为 P0 口为ATCH INT_1 10 / 触发传送ATCH INT_1 10 / 触发传送END_ORGANIZATION_BLOCKINTERRUPT_BLOCKINT_0:INT0TITLE沖断程序注释BEGINNetwork 1 / 中断 0/
30、 接收完成中断例行程序LDB= SMB86 16#20 / 如果接收状态显示接收结束字符,MOVB 10 SMB34 / 则附加一个 10 毫秒计时器,ATCH INT_1 10 / 触发传送CRETI / 并返回。NOTRCV VB100 0 / 如果因任何其他原因接收完成,/ 则开始新的接收。END_INTERRUPT_BLOCKINTERRUPT_BLOCKINT_1:INT1TITLE沖断程序注释BEGINNetwork 1 / 中断 1/10 毫秒计时器中断LD SM0.0DTCH 10 / 分离计时器中断0中的用户XMT VB100, 0/ 将信息传送端口Network 2 / 网
31、络标题END_INTERRUPT_BLOCKINTERRUPT_BLOCKINT_2:INT2TITLE=中断程序注释BEGINNetwork 1 / 网络标题LDSMO.OII准备接收RCVVB100, 0END_INTERRUPT_BLOCK以下是引用LaoHuai在2010-12-27 23:04:36 的发言:quote:以下是引用 happy Julia 在 2010-12-27 21:30:45 的发言: 在这里真是受益非浅呀。可还有许多不明白的,发送指令XMTf艮容易啦,可是接收指令RCV怎么那么多起 始和结束条件。看的我都晕了,各位大侠能给我简单讲讲吗,大概是什么意思? 我应该
32、选择什么样的起始和结束条件呀?条件多,给你选择的就多。再看几遍就能明白了。如果觉得RCV麻烦,那就用字符中断方式接收数据,只要连接一个中断就可以了, 但要一个一个收。这个问题说起来和理解起来确实挺让人头疼的,但个人认为这是个非常好的问 题,如果能把这部分理解清楚了,对于S7-200自由口的应用应该有很大的帮助这里大概讲一下自己的理解,其他的大侠们可以补充和更正:以接收结束消息方式为例,通信伙伴的数据是一帧一帧发送的,比如通信伙伴每隔100ms 发送一帧 01 02 03 04 05给S7-200,S7-200接收这些数据,那么我们有几种方法可以正确接收到这些数据:50ms (小于发送间 后,启
33、动空闲时间 这可以看做是“字1、指定空闲线时间(可以理解为两帧数据之间的间隔)为隔时间100mS,则当发送完第一帧 01 02 03 04 05 检测,超过50ms即认为一帧数据结束,准备接收下一帧数据 符间定时器”结束消息方式。2、指定接收结束字符为05,则当接收到01 02 03 04 05后,即收到结束字符05后,认为一帧数据结束,再接收到的 01 02 03 04 05认为是下一帧数据,依此类推。这可以看做是“结束字符检测”结束消息方式。3、指定接收数据长度为5,则收到01 02 03 04 05(5个字符)后,即认为一帧数据结束,再接收到的01 02 03 04 05认为是下一帧数据
34、,依此类推。这可以看做是“最大字符计数”结束消息方式。4、其他条件还包括“消息定时器”、“奇偶效验错误”、“用户终止”等结束 消息的方式,或者这些条件的组合作为结束消息的方式。那么在应用中选择哪种结束消息的方式, 要具体情况具体分析。这话说起来很空 洞,但确实如此,因为自由口通信本身就决定了, 不同的通信对象间的数据帧格 式(或协议)是设备厂家自由定义的,这就要求事先充分理解通信协议, 并在此 基础上进行选择。另 外一方面,如果能灵活掌握这部分内容,还可以解决一些实际问题。比如大 家都知道数据要接收到接收缓冲区,而接收缓冲区的大小是有限制的(255个字节),那么怎么能够接收到大于255个字节的
35、数据呢(缓冲区溢出后前面的数 据被覆盖)?可以考虑设置“最大字符计数”为结束消息方式,将数据分为多个部分依次进行接收。以上理解没有考虑S7-200的具体应用细节,详细的技术细节可以参考手册说明, 仅供参考。quote:以下是引用一粒尘在2010-12-30 10:48:22的发言:quote:以下是引用半瓶醋在2010-12-29 21:39:10 的发言:以接收结束消息方式为例, 通信伙伴的数据是一帧一帧发送的,比如通信伙伴每隔100ms发送一帧01 02 03 04 05给S7-200,S7-200接收这些数据,那么我们有几种方法可以正确接收到这些数据:1、指定空闲线时间(可以理解为两帧数
36、据之间的间隔)为 50ms (小于发送间隔 时间100ms,则当发送完第一帧01 02 03 04 05后,启动空闲时间检 测,超过50ms即认为一帧数据结束,准备接收下一帧数据。这可以看做是“字符间定时器”结束消息方式。请教,这种空闲线时间结束,也能触发接收完成中断吗?SMB87亥设置成多少呢?1. 每接收一个字符会产生一次中断 ”;2. 每接收一个结束字符会产生一次中断”。两个指的不是同一个中断,1是指中断号8、25,2是指中断号23、241、字符中断”指的是SMB2每接收一个字符即产生一次中断。2、结束字符中断”指的是接收缓冲区出现指定的结束字符时产生一次中断。串口通讯协议都是由数个或更
37、多的字符(字节)组成一帧,每个字符都有各自特定的意义。对S7-200来说,接收到的每个字符都要从SMB2中过一遍。因此对于简单的通讯协议,可以利用SMB2的字符接收中断逐个读取字节,并排列成一个信息帧。但是这样的做法有个缺陷,即SMB2不断地发出中断请求;如果信息帧较长,处理一次所占用的资源较多。一旦 出现中断排队,不仅影响其它的程序运行,还有可能影响通讯的准确率。而采用RCV指令的结束字符中断,可以等待通讯的信息帧全部接收完毕(数据保存在接受缓冲区内)再一次性处理这些数据。quote:以下是引用LaoHuai在2010-12-24 11:42:19 的发言:我来发几个SMB2的例子(特别适合
38、初学者):SMB2为自由口接收字符的暂放区,从端口0或端口 1接收的每个字符都放在这里。SMB2只能存放一个字节字符,而对方发送的一帧可能是很多字符,所以在接收 到下个字符之前,应该在中断里将接收到的字符移走。每接收一个字符会产生一次中断,端口 0产生中断事件8,端口 1产生中断事件 25。例1:通讯方法(用串口调试软件)控制 PLC的输出:PLC写入如下程序:比如向PLC发1时,Q0.0亮,发2,那么Q0.1亮,发255, 那么从 Q0.0 到 Q0.7 都亮,发送 0,则都不亮。LD SM0.1MOVB 9, SMB30ATCH INT_0, 8。ENIINT_0:LD SM0.0MOVB
39、 SMB2, QB0用串口调试软件向PLC发1时,Q0.0亮,发2,那么Q0.1亮,发255,那么从Q0.0到Q0.7都亮,发送0,则都不亮,你可以试试。串口调试软件设置: 9600波特率,数据位 8,停止位 1,无奇偶校验。例2:如果有2个PLC,那么将两个通讯口( PORT)3 3接,8 8接。如果只 有一个PLC,那么用串口调试软件当主站也可以。主站程序:向从站发送 4 个字节的数据网络 1:LDSM0.1MOVB9, SMB30MOVB4, VB0MOVB1, VB1MOVB2, VB2MOVB3, VB3MOVB4, VB4网络 2:LDSM0.5EUXMTVB0, 0 / 每秒发送
40、一次从站程序 1:MAIN:OB1LDSM0.1MOVB9, SMB30ATCHINT0, 8ENIINT_0:INT0LDSM0.0MOVB SMB2, VB10ATCHINT1, 8INT_1:INT1LDSM0.0MOVBSMB2, VB11ATCHINT2, 8INT_2:INT2LDSM0.0MOVBSMB2, VB12ATCHINT3, 8INT_3:INT3LDSM0.0MOVBSMB2, VB13ATCHINT0, 8如 果 主 从 站 同 时 启 动 , 或 者 从 站 启 动 比 主 站 启 动 早 , 那 么 VB11=1,VB12=2,VB13=3,VB14=4.如果主
41、站先发送,那么 VB11就不一定是1 了,可能是2或3或4。从站程序 2:MAIN:OB1LDSM0.1MOVB0, VB10MOVB9, SMB30MOVD&VB10, VD80ATCHINT_0:INT0, 8ENIINT_0:INT0Network1LDSM0.0INCBMB10MOVBSMB2, *VD80INCDVD80Network2LDB=MB10, 4MOVB0, MB10-D+4, VD80这个例子只是比上个例子少了 3 个中断而已从站程序 3:MAIN:OB1LDSM0.1MOVB9, SMB30ATCHINT0, 8ENIINT_0:INT0Network 1LD
42、B<> SMB2, 1CRETINetwork 2LDSM0.0MOVBSMB2,VB10ATCHINT1, 8INT_1:INT1LDSM0.0MOVBSMB2,VB11ATCHINT2, 8INT_2:INT2MOVBSMB2, VB12ATCHINT3, 8LDSMO.OINT_3:INT3LDSM0.0MOVBSMB2, VB13ATCHINT0, 8如果1是起始字符,那么在中断0里加个判断,就不会发生接收数据错位的问题以下是引用 LaoHuai在2010-12-23 11:45:24的发言:我觉得做自由口通讯时容易出现的几个问题:10009 端口 0中同时执行 XMT/R
43、CV000B 端口 1中同时执行 XMT/RCV经常有人问,程序里只发送(XMT),怎么会出现同时执行 XMT/RCV呢?其实这个有4种可能:发送没结束,又执行发送接收没结束,又执行接收发送没结束,又执行接收接收没结束,又执行发送有3种解决方法:a用沿来执行。b在中断程序里来执行。c XMT用 SM4.5/ SM4.6来执行,RCV根据SMB86的条件来执行。2发送结束可以(应该)立即执行接收,但接收结束不能立即发送,应该延时发送。3用字符中断方式接收数据时,中断程序应该足够短,否则会丢数据,中断程序执行的时 间应该小于传送一个字节数据所需的的时间。以下是引用鼠老爹在2010-12-31 12
44、:53:40的发言:手册上给出的一些自由口通讯示例,S7-200多以从站的面目出现。因此在逻辑上,PLC等待网络上的数据请求,再发送应答数据;发送完毕后再次启动接收。如果PLC作为主站请求第三方仪表的数据,且使用的是自定义通讯协议在编程的时候会遇到一些看起来很奇怪的现象。以下是我在编通讯程序时遇到的问题和解决方法:1、 刚开始,按照一般的程序逻辑设置使用XMT和RCV指令。对仪表的轮询都很正常, 没有 异常情况发生。自以为程序走通了。2、 偶然切断了个别从站(在现场这种情况是很普遍的),发现整个通讯全部歇菜了。重启PLC头几台仪表的通讯正常,但是到了被切断的从站又OVER 了。3、 检查PLC
45、的状态信息,看不出异常。监控RS485总线,发现走过了空站号后 PLC的XMT 发送不出信息。4、 于是用VB写了一个从站的模拟程序与 PLC通讯。从监控上看出,从站有应答, RCV正常 处理接受信息后,XMT的发送没问题。而从站没有应答, RCV始终在等待,XMT便无法发 送信息。5、因此PLC端必须考虑终止接收。反复使用了几种方法,最终选用了定时关闭接受功能的 方法。6、在程序的初始化中配置通讯口和接收控制参数,然后将SM87.7( SM187.7)复位。7、XMT执行后将SM87.7( SM187.7)置位,启动接收以及一个定时器。&无论有否应答,都由定时器去处理信息并关闭RCV
46、功能,等待下一个通讯。9、 RCV指令在主程序中由 SM0.0使能。这点很重要。因为 SM87.7(SM187.7)被修改后, 必须执行一次RCV指令才能启停接收功能,所以 RCV作为指令”始终被执行不会影响整个 程序的逻辑关系,且程序看上去也简洁,其它地方只要操作SM87.7(SM187.7)即可。另外,在和一些集成了 RS485端口的仪表做通讯时,发现波特率的匹配上会有些问题。 主要 原因还是对主频进行分频后时钟脉冲引起的误差。这点上西门子的 PLC适应性比较强,而合信的PLC适应性差一些。有 网友问到 “PLC能否同时与不同波特率的对象通讯”的问题,窃以为可以解决。SMB30(SMB13
47、0)随时可以赋值,也就是说用户可以即时修改自由口的配置。按此逻辑,只要在XMT和RCV使能之前定义 SMB30( SMB130)就可以了。这一点与 VB对COMM 口的配置是 一样的;如果程序中没有操作 COMM配置的指令,VB就按控件特性栏中的配置执行; 如果 程序中有配置指令,就按程序的配置指令执行。以下是引用 困惑迷茫求助在2011-01-04 09:51:24的发言:我曾经使用过自由口通信,与36个仪表同时通讯,正常情况下通讯很好,可是只要其中一个仪表出现通讯中断后,整个通讯就全部崩溃,无法执行,请问那位高手能指点下,为什 么会出现该问题与多个设备进行通信时这时常见的问题,主要是因为在程序上缺少对错误时的 考虑,也就是只
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 自动扶梯的结构使用安全与检验考核试卷
- 消防用金属制品供应链管理考核试卷
- 电机在电力法规与政策的应用考核试卷
- 航天器电磁散射分析与仿真考核试卷
- 煤炭生物质耦合利用考核试卷
- 聚对苯乙烯纤维的耐气候性能改进考核试卷
- 皮革服装行业商业模式创新考核试卷
- 油料作物种植的农业水资源管理考核试卷
- 2025重庆华地资环科技有限公司校园招聘9人笔试参考题库附带答案详解
- 宽容公务员面试题及答案
- 2024-2025学年人教版PEP四年级英语下册期末试卷(3)(含答案含听力原文无音频)
- 2025中考(会考)地理综合题答题模板+简答题归纳
- 真需求-打开商业世界的万能钥匙
- 手术室不良事件警示教育
- 厂房分布式光伏系统施工进度计划横道图
- 2022版《语文课程标准》
- 金融集团监管原则和并表风险管理
- 有色金属工业项目可行性研究报告编制原则规定(试行)
- 教练技术一阶段讲义
- 玻璃配合料的制备
- 贵州省建设工程安全监督备案登记表
评论
0/150
提交评论