S7-1200与V20变频器USS通信学习中遇到的几个问题总结
S7-1200与V20变频器USS通信学习中遇到的几个问题总结
1、通信数量:
S7-1200最多支持三个CM 1241 RS485模块和一个CB 1241 RS485 通信板,最多可建立四个USS网络,每个网络最多16 个V20,总共支持 64个V20。
2、调用USS_PORT_SCAN功能块的时间间隔的设置
USS_PORT_SCAN功能块用来处理USS网络上的通信,它是S7-1200 CPU与V20的通信接口。每个CM1241 RS485模块有且必须有一个USS_PORT_SCAN功能块。每次调用此功能可处理与一个变频器的一次通信。 用户程序必须尽快调用此功能以防止与变频器通信超时。通常从循环中断OB调用,以防止变频器超时以及使 USS_DRV_CONTROL 调用的 USS 数据保持最新。
该循环中断OB 的循环时间应设置为最小调用间隔的一半左右或更短。注:这一点非常重要,实际实验中波特率使用9.6K,OB30循环时间使用默认的100ms,一台变频器通讯还正常,连接两台变频器后报F72通讯故障,后改为30ms后正常。不同波特率与最小调用间隔时间的对应关系见S7-1200系统手册。
3、读写指令执行时,报16#818A错误
USS通讯是半双工通讯,在任何特定时刻,每个变频器只能激活一个读或写请求,不然会报16#818A(参数请求通道正在由该驱动器的另一个请求使用),所以同一个驱动器的读写只能轮询。其实USS_DRV_CONTROL也是在轮询,只是不同的USS_DRV_CONTROL的切换由USS_PORT_SCAN自动完成,不需要自己编写轮询程序,但要保证所有USS_DRV_CONTROL的背景数据块必须为同一个。
总结一下,就是同一变频器无法同时激活两个操作,不同的变频器可以同时激活各自的操作。注意:读写指令不能单独使用,在调用读写功能块之前,必须先调用USS_Drive_Control指令。
4、轮询程序的编写
西门子提供的示例程序如下:读写指令的DONE位为1,或者ERROR位为1,且错误不是16#818A,或者通讯超时,执行下一条轮询程序。但在试验中发现轮询不下去,需要使用done位的上升沿才正常。

USS_RPM和USS_WPM指令DONE位的说明
注释:DONE位为1表示已从电机驱动器读取有效数据并已传给CPU,但是它不代表USS库能够立即读取另一参数,必须将空的PKW请求发送到电机驱动器并由指令确认,才能使用特定驱动器的参数通道。立即调用指定电机驱动器的USS_RPM或者USS_WPM会导致16#818A错误。
根据以上的说明,虽然还是不太明白,但感觉轮询时DONE位要使用上升沿信号,不然的话会因为done位复不了位,报16#818A错误而无法轮询,只等待是不行的。
5、通讯不上,CM1241模块Tx指示灯闪烁,Rx灯不亮
主要检查PLC和变频器 USS 通信参数设置是否一致,主要是通讯协议、波特率、奇偶校验、地址等参数,另外断线也会造成这种情况。
变频器通讯参数按照下表检查

涂颜色的这五个参数,无法通过工厂复位恢复出厂设定值,只能手动修改,P2034、P2035这两个参数说明书说的是MODBUS通讯参数,实际上是和USS通用的,上次学习MODBUS RTU通讯,把P2034改成0,无校验,这次用USS通讯怎么也连不上,把它改成2,接着就好了。
另外还发现一个问题,博途V15软件串口通讯用于USS通讯时,好像总是偶校验,在端口组态内如何修改都无效。
6、2个未解决问题,需进一步研究。
6.1 S7-1200连接两个V20,其中一个变频器断电,另一个变频器也报F72,即使复位后,仍不能通讯,必须全部送电才能正常通讯。
6.2 USS_PORT功能块无法读取错误信息,无论停哪个变频器,error位都不置1。

