1、plc属性中过程映像输入输出大小设置问题 在step中硬件组态plc属性中过程映像输入输出大小设置,我用317我看默认是256这个大小怎么设置?根据什么来设置看了不少帖子就是没搞清楚请高手帮忙谢谢最新型号的S7-300CPU在CPU属性页Cycle/ClockMemory页面中设置,V3版本以下大部分CPU无法设置。我的理解是过程映像没必要设置过大,因为每次扫描周期都要对这个映像寄存区进行扫描,越大,肯定月耗时间。再说映像寄存器外的地址空间,一样可以直接读取,所以除非有特殊需要,一般都不要修改映像寄存器。问题:如何在中断 OB 中使用或更新过程映像分区? 解答:组织块构成了操作系统和用户程序之
2、间的接口。它们由操作系统基于中断或事件进行调用。在过程映像访问期间,在分配给过程映像的 OB 的处理时间段内,CPU 可以使用一个一致的过程信号映像。如果在发生错误或正在调用中断 OB 时通过过程映像访问输入和输出,则属于该 OB 的过程映像提供的数值将会在所有时间一直可用。独立于其它 OB (例如 OB1) 中的程序及其过程映像,过程映像分区允许用户在报警 OB 中以最新的形式响应属于该程序的相关输入数据,或者通过输出尽可能快地影响相关过程。如果触发信号和相应的数值都放置在过程映像分区中,则相关数值对相应的 OB 运行系统保持一致性。过程映像在包含相应 OB 的过程映像分区中更新,其方式与
3、OB1 中的更新方式完全相同。 此更新的过程。 在 HW CONFIG 中将过程映像分区 (PIP) 分配给相关的输入/输出模块。 为此,双击模块。选择地址标签,定义模块的过程映像分区。 图 1:选择 PIP 然后可以将此过程映像分区分配给某个 OB。 为此,双击 CPU,在“Properties”下面选择其中一个中断标签。您可以在此处将该 PIP 分配给任何一个 OB。 图 2:将 PIP 分配给 OB 在调用此 OB 时,自动更新 PIP。 每一个 PIP 可以包含多个 I/O 地址或模块分配,虽然它一次只能分配给一个 OB。已经分配给过程映像分区的输入和输出地址不再属于输入和输出的 OB
4、1 过程映像。对于 OB1 过程映像和所有其它过程映像分区,所有输入和输出地址只能分配一次。 此外,还可以使用 SFC 26“UPDAT_PI”或 SFC 27“UPDAT_PO”在程序的任意位置更新过程映像,这样该 PIP 就不必再由系统更新了。 注意事项:PIP 不能自动更新。只有调用 SFC 或者启动和结束相关 OB 时才会进行更新。如果在我们的程序中请求了 OB 40,则会在此点实时读取相应的输入。在处理 OB 40 期间,这些当前值用于输入。时钟中断 OB 的过程映像分区不是由系统更新的,虽然它们与 OB (OB61-OB64) 是连接在一起的。S7-300/400的I/Q区与PI/
5、PQ区的关系S7-300/400的I/Q区称为过程映像输入区(PII)/过程映像输出区(PIQ),“映像”表示它们就像镜中花、水中月,访问它们并不是访问输入/输出模块,而是访问CPU存储器中的区域。只是在过程映像区刷新的时刻,I区和Q区的内容才与输入/输出模块中的实际值相同,因此它们并不能直接反映输入/输出的实际状态。S7-300/400的I/Q区与PI/PQ区(外设输入/外设输出区)的关系如下:1)访问PI/PQ区时,直接读写输入/输出模块,而I/Q区是输入/输出模块在CPU的存储区中的“映像”。使用外设地址可以实现用户程序与I/O模块之间的快速数据传送,因此被称为“立即读”和“立即写”。在
6、每次扫描循环开始时对P/Q区采用批量读/写的方式,因此造成了输入/输出的滞后。2)I/Q区可以按位、字节、字和双字访问,PI/PQ区只能按字节(PIB/PQB)、字(PIW/PQW)和双字(PID/PQD)访问。I/Q区和PI/PQ区可以使用相同的字节地址。3)I/Q区的地址范围比PI/PQ区的小,有的S7-300CPU的I/Q区只有128B,有的CPU可以在组态时修改I/Q区的大小。4)如果地址超出了I/Q区允许的范围,必须使用PI/PQ区来访问。例如如果I/Q区只有128B,在访问S7-300的模拟量模块时(其地址区从256号字节开始),则必须使用PI/PQ区的地址。PLC的存储区除了3个
7、基本存储区(系统存储区、装载存储区和工作存储区)外,在CPU中还有外设I/O存储区、累加器、地址寄存器、数字块地址寄存器和状态字存储器等。其中输入I位于系统存储区,称输入过程映像寄存器(又称输入继电器),在每次扫描循环开始时,CPU读取数字量输入模块的外接输入电路的状态,并将它们的存放过程映像到输入表中。用户程序访问PLC的输入(I)地址区时,不是去读数字信号模块中的信号状态,而是访问PLC中的过程映像区。而PI(外部输入寄存器)是用户可以通过输入寄存器直接访问模拟量输人模块,以便接收来自现场的模拟量输人信号。与直接访问I/O模块的PI相比,访问过程映像表可以保证在整个程序周期内。在程序执行过
8、程中,即使接在输入模块的外接输入电路的状态发生了变化,过程映像表中的信号状态仍然保持不变,直到下一个循环被刷新,所以在一个主循环中输入I变化一次,PLC的一个扫描周期是40-100ms,所以映像区刷新是受到系统程序的中主循环扫描周期的控制;过程映像的状态始终一致由于过程映像保存在PLC的系统存储区,I访问速度比直接访问PI快得多。外部输入寄存器PI是直接访问通过模拟量模块接收来自现场输入信号,所以在同一个程序中变化次数取决于模拟量变换器速度和模块中ADC转换器的积分时间(分4档2.5ms、16.7ms、20ms、和100ms),I映像区读取,PI物理区读取。说来很惭愧,接触s7300/400已
9、经10年了,对于过程映像区的概念依然不是非常清晰明了,今天在西门子网上看到网友的一段论述,写的还是不错的:1、I/O区可以对“位”寻址,而PI和PQ区不能,PI和PQ最小寻址单位是BYTE,如PIB256、PQW300.2、I/O区,按西门子的定义应该叫“过程映像区”,本身这个过程映像区自己也是带有外设地址的!比如IB0,它对应一个PIB0,它俩不同之处在于每个PLC扫描周期的开始,系统会将PIB0里的数据刷新到IB0内,然后在接下来的一个扫描周期之内,IB0的数据均保持不变(当然,如果调用SFC在程序内刷新输入端口,那又当别论),而PIB0则是实时的,即完全物理意义上的端口! 所以我们看到一
10、些S7-300标出最大I/O寻址为1024位,算算看,一块CPU带四个机架,每个机架装满八个模块,每个模块最大32点,那么4*8*32=1024位=128BYTE . .超过这个以后就是外设通道了,就只能以PI或者Q来表示了,而且这就意味着不对直接对“位”寻址了!如果你非要对位寻址,怎么办? 很好办:L PIB256T MB0那么MB0里的位就对应了PIB256的八位。由此我突然明白了,为什么一般要把di和do的地址放在前面,而ai和ao的地址放在后面,因为di和do一般按照bit来访问,ai和ao则是按照word来访问的。查了下手册,315-2dp(v3.0)的过程映像区为2k字节(2048
11、byte),412-1的过程映像区为4k字节。基本上,ai/ao我习惯从512开始编址,前面的地址足够di和do用了。而对于3152dp的2k字节过程映像区,2k以后的ai/ao访问就只能用piw和pqw访问了。事实上,我一直习惯用piw/pqw来访问的。我个人认为,piw是直接读取方式,iw是通过输入输出映象区来读取是输入过程暂存区,是外部输入区CPU在执行程序前,PLC将外设的状态扫描后存储于输入映象区,在程序执行的过程中,即使真实的外部输入变化了,输入映象区也不变(除非程序中写输出到IW)。程序执行时如果用IW寻址,就直接从输入映象区读该值;如果用PIW寻址,就直接去读实际的输入点。必须
12、注意,PIW值在同一个程序执行周期中,不同位置读取时,状态可能不一样400PLC的过程映像区在编程如何分配使用? 过程映象区的分配不同,那么它的刷新周期就不一样,通常,我们的过程映象都被分配OB1,通过OB1刷新过程影像区,有的时候我们可能需要加快它的刷新速度,就需要分配别的OB块就刷新。 过程映像区,PIW和IW的区别CPU 在程序循环处理过程中有一段连续的地址区域存储过程信号叫做过程映象区,他处于CPU的系统存储区中。这样CPU 可以访问内部存储区获得I/O 信号而不用直接访问I/O 模块。过程映象区中的I/O 值不反映当前的I/O 信号,他记录的是循环扫描起始期的I/O 值。当输入模块中
13、的一个信号状态发生改变,过程映象区中该信号的状态直到下次循环开始时才会更新。通过过程映像区访问时,地址格式是I/Q(输入/输出),最小可以访问到位,如I0.0,Q10.0一般通过过程映像区访问的循环程序运行流程如下:1. 执行CPU 内部任务2. 将过程映像区输出区(PIQ)送到模块输出通道3. 从模块的输入通道到过程映像区输入区(PII)4. 执行用户程序段但是过程映象区仅有128 个字节,而对于新型的CPU3152DP(2AG10),它支持的数字量通道是16384,既有2048byte,有时候在I/O 量很大的情况下有必要采用直接I/O 访问的方式而不占用过程映像区,最小访问单位是字节。地址格式如下:PIB/ PQB 256 ,PIW / PQW 256,PID / PQD 256。注意:直接I/O 访问,最小按字节进行,不能单独对位进行操作。CPU 系统循环扫描周期:如图1 所示,一般在循环扫描周期中,过程映象区会自动地更新,但在S7-400 和CPU 318 中您可以取消这样的更新方式,进行直接的I/O 访问或者在程序的不同地方调用SFC26”UPDAT_PI”和SFC27”UPDAT_PO”来更新过程映象区。