S7 200程序下载错误

在S7 200中我定义了配方0,相对应的分配150个配方数据;
 在一子程序Write中根据LD0的输入将不同的工艺参数写入不同的配方
 下面的程序Network有150个,至于LD0的输入是根据不同的产品工艺型号输入的,数字量DINT类型
 编译能全部通过,可是一下载就出现:编译91非致命错误,Network95 行3 出现错误,如果我把Network95到Network149全删掉,再下载就没有问题
 说明的是Network1——-NetWork94跟下面的程序完全一致,只是LD输入值不同;

 LD     SM0.0
 AD=    #I_IN:LD0, 35352
 EU
 CALL   RCP0_WRITE:SBR19, DEF0_RCP90:31, VB298

 与Write对应的还有Read子程序
 有150个Networks

 LD     SM0.0
 AD=    #I_IN:LD0, 35352
 EU
 CALL   RCP0_READ:SBR18, DEF0_RCP3:118, VB295

 
 编程电缆用的是USB/PPI非西门子原装电缆
 编程软件用的MircroWin 4.0 SP6  语言设置为中文  XP操作系统
 程序全部编译为11.2K大小,数据块10K   存储卡64K,存储卡每个配方78字节
 150个配方11.7K数据远小于64K  配方空间应该没问题的

 百思不得其解
 

问题补充:
S7 226CN

最佳答案

你可以做如下尝试:

 1. 将你的150个Write子程序分成3个
    WriteA:原Write的1—-50 Network

    WriteB:原Write的51—-100 Network

    WriteC:原Write的101—-150 Network

    调用的时候一起调用

    只是一种调试思路

 2.由于S7 200 系列 EU 与ED 每种指令在程序中不能超过256次
   
   你的EU指令是不是超过256次了?
   超过的部分 用
   NOT
   ED
   指令来代替来试试
 

提问者对于答案的评价:
今天经过测试,将Write子程序中的每个NETWORK

 
 LD     SM0.0
 AD=    #I_IN:LD0, 121
 EU
 CALL   RCP0_WRITE:SBR19, DEF0_RCP0:150, VB298

 
 每个NETWORK中都需要占用一个EU指令,这样Read子程序150个NETWORK 就占用了150个EU,Write子程序又占用了150个EU指令,而S7 200系列PLC  EU/ED指令每种只能使用少于256个,故下载出现错误,我试验中将占用15个EU指令进行变换,指令列如下:

 LD     SM0.0
 EU

 LPS
 AD=    #I_IN:LD0, 30203

 CALL   RCP0_WRITE:SBR19, DEF0_RCP60:90, VB298
 LRD
 AD=    #I_IN:LD0, 30251
 CALL   RCP0_WRITE:SBR19, DEF0_RCP61:89, VB298
 LRD

 AD=    #I_IN:LD0, 30252
 CALL   RCP0_WRITE:SBR19, DEF0_RCP62:88, VB298
 AD=    #I_IN:LD0, 35101
 LRD
 CALL   RCP0_WRITE:SBR19, DEF0_RCP73:77, VB298
 LPP
 AD=    #I_IN:LD0, 35102
 CALL   RCP0_WRITE:SBR19, DEF0_RCP74:76, VB298

 经过变换指令格式后,细数EU指令,整个程序EU指令为217个,下载至PLC无出现错误,程序现在运行正常

 大家回答都很好,只是  S7 200 / Net 对我的调试思路改变有很大影响  希望大家别有意见

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc349695.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2021年7月5日 上午12:09
下一篇 2021年7月5日 上午12:09

相关推荐

发表回复

登录后才能评论