在我做一个工程中使用S7-200的编程口与现场的14台danfos FC102系列的变频器通讯时出现一些很奇怪的问题,现在的现场运行工况如下:
14台的变频器的启停是随机产生,情况是变频器停止时,变频器是不上电,及该变频不能通讯,那么如果使用
modbus库中得DONE位来启动下一个MSG块来读数据肯定是不行的了(是按照西门子提供的例程编程)。
我现在的做法用两种做法,出现的问题也不一样:
方法一:由于库中的MSG块在一次使用中不能同时使用,如果使用将产生“6”错误,现在不是变频器随机启动,我使用循环扫描的方式,不适用DONE位来启动下一个MSG块,使用循环移位的某一位来触发下一个MSG,如我现在要读32次数据,那么我使用一个MD 1000在启动数据中将其数值设为“1”即MD 1000的二进制数000000000000000000000000000001,那么将其左移移位变为:000000000000000000000000010,开始使用M1000.0去触发第一个MSG,下一个的MSG使用M1000.1以此类推,循环移位使用时间跳变来控制,现在思路是不管你变频器有没有开机,我都按照时间来控制读取数据。现现场出现的问题是:有时候数据能够读出,有时候数据不能读出,不是很稳定,不能读出时错位为“6”这表示有两个MSG在同时调用,可我明明是一个MSG在动作呀。
方法二,现在不是只能有一个MSG在同事调用吗。那么我使用间接地址份方式:MSG上有个9个参数:分别为:
EN:块使能
Frist:脉冲启动循环MSG块
SLAVE:从站地址
RW:读写数据
ADDR:从站数据区
COUNT:读写数据量
DATEPTR:存放数据区地址
我现在的做法是将:SLAVE、ADDR、COUNT与一个V性地址区相连,在扫描中将不同的值通过MOV给V,在每一次扫描结束后将DATEPTR的数据进行转移,现在现场出现的问题是,数据能够读出,也没有“6"e;错误出现,当是读取的数据有时正确有时不正确。以上的问题错误出现那个地方,给西门子电话,也没有完全解释清楚。