杂谈通信协议、modbus、工控.doc_第1页
杂谈通信协议、modbus、工控.doc_第2页
杂谈通信协议、modbus、工控.doc_第3页
杂谈通信协议、modbus、工控.doc_第4页
杂谈通信协议、modbus、工控.doc_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

标签: 无标签转载一篇文章:各种PLC通讯介质和协议介绍转载:各种PLC通讯介质和协议介绍紫金桥软件技术有限公司自从第一台PLC在GM公司汽车生产线上首次应用成功以来,PLC凭借其方便性、可靠性以及低廉的价格得到了广泛的应用。但PLC毕竟是一个黑盒子,不能实时直观地观察控制过程,与DCS相比存在比较大的差距。计算机技术的发展和普及,为PLC又提供了新的技术手段,通过计算机可以实施监测PLC的控制过程和结果,让PLC如虎添翼。但是各PLC通讯介质和通讯协议各不相同,下面将简单介绍主要PLC的通讯介质和协议内容。美系厂家Rockwell ABRockwell的PLC主要是包括PLC2、PLC3、PLC5、SLC500、ControlLogix等型号,PLC2和PLC3是早期型号,现在用的比较多的小型PLC是SLC500,中型的一般是ControlLogix,大型的用PLC5系列。DF1协议是Rockwell各PLC都支持的通讯协议,DF1协议可以通过232或422等串口介质进行数据传输,也可以通过DH、DH+、DH485、ControlNet等网络介质来传输。DF1协议的具体内容可以在AB的资料库中下载。AB的plc也提供了OPC和DDE,其集成的软件中RSLogix中就包含DDE和OPC SERVER,可以通过上述软件来进行数据通讯。AB的中高档的PLC还提供了高级语言编程功能,用户还可以通过编程实现自己的通讯协议。GEGE现在在国内用的比较多的主要是90-70和90-30系列plc,这两款PLC都支持SNP协议,SNP协议在其PLC手册中有协议的具体内容。现在GE的PLC也可以通过以太网链接,GE的以太网协议内容不对外公开,但GE提供了一个SDK开发包,可以基于该开发包通讯。欧洲系列西门子西门子系列PLC主要包括其早期的S5和现在的S7-200、S7-300、S7-400等各型号PLC,早期的S5PLC支持的是3964R协议,但是因为现在在国内应用较少,除极个别改造项目外,很少有与其进行数据通讯的。S7-200是西门子小型PLC,因为其低廉的价格在国内得到了大规模的应用,支持MPI、PPI和自由通讯口协议。西门子300的PLC支持MPI,还可以通过PROFIBUS 和工业以太网总线系统和计算机进行通讯。如果要完成点对点通讯,可以使用CP340/341。S7400作为西门子的大型PLC,提供了相当完备的通讯功能。可以通过S7标准的MPI进行通讯,同时可以通过C-总线,PROFIBUS和工业以太网进行通讯。如果要使用点对点通讯,S7-400需要通过CP441通讯模块。西门子的通讯协议没有公开,包括紫金桥组态软件在内许多组态软件都支持MPI、PPI等通讯方式,PROFIBUS和工业以太网一般通过西门子的软件进行数据通讯。最新技术文章紫金桥软件技术有限公司施耐德(莫迪康)施耐德的PLC型号比较多,在国内应用也比较多。其通讯方式主要是支持MODBUS和MODBUS PLUS两种通讯协议。MODBUS协议在工控行业得到了广泛的应用,已不仅仅是一个PLC的通讯协议,在智能仪表,变频器等许多智能设备都有相当广泛的应用。MODBUS经过进一步发展,现在又有了MODBUS TCP方式,通过以太网方式进行传输,通讯速度更快。MODBUS PLUS相对于MODBUS传送速度更快,距离更远,该通讯方式需要在计算机上安装MODCON提供的SA85卡并需安装该卡的驱动才可以进行通讯。除了上述两种方式之外,莫迪康的PLC还支持如TCP/IP以太网,Unitelway, FIPWAY,FIPIO,AS-I,Interbus-s等多种通讯方式。日系PLC欧姆龙欧姆龙系列PLC在中国推广的也比较多。在通讯方式上,OMRON现在主要采用两种通讯方式:Host Link协议是基于串口方式进行数据传输的通讯方式。当PLC进入MONITOR方式时,上位机可以和欧姆龙PLC通讯。在和欧姆龙通讯时要注意,两次通讯之间要留一定时间,如果通讯速度过快容易造成PLC通讯异常。ControlLink是欧姆龙PLC的一种快速通讯方式。Control Link通过板卡进行数据通讯,板卡之间有数据交换区,由板卡实现数据的交换从而完成数据采集功能。使用该方式通讯需配置欧姆龙的驱动。三菱三菱PLC的小型PLC在国内的应用非常广泛。三菱的PLC型号也比较多,主要包括FX系列,A系列和Q系列。三菱系列PLC通讯协议是比较多的,各系列都有自己的通讯协议。如FX系列中就包括通过编程口或232BD通讯,也可以通过485BD等方式通讯。其A系列和Q系列可以通过以太网通讯。当然,三菱的PLC还可以通过CC-LINK协议通讯。松下松下PLC和计算机之间可以通过串口和以太网进行通讯。其采用的通讯协议是MEWTOCOL协议。如大多数日系PLC一样,MEWTOCOL协议比较简单。包括紫金桥组态软件在内的许多软件都可以从PLC中直接读取数据。以上介绍的是国外的主流PLC设备通讯方式。除以上厂家外,还有很多PLC厂家:ps:关于西门子的部分描述我有不同意见。西门子的以太网通讯,其实西门子还是提供了接口函数供调用的,在网上有人撰写过文章阐述过工程中用高级语言(如c)编程直接和s7通讯而无须西门子的simaticnet软件。另外06年我也碰到过一家scada厂商提供了一个s7驱动,也是不需要安装simaticnet,实际效果还可以。系统分类: PLC/PAC|用户分类: 杂谈|来源: 转贴 VB的split函数这两天在写一个VB小程序,中间碰到不少问题,毕竟很少摸vb了,基本语法都快忘光了,好在有网络啊,哈哈,发现网络真是好,有什么不清楚的就上百度找,比如发现了一个以前没有用过的函数:split,帮了我大忙,否则我要自己编一个函数来实现这个功能。因为我的程序用到了ini文件,在ini文件里面的键值是形如:“A,B,C,D,E”,这样每条键值读出来就需要分解为A B C D E然后分别处理之,正好split函数就是干这个活的。split:返回一个从零开始的一维数组,其中包含指定数量的子字符串示例:Function testSplit()Dim a As Stringa = 1,2,3,4,dsd-ad5,6,45,656465,564,45Dim b() As Stringb() = Split(a, ,)Debug.Print b(4)End Function解释如下:Split函数 返回一个从零开始的一维数组,其中包含指定数量的子字符串。 FunctionSplit( ByVal Expression As String, Optional ByVal Delimiter As String = , Optional ByVal Limit As Integer = -1, Optional ByVal Compare As CompareMethod = CompareMethod.Binary ) As String() 参数 Expression 必选项。字符串表达式,包含子字符串和分隔符。如果 Expression 是零长度的字符串 (),Split 函数将返回长度为一的数组,其中包含一个空字符串。 Delimiter 可选项。单个字符,用于标识子字符串的界限。如果省略了 Delimiter,则假定空白字符 () 为分隔符。如果 Delimiter 为零长度字符串,则返回包含整个 Expression 字符串的单元素数组。 Limit 可选项。要返回的子字符串数;默认值为 -1,表示返回所有子字符串。 Compare 可选项。数值,指示计算子字符串时使用的比较模式。具体的值请参见“设置”。 设置 Compare 参数可以具有下列值: 常量 说明 Binary 执行二进制比较 Text 执行文本比较 系统分类: 其他技术|用户分类: 杂谈|来源: 原创 闲话MODBUS通讯(1) 关于Modbus是什么东东就无须多言了,因为这个协议实在是应用太广泛了,究其原因恐怕在于:1协议内容完全透明公开;2实现起来所需的硬件和软件都比较简单;所以在工作中经常碰到什么电度表、流量计需要和plc进行modbus通讯,或者两个厂家的产品之间需要交换数据也会想到用modbus。 这次想认真深入研究下,于是百度了半天,最后发现还是英文原版的modbus协议文本最好,毕竟是最正宗的啊。当然我是先看中文的,不明白了再翻英文的。另外还有一个就是安装了step7的modbus驱动(包括master和slave)后会有一个master和slave的pdf文件,其中讲述master的pdf文件还是不错的。举个例子我开始想当然的认为主站发给从站的电文中,地址就是如实写的,比如00001在电文中就是00 01,我用commix软件做master,发送报文过去,然后监控串口,我自以为返回的报文是“正确”的。然后换了一个专用的modbus模拟器发命令下去,却不对了,监控报文发现对方返回的内容偏移了一个bit,奇怪啊,后来查阅文档才发现,西门子网上课堂关于串口通讯的教程其中有个常见问题“如何计算modbus地址”,里面说可以参考modbus master 1.3节。在西门子的Modbus_master第1.3节有如下描述:In the transmission messages on the serial transmission line, the address esused in the MODBUS user system are referenced to 0.In the MODBUS user system itself, these addresses are counted beginning with 1.Example: The first holding register in the user system is represented asregister 40001. In the transmission message, the value 0000 Hex is transmitted as the register address when FC 03, 06, or 16 is used.The 127th coil is represented as coil 00127 in the user system and is assigned the coil address 007E Hex in the transmission message.即Modbus规定的地址是从1开始的,例如输出位(COIL STATUS)的地址范围是从0000109999,但是主站发给从站的报文中却是从00000开始的,即若要读取第127个输出位,则报文中该地址应为126即00 7E。闲话MODBUS通讯(2)现在很多人都有这个共识:用plc和现场的设备做modbus通讯的话,先用pc机测试下。于是pc上的串口调试软件就成为必备的利器了。我在百度上找了不少相关软件,有通用的串口调试软件如commix,也有专用的modbus调试仿真软件: l COMMIX V1.4只有一个可执行文件,可以自动生成modbus的crc校验码,但是毕竟不是专门的modbus调试仿真软件,用commix必须十分熟悉modbus报文格式;l MODBUS V3.16开始我觉得这软件挺复杂的,不知道咋用。用着用着就上手了,觉得相当的好啊。加拿大的一个叫做Calta计算机公司的东东,功能很全,用起来也很方便,我觉得最好用的一个modbus专用仿真软件。支持master和slave模式(还支持monitor模式即只监控串口),支持16,15,16功能码(但是对于15,16只能一次写一个变量下去),支持串口的报文监视;l MODSCAN只能做master,且不支持15,16功能码,界面还不错;l Modbus调试精灵V1.024找了好几个网站下载都是一个可执行文件,偏偏报告缺少什么dll文件,看上去是因为软件是用mfc写的,没办法只好去网上下了几个mfc的dll文件才运行起来。界面过于简陋,只能做master但是居然支持写多寄存器也考虑得不错了。另外还有几个modbus软件,带了某某公司的标志,用起来跟modscan差不多。系统分类: PLC/PAC|用户分类: 杂谈|来源: 原创 闲话MODBUS通讯(3)关于MODBUS RTU的crc校验,在百度上居然发现某些网页给出的算法有误,真是晕,还好找到了两段程序,一个是lad写的(就是亿万论坛上有网友发的340做slave的例程)另外一个是scl写的,模拟了下发现结果是相同的,再对照算法看完程序心中有数了。 附crc16的算法(应该是正确的,呵呵):装入一个16位寄存器,所有数位均为1。该16位寄存器与开始8位字节进行异或运算。运算结果放入这个16位寄存器。把这个16寄存器向右移一位。若向右(标记位)移出的数位是1,则生成多项式1010000000000001和这个寄存器进行异或运算;若向右移出的数位是0,则返回。重复和,直至移出8位。另外8位与该十六位寄存器进行异或运算。重复,直至该报文所有字节均与16位寄存器进行异或运算,并移位8次。这个16位寄存器的内容即2字节CRC错误校验,被加到报文的最高有效位。 系统分类: PLC/PAC|用户分类: 杂谈|来源: 原创 闲话MODBUS通讯(4)关于Modbus ascii协议不明白为什么modbus协议要分成rtu和ascii两种,资料上说ascii协议效率低但是实现简单,因为有确定的报文头部(冒号)和尾部(回车加换行),而且rtu中的一个byte数据比如10,在ascii中就要用两个byte来表示,即1的ascii码和0的ascii码,这就更不懂了,相对rtu而言,ascii实现起来能有多少方便的地方?也许,是我对串行通讯实现的基本原理包括从硬件到底层软件都不熟悉吧,只能这么说服自己了。除此之外,ascii协议与rtu协议的区别还在于校验方式的不同,前者采用了Lrc校验,后者采用了CRC校验。相比之下,LRC校验的却简单多了,即把报文内容(不包括头部的冒号和尾部的回车换行)相加,然后取反,再加1.最终得到的LRC校验码,如果和报文内容累加结果应该是0(进位舍弃)。为了实现这个算法,倒是费了点脑筋:首先两个ascii字符需要合并成一个byte数据,我先想到了字符串合并函数,想着先合并然后把字符串转换成int再转换成byte,于是去查手册,有的,但是实验下来不对,再看函数说明,其实是两个标准的IEC块,help里面说第二个串必须是数字云云。算了,自己编个块来解决吧。其实也很简单,因为ascii协议的数据部分每个字节都是09以及A-F范围内的,据此换算加起来就是一个byte的数了。后面的取反也没找到什么适合的命令,一时之间干脆也自己编了,正好前面曾经看过at指令的用法,在这里用上了真是很合适啊,看来平时不断的知识积累很重要啊,关键时候说不定就派上用场了。系统分类: PLC/PAC|用户分类: 杂谈|来源: 原创 闲话MODBUS通讯(5)关于modbus多主站轮询的问题。 其实这并不仅仅是modbus的问题,485通讯的好处是可以挂多个从站,但是问题随之而来,主站与各个从站通讯就成了问题,因为485通讯是半双工的,也就是发的时候不能收,收的时候不能发,换句话说大伙要有秩序要排好队。查阅西门子网上课堂里面关于串口通讯的教程,最后提到了485多站轮询的问题,给了两种解决方案:1、定时发送;2、以发送和接收完成标志来继续下次发送;个人觉得第二种方法效率比较高,当然如果在规定时间内容没有接收到正确数据,则应该继续下次发送而不是“苦等”下去。也就是应当有个timeout的设置。另外一般常见的retry我倒是觉得未必需要,如果这次收不到正确报文又何必再发呢?等下次轮询再发嘛,否则拖延整个轮询周期倒显得不好,只要把timeout设置的合适即可,也就是说每次轮询给从站一次机会足矣。在西门子论坛里面找到一个相关帖子:CPU为314(6ES7-1AE04-0AB0),外加CP341(MODBUSMASTERRTU),下载硬件及配置CP341驱动成功,但提示FB7,FB8不能下载,怎么办?是不是CPU版本问题? Dongle插了,什么程序先不下装,只下硬件,然后运行,OK然后在STOP状态下,下装blocks,然后就出现下面的错误!(D280)ErrorcompilingblockinS7-300CPU.UnabletocopytheblockptpSIMATIC300(1)CPU314S7Program(1)BlocksFB7.Doyouwanttocontinuethecopyprocedure?在线看CPU的故障报告:Event1of100:EventID16#6539Illegalcommandinblock(detectedbycompiler)FBnumber:7Moduleaddress:2820Operatingmode:STOP(internal)Internalerror,Incomingevent在线看CP341的诊断Modulenotavailable(I/Oaccesserrororparameterassignmenterror)兄弟们帮我看看怎么回事!谢谢了 谢谢楼上各位的答复,问题已经解决.老的CPU不支持FB7,FB8,改用了FB107,FB108测试收发数据正常.有点点收获,大家分享就是看了手册,发现FB8中大写的S及X可以不用.程序测试不用也能收发正常.不知道是不是瞎猫撞死耗子了,呵呵.现在还有些问题想求助兄弟们,望不吝指教.1.现场有四个从站,我采取何种方式来轮询每个站的数据.用四个发数据块,四个接收块,还是收发都只有一个数据块.数据块如何调度.每个站是不是FB8的DONE=1时FB7的EN-R才有效,还是EN-R一直有效?如果FB8的ERROR=1,对该站如何处理?是重新发送,还是程序直接跳过,轮询下个从站?看了siemens例程没有涉及到.做过相关方面的兄弟给点指点,谢谢了.刚接触通讯,不是很明白2.现场的距离超过50米,要加电阻,那么CP341的330欧姆电阻怎么加到4,11的管角上?8到底要不要接GND?如果两边等电位可以接,但一般都是不等的,那么8就可以不接了?是不是这样?希望可以得到兄弟们的指点,先谢谢了!1、我做过相关的通迅,我做的思路是每个从站有一个发数据块DB,一个接收块DB,在OB35中调用,通过计时器设定时间来同步改变FB7和FB8的接收和发送数据块号码来轮询,时间的占空为使能时间100ms和空闲时间500ms。不管从站是否返回数据,都得进行下一个从站的轮询,以免影响其它从站的通迅。2、如果是自己做接头自己焊一个电阻上去,如果是端子,跨接到端子上,8接到通迅接口的GND。 感谢lybin!您说的应该是在CP341里面建一个发送DB,一个接收DB吧?那么接收的数据如何转存?一个DB的话,下个站的数据不是覆盖了前面的数据吗?您怎么处理这个问题?您说的时间的占空为使能时间100ms和空闲时间500ms什么意思?能说的明白点吗?另外,我买的15针的一个D头,自己焊上去的,再焊加电阻的话,D头上面的塑料盖子都盖不上了,郁闷?一般来说发送DB和接收DB是公用的,也就是说只需要个发送DB,一个接收DB。发送时只管轮询,发送间隔(即楼上的说的占空使能)依据轮询次数、波特率、长度还有程序复杂程度而定。我比较喜欢用ClockMemory来做。另外发送时可将接收缓冲区清空一下。接收块始终使能,每个周期都对接收缓冲区进行数据提取,并将提取所得数据转存至其它地方。因为有校验,不用担心数据被覆盖。有点类似与生产/消费者的意思。我做的是每个从站建一个发数据块DB,一个接收块DB,通过时间来改变FB7和FB8指定DB块,不存在数据转存问题.如:在与1号从站通迅时,FB7和FB8数据DB块分别用DB1和DB2,在与2号从站通迅时,FB7和FB8数据DB块分别用DB3和DB4,在与3号从站通迅时,FB7和FB8数据DB块分别用DB5和DB6,.占空为使能时间100ms和空闲时间500ms意思为M值在一个周期600MS内开始的100ms为1,和500MS的时间为0电阻很小的,可以焊接在15针和9针的D型头内,我做过./club/bbs/post.asp?b_id=4&a_id=448343&s_id=0&num=18#anch系统分类: PLC/PAC|用户分类: 杂谈|来源: 原创 闲话MODBUS通讯(6)modbus的后续ModBUS总线是美国莫迪康(Modicon)公司(后被法国施耐德Schneider公司收购)在世界上首先推出的基于RS485的总线。ModBUS为Modicons BUS(即:Modicon 的总线)的缩写。首先, MODBUS 物理层是RS232/422/485 MODBUS PLUS 链路层采用的是HDLC,速度2.5M MODBUS TCP/IP 是把MODBUS作为应用层协议,TCP/IP作为下层协议其次, Modbus以及Modbus Plus有什么区别? Modbus是一种通讯结构,广泛应用在智能设备之间进行主-从方式通讯。一个Modbus信息桢包括从机地址、功能码、数据区和数据校验码。正因为 Modbus仅仅定义了通讯结构,所以可以使用RS232、RS422和RS485端口,可以使用光纤、无线等媒质实现通讯。而 Modbus Plus则是一种典型的令牌环网,完整定义了通讯协议、网络结构、连接电缆(或者光缆)以及安装工具等方面的性能指标。Modbus+网络中的设备通过令牌的方式实现数据的交换, 严格定义了令牌的传递方式,数据校验以及通讯短口等方面的技术参数。MODBUS PLUS比MODBUS的性能更好,通讯速率快,从协议开发上来说区别较大,modbus比较简单。-mb(modbus plus)Modbus Plus是为工业控制应用设计的多主站网络系统。该协议由MODICON INC.开发。Modbus Plus是一种高速令牌循环式现场总线,其传输速率达到1 MBaud,允许每秒最多支持20,000 words的网络速率。在一个网络中,支持64个节点的互连。在有中继器的情况下,传输距离可以从每段450m延长到1800m。一些网络也可以通过网桥互连。依靠“全局数据”可以得到数据快速交换的广播功能。这些“全局数据”通过令牌的形式被发送,即使在不直接通讯的情况下,每个节点也都接收该数据。-MODBUS TCPModbus协议需要对数据进行校验,串行协议中除有奇偶校验外,ASCII模式采用LRC校验,RTU模式采用16位CRC校验,但TCP模式没有额外规定校验,因为TCP协议是一个面向连接的可靠协议。对于Modbus的ASCII、RTU和TCP协议来说,其中TCP和RTU协议非常类似,我们只要把RTU协议的两个字节的校验码去掉,然后在RTU协议的开始加上5个0和一个6并通过TCP/IP网络协议发送出去即可。(以下摘自anybus网站)Modbus-TCP 网络的性能与以太网的类型和设计有很大关系,并且与不同设备通讯接口所使用的处理器性能也有很大关系。 Modbus-TCP 的协议效率高达约 60% 。这是因为其应用层协议允许在一个 TCP/IP 帧中传输多个寄存器,另外 TCP/IP 协议本身只增加了几个字节的报文头。 Modbus-TCP 是一种在自动化设备中用以太网作为数据传输媒体的务实的方法。在网络架构 ( 星型拓扑和智能交换机 ) 上附加的费用被证明是合理的,因为以太网能够传输大量数据,还能同时具有附加功能 ( 嵌入式 Internet 、 email 和文件传输 ) 。与其它工业以太网系统相比。 Modbus-TCP 的市场表现已明显领先,并且在考虑初始投资和充分利用现有资源上有明显优势。 系统分类: PLC/PAC|用户分类: 杂谈|来源: 原创 转载一篇文章:PLC的面向对象编程文章后面关于程序标准化的优越性,作者写到“传统的中国控制工业,一个程序设计由一个人完成,这样他还必须 负责现场调试,而拥有丰富经验的程序员一般是三十岁后,这时他已经成家,而显然长期出差对家庭不利,很多优秀的程序员为了家庭考虑不得不改行,要么转到管理岗位,要么去制造工厂搞设备维护,这是资源的严重流失。毫无疑问,使用以上的设计流程,我么可以让经验丰富的程序员搞标准库和架构的设计,而让刚踏入这 个行业的年轻人搞应用设计和调试,这不仅可以让老程序员继续他自己的工作,而不影响家庭,也可以让年轻的程序员参入现场调试,培养自己的经验,提高自己的收入。”感慨啊感慨。 作者:吴向阳 出处: 阅读:572 发布时间:2007-10-19 10:56:00 供稿:面向对象编程是计算机高级语言的一种先进的编程模式,在工业控制系统的PLC程序中也可以采用这种设计思想,虽然我们无法实现面向对象的很多优秀特点如 “继承”,甚至于它根本就不具备面向对象编程语言的特点,但面向对象编程的基本概念就是类和类的实例(即对象),我们只需要使用这种概念就可以了。在计算机编程中我们需要把一些事物抽象和归纳,才能编写类,而在工业控制系统中,控制对象如:电机,阀等等是很明显的控制类别,不需要抽象就可以很明显的针对它 们编写类,以下将会用到西门子的Step7编程语言和施奈德的Unity 编程语言来讲解PLC的面向对象编程。一、 实现方式在Step7中使用功能块(即FB)编程,一谈到此大家就会想到西门子提出的模块化编程,不错,就是这个模块化编程,但西门子提出的模块化、背景数据块、多重背景等名词并不能让大家很明白的理解和使用这种优秀的设计理念。如果大家从面向对象编程的角度去理解,则可以很好的理解这种设计模式。“FB块”被看 成“类”,它可以被看成是对相似的控制对象的代码归纳,如对MM440的变频器可以编写FB块:MtrMM440,这在面向对象编程中称为“类”,当需要 编程控制具体的电机时,可以给它分配一个背景DB块,在面向对象编程中称为类的实现(即创建类的实例:对象),当需要控制多个电机时,可以分配不同的背景 DB到这个FB块,即创建类的多个实例。Step7中有另外一种程序块,即FC块,以FC块为主的编程在西门子中称为结构化编程,这也可以类比于计算机编程中的面向过程编程,即纯粹以函数为主体的编程。施奈德的Unity软件编程可以更好的理解面向对象编程。它的DFB定义中包含输入/输出参数,私有/共有变量,以及代码实现,而这正是计算机的面向对象 编程中“类”的基本元素,而创建类的实例(对象)就像创建普通的“布尔”变量一样,只需在“Function Blocks”中定义这种“类”的变量即可。Step7和Unity都可以采用面向过程和面向对象编程方式,这两种编程方式的区别类似于计算机高级语言中的C语言和C+语言编程的区别。以下的讲解将会把Step7中的FB和Unity中的DFB称为“类”,Step7中的FB+背景DB以及Unity中DFB的实例称为“对象”。二、 面向对象编程架构以上讲解的是实现细节,而编程思想是建立在程序架构上的,不是某个局部使用了面向对象方式,则可以称之为这种编程就是面向对象编程。这种编程需要从以下方面着手:1、 电路设计的结构化。这里主要以自动线为主介绍,对于单机机床可以是它的简化结构,、自动线层:这是最高层次,它拥有一个主PLC,对属于它下面的各区域控制、工程层:拥有独立的配送电系统,但没有PLC,只有分布式模块,由自动线控制。顾名思义,它有着较大的独立性,可以作为一个单独的工程项目设计和制造,当自动线比较小时,可以省略该层次。、功能组层:根据工艺划分,将实现某一个工艺功能的区段设备划分为一个功能组,它隶属于工程层,当工程层被省略时,隶属于自动线层。面向对象编程并不一定要求使用以上的结构,但好的电气结构更利于面向对象编程。2、 任何控制对象逻辑都在“类”中实现。为了做到这点,必须分析与控制对象相关的信息,譬如,对于一个电机,有以下相关的信息需要考虑:输入信息:、电路保护信息,如电机的空气开关,热继电器等。、功能保护信息,如运动电机的限位开关,风机的风压开关,油泵的油位开关等。、启动和终止条件,以上的电路保护和功能保护都可能导致电机运转终止,复位也可能导致重启动,但这里的条件指的是正常运行的启动和终止条件,譬如顺序控制的流程步。、控制模式:如手动和自动等。、故障复位:通过复位信息,重新启动。输出信息:、控制输出,如控制电机的主接触器。、状态信息输出、故障输出。状态储存信息:用于代码实现的中间变量以及可以被人机界面读出的状态变量等把以上信息都整合到一个类中,并尽量使类的参数标准化。不过,同高级编程语言还是曾在一些差别,针对Step7,应该遵循的标准是:程序结构由FC实现,对象控制由FB实现,如下的一种结构体系(其电气结构来自上面的介绍):这只不过是一个粗略的PLC程序架构体系,好的架构应该更完善和科学。3、 规划好数据结构数据结构的定义相当重要,并尽量统一这些结构,不要顾虑存储空间,当今的PLC内存足以容纳大量的数据。说明一点的是在Step7中尽量不要在类的外部定义数据结构(UDT),而是在类里面定义,虽然会造成不同类中同一结构的重复性定义,但却提高了类的独立性。三、 优越性1、 标准化使用这种设计模式,可以将程序设计分为两个阶段,即标准库、基本架构开发,以及实际应用层面设计。其中标准库、基本架构是制定程序标准化的基础,而应用层设计是针对具体的控制工程编程,这样可以把程序设计人员分成两类,一类是标准开发,由资深程序员负责,一类是应用设计(其中程序调试规划到应用设计),由 经过标准化培训的一般程序员完成,通过这种分配就可以解决中国工业自动化中面临的尴尬局面。传统的中国控制工业,一个程序设计由一个人完成,这样他还必须负责现场调试,而拥有丰富经验的程序员一般是三十岁后,这时他已经成家,而显然长期出差对家庭不利,很多优秀的程序员为了家庭考虑不得不改行,要么转到管 理岗位,要么去制造工厂搞设备维护,这是资源的严重流失。毫无疑问,使用以上的设计流程,我么可以让经验丰富的程序员搞标准库和架构的设计,而让刚踏入这个行业的年轻人搞应用设计和调试,这不仅可以让老程序员继续他自己的工作,而不影响家庭,也可以让年轻的程序员参入现场调试,培养自己的经验,提高自己的 收入。这可能让某些人士担心,认为年轻的程序员可以参加现场的调试吗?可以肯定的是没有标准化支撑的程序不仅年轻的程序员编不出来,而且现场调试会问题多多。但有了好的标准化后,一年半以上工作经验的程序员就应该能够独立面对自动线。PLC中的面向对象编程的核心就是黑匣子编程,针对Step7,我们使用FB去实现每一个对象的控制,控制逻辑、报警处理、信号交换全在FB中,对于应用设计人员,不需要明白里面的代码实现,只需要了解该FB的功能以及如何使用好它就行,这样对于应用程序人员的编程能力要求大大降低,对于编程只不过是遵循架构,拷贝代码,改变输入输出条件而已。那么调试呢?很多人认为使用FB编程的最大麻烦就是FB的多次调用后,根本无法诊断这些代码,从技术层面上讲确实如此,我们除了从背景DB上查看信息外, 是无法在它多次被调用后监控代码的,但我已说过,这是黑匣子编程,我们不需要诊断这些代码,只需要知道什么样的输入、什么样的参数设定导致什么样的输出就行,代码的逻辑与功能好坏是由标准库开发人员负责的,这就要求标准开发人员需要对他设计的功能块在不同条件下进行不同的测试,保证无误,还需要编写完整、 详尽的功能说明文档,以便于应用设计人员了解这些块,标准架构并不是制定出来就一劳永逸的,针对千变万化的工程,它是需要不断完善和修订的,这也是一个工程公司可以实实在在进行知识积累的地方。程序不仅需要给调试人员使用,而且用户(设备维护人员)也需要了解,如果把完整的标准库文档给用户,可能存在技术外泄的可能,若不给,对他们诊断设备可能曾在困难,这就需要标准制定人员制作另外一分文档,即设备维护文档,其知识的透漏以用户能够使用程序进行诊断为限。2、 重用性和易管理型计算机面向对象编程的优点也有重用性和易管理型,在PLC中也存在,以Step7为例,需要讨论FC和FB的差异。观察数据类型,FB比FC只不过多一个 “STAT”类型,在使用上FB需要背景DB,FC不需要,但就这个差别导致FB拥有自己独立的数据储存空间,而FC的数据储存却必须借助公有变量(如中 间变量M或者共享DB),有这样一种准则,程序块的独立性越强,其重用性也越好,产生数据访问冲突的可能性也更少,则更易于管理。有些公司生产的PLC, 其程序语言没有类似FB 的这种特性,这时可以采用类似“FC+共享DB”的替代方案解决,但它的独立性已经大大降低。同样的代码,独立性是标准制定的一个重要环节,很难想象一个与其他功能块之间有着千丝万缕联系的功能块能够被作为标准块在不同工程中有效的重复使用。纵观计算机语言的发展,最开始的编程都是令人恐怖的,而当今的编程让人们得到很大的解脱,有很多现成的标准类库实用,人们可以把更多的编程精力放在实现功能本身上,PLC编程也应该朝这种方向发展,应该让更多的人从事应用层面的设计,那些标准功能块不应该重复的被不同人员开发,虽然各大PLC厂开发了大量 的程序库,但工业控制对象各式各样,不同行业都应该拥有自己的程序库,而代码的可重用性是评价这些功能块好坏的关键。3、 设计思想的先进性在电路图设计中我们早已经在使用针对控制对象的绘图方式,即把基本的主配送电路和PLC配置完成后,我们会针对每一个现场控制对象如:电机、阀、气缸等控制对象绘制电路图,他们的电源来自主配送电路,控制和反馈与PLC建立连接,硬件连锁根据实际情况调整,一个个控制对象就象搭建积木一样有组织的堆积起来,同样的,编程也是针对一个个控制对象使用相应的标准控制块实现就可以,把程序控制细节实现了有效的封装,使程序看起来简洁和易于维护,而好的设计可以 把原理图和程序进行很好的关联,甚至于做到一对一的关系,如原理图中的一个控制对象可以在程序中找到相应的FB调用与之对应,真正做到面向控制对象编程。可能有人疑虑,PLC编程大部分是步进编程,这一个个标准块都是针对控制对象的,那控制顺序如何实现呢?这就要求编写专门的顺序控制FB块,或者使用Siemens现成的Graph7来实现,这点与一般编程没什么差别。结 束语:现在的工业控制领域有很多程序高手,他们很精通算法,也有着自己的编程理念,当我和一些人探讨标准化时,他们认识到标准化的高效性,但认为这样无法体现自己的编程水准,是的,如上所述作为应用层面的程序设计是不要很高的编程水平,但要想想,一个人难道能一辈子去搞现场调试吗?若想体现自己的价值,可 以从事标准编程。我更希望他们能花一点时间研究程序架构,各行各业,真正的大师是系统架构设计者,编程小技巧只不过是为好的架构锦上添花。愿中国的工业自动化能够早日摆脱小作坊式的时代!关于Profibus PA的一些学习体会最近参加一个项目投标,涉及到了一些profibus pa的技术问题,为此上网找了些资料来看,主要是西门子的产品和资料,发现pa这个东西跟dp还是有点区别的。从硬件上看,分为防爆和非防爆两大类,配置和性能是不同的:DP/PA CouplerDP/PA LINK(若仪表数量少于20台左右可省略)三通Tap头:6GK1905-0AA00,每个仪表需一个终端电阻,每条PA线需要一个(去找了下魏德米勒的pa接头产品,内部集成有终端电阻,通过跳线开关来设置;有分路电缆接线型和插拔型提供1,2,4,8个分路的产品。西门子的三通价格听说为5k,折扣后也要2k,而魏德米勒的三通网上报价仅1k多)有源总线底板(连接Link和Coupler)导轨Pa电缆支持冗余关于导轨和有源总线底板,发现手册里面有矛盾之处:在PROFIBUS-PA应用手册里面关于非冗余非防爆的系统配置里面,选用了有源背板插块,但是导轨却选了标准导轨(但是没给出订货号);在2005年12月版的如何配置SIEMENS PROFIBUS PA总线仪表方案的2.2节却没有选用有源背板插块,导轨则明确为普通的标准导轨;显然有两种方式:有源总线底板热插拔导轨、普通导轨(用普通的总线连接器),那么第一本手册里面的描述就有误了,至少没有给出正确的导轨的订货号。而手册SIMENES PROFIBUS PA网络中可以接入多少台PA仪表中,则描述了每台LINK可以接5台COUPLER,但是由于dp slave数据量的限制,而导致一个link(作为一个dp slave)只能达到244 bytes。若一台仪表的输入字节数为15bytes,则只能接入16台仪表。所以单纯的考虑一个link挂几台coupler也要考虑好这个因素。从这点来看,一个pa网段能挂几台仪表,不仅要考虑供电还要考虑数据通讯量。关于im157和im1532的区别,我专门去西门子发帖子问去,有人说:接口模块说来话长,IM157是早期型号,据说已经停产,那时157和153是不可以互换使用的,即DP-LINK用153,DP/PALINK用157;目前西门子力推新的IM153,即将ET200M、DPLINK、DP/PALINK三个的接口模块统一为IM153,此时可以互换。IM型号中的1和2表示有室内、室外型号之分。软件组态时显示的是1个,其实代表了一套LINK。搜索了半天,总体感觉pa的资料太少,而且有点陈旧和凌乱。现场总线提出已经不少年头了,感觉就一个字:乱。也谈PLC程序的维护在亿万论坛里面看到有人贴了PLC调试步骤:PLC程序调试步骤 人的脑力是有限的,并且记事情也有时间性。过了N天就会忘记每次修改的原因,为什么要加这条指令,为什么要删除这个网络,让自己以后看自己以前编写的程序时都会很困惑。做到以下步骤,对所有程序理解与修改会有很大帮助的。 1、 把原有程序另存一个, 在另存的程序上作修改。文件命名一个主要的程序名称,标注第几次修改,并加上修改的日期,最好是在文件名外加上简要的修改标题。例如: 捆扎程序5(06.10.23翻板步进电机加条件) 2、 用.doc文件记录修改的年月日。 3、 在日期下面记录修改程序的步骤,增加或是删除了哪些指令等。并在程序的编辑条注释中做记录,以备下次修改。 4、 在.doc文件中详细记录修改程序的原因,所出现的故障现象是什么,故障是如何排除的。 5、 在.doc文件中标注修改后所现用的程序全名,包括日期与简要的修改标题。 6、 把过时与现用的程序用,过时文件夹与现用文件夹分开整理,按日期排列。 这样每次所作

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论