故事作者:水煮花生

最近创作

看看TA的故事

S7-200(SMART)的自由口通信运用的经历

已锁定

水煮花生

  • 帖子

    209
  • 精华

    3
  • 被关注

    3

论坛等级:侠士

注册时间:2011-04-14

钻石 钻石 如何晋级?

S7-200(SMART)的自由口通信运用的经历

3445

5

2021-02-24 15:35:25

感觉有关通信的讨论较多,也凑凑热闹。

------------------------------------------------

初次试探自由口通信,从PLC读仪表数据开始,当时有一套比较老的设备,仪表是国外的,自定义的协议,国内集成商可能是仪表和接口板卡开发比较熟悉,或许是为了满足客户不同的PLC品牌需求,没有采用PLC和仪表直接通信,而是做了一块接口板,接口板和PLC之间采用数字量模式(对于PLC一侧 DI 1 / DO 8+3+1+1),接口板和仪表之间采用RS232C通信。PLC8个输出点相当于并口,3个输出点相当于读写参数编号,1个读写指令点,1个高低位指令点。

一同事有点高级语言的底子,用VB作了一个简单的读参数测试,可以接收到消息串。于是本人饶有兴趣想试试PLC直接和仪表进行通信,翻看仪表的自定义协议,信息帧均是有指定的起始符和结束符,后面没有校验字符,现在回忆当时情况感觉还是有点幸运,如果校验复杂一点,可能就失去了继续深入的耐性了。对照S7-200的系统手册,看XMT和RCV的指令介绍,当时对于通信指令和中断指令都不甚明了,需要一点点尝试,终于有点眉目,能够成功的读取一个参数,后来在慢慢的加入逻辑,读取多个参数,对于RCV接收机制和指令使用太过生疏,加上对中断也没有深入的概念,容易出现断线且无法恢复,后来逐渐加了一些重发之类的逻辑,形成了一个逻辑繁琐可读性极差的初级版本。

 

后来有一个需求,有用户使用了多套年岁较高的纺织机械,之前用的是西门子变频器和S7-200,西门子变频器老型号停产,需要更换新的型号,因为是基于通信给定频率,即使是更换西门子的新型号,也需要变动PLC频率给定部分的程序,用户干脆在一台机器上换了富士的变频器,找厂家改动了程序,后来有某国产变频器经销商想说服用户更换他家的变频器,用户答应给试机的机会,不过需要经销商来适配PLC程序,经过辗转,一同学找我给点建议,本人对通信的经验实在是可怜,不敢乱说,只能说程序是可以适配,但水平有限,经验不够,还是另找高手实施。同学倒是把程序资料发过来了,(真的很感谢愿意告知密码的编程者!可以当例程学习,加深指令认知,开拓编程思想),程序量比较大,因为不搞这些设备,也不用去研究它的控制逻辑,只是专注于通信方面的程序。

对通信程序的研读,离不开变频器的通信手册,先对应富士的研究,富士的协议是自定义协议,起始符和结束符有既定规则,采用和校验,再带入参数地址和参数值进行对比。对于富士的通信大致明确之后,再看西门子的,西门子变频器用的是USS通信协议,(后来发现USS和DP的信息帧非常相似)。

通过认真研读,程序中对于通信的处理有两个方面完全出乎意料。一,未读之前,本人以为自由口通信无非是用XMT和RCV指令,读了之后才发现,程序编制者的根本没用RCV接收指令,而是用自由口接收字符中断,自由口接收信息时,PLC内部处理,每接收到停止位,把该字符缓存到SMB2,同时产生接收字符中断,这和RCV接收完消息帧之后将信息帧缓存产生接收信息完成的中断模式不一样。二,对于西门子变频器,有现成的USS通信指令库,程序编者也没有使用现成的库指令,(可能是设备年代较早,官方库指令还没有出来),编程者按照USS的协议格式通过自由口指令实现。

通信程序只是给定频率,正因为这种自由口编程的方式,使得这套程序适配不同品牌的变频器非常方便,主要修改两个地方,一对发送缓冲区的信息进行重新组织,二是对接收字符的中断程序进行处理。

程序中对于通信超时判断也很巧妙,主从式通信,通信由PLC发起,所以编程者在发送信息完成中断中,置位超时判断标志位,用这个标志位去使能一个100ms定时器,这个定时器的预置值就是超时时间,在接收字符的中断中,对定时器复位,直到到接收信息完成,将超时判断标志位复位,定时器非使能状态。

在读懂这些通信处理程序之后,基本上就是抄作业了(汗颜)。

还有一个小插曲,拟定更换的国产变频器支持的是modbus协议,modbus协议有两种模式,ACSII模式和RTU模式,前者是基于ASCII字符模式,信息帧采用LRC校验,后者基于数据模式,信息帧采用CRC校验,一般的,ASCII信息帧要比RTU模式略长。决定使用RTU模式,需要另外写一个CRC的计算程序,不同于和校验,CRC的校验过程会复杂一点。

按照原程序的思路写一段通信程序,和国产变频器进行通信测试,测试通过之后,感觉应该可以上机器试试了。

到用户现场试机时,照惯例,先上传原机器PLC的程序(用户有密码)并做好备份,记录各变频器中各参数和接点接线情况,结合参数和接点情况,摸清各变频器的运行配置模式,然后拆机,装上相应的国产变频器,按照同样配置模式进行接点接线和参数配置。

为避免不同机器之间程序的差异,在上传的原程序中,将通信程序进行修改之后,重下载回PLC中,开机测试,运行正常,现场观察半天,基本和更换前运行状态一致。

观察期间,用户发现有点差异,差异在于触摸屏显示上,更换之前某一台变频器运行频率会显示出来,且一直变化,但是更换之后,显示为空。在观察使用富士变频器的机器,发现也是类似的情况,跟用户讲一下,也就过去了,当时感觉应该是通信协议的问题,随后看西门子变频器手册后的USS协议部分,的确是协议的原因,USS协议中有PKW和PZD部分,每个返回的消息帧中,都会把预设的过程值在PZD部分传送回来,把特定的PZD部分取出来就形成了触摸屏中的过程值。

经过一晚上运行,第二天机器运转正常,就从用户那里撤离了。经过这次实践,对通信的认知提高了很多,以后面对通信问题也不会茫然失措了。

前几年,碰到一个通信的需求,一款仪表,自定义协议,支持RS485,消息帧是ASCII模式,在应用过程中,一台PLC连接2台仪表,需要分别读取过程值、读写5个参数值,读取过程值要快速,间隔读取参数值,有需求才写参数,通过设计轮询逻辑和读写参数插入时机,也能较好的满足应用需求。

S7-200(smart)自由口通信,编程者既可以通过SMB2和接收字符中断功能面对信息帧中的每一个字符,也可以通过RCV组态以整个消息帧为对象。就像一个底层平台开放出来,可以在这个基础上匹配各种通信协议。


发点工作中的浅薄经历,难免班门弄斧之嫌,确有贻笑大方之意!

S7-200(SMART)的自由口通信运用的经历 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

网友专栏

共有3227条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

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