硬件配置:1个主CPU 315-2 PN/DP,加6个扩展IO IM153-4。硬件组态编译通过,程序块编译通过。
问题:利用s7-plcsim进行仿真的时候,能够正确访问315-2上的IO。但是一旦程序中试图读取IM153-4上的AI/AO,比如PIW312,仿真系统会亮故障灯SF,并自动进入STOP状态。IM153-4的DI和DO的读写都没问题。主CPU上的AI,AO,DI,DO读写也没有问题。
这是为什么呢?
注意:我在符号表中把PIW和PQW的类型都改成了INT (在符号表中新建这类地址时,系统默认生成的是WORD),因为调用FC105/106进行尺度变换时只能接收INT类型的变量,WORD类型不行。
使用公共DB对故障OB的结果进行存储。故障如下:
OB82未被调用
OB86未被调用
OB122被调用:
OB122_EV_CLASS = 16#29 OB122_SW_FLT = 16#42,意思是I/O读取错误
OB122_PRIORITY = 16#0A 出错OB的优先级
OB122_OB_NUMBR = 16#7A 表示OB编号122
OB122_BLK_TYPE = 16#8C OB122_BLK_NUM = 16#15 表示错误块为FC21
我确实是在FC21中读取了IM 153的AI
OB122_MEM_AREA = 16#20,使用字访问I/O区域(为什么他认为我访问的是I/O区域而不是输入的过程映像PIW?)
OB122_MEM_ADDR = 16#138,出错的内存地址为312 (我确实在程序块中读取PIW312,该AI是IM153上的点)
OB122_PRG_ADDR = 16#18
OB122被调用意味着系统认为输入模块损坏到不能读取的程度。我想知道,为什么在仿真模式下,IM 153的输入模块会被认为损坏呢?为什么主CPU的输入模块被认为是正常的呢?