7/10/2012 9:40 AM | |
Joined: 10/7/2005 Last visit: 9/22/2024 Posts: 3021 Rating: (1054)
|
Hello TEBANCH The practice of doing what they are doing is not all that uncommon and I can't really give you any "strong" or official reasons not to do so. You also won't find a Siemens document that will state "this is not allowed" or "you should avoid doing so" (well, at least I'm not aware of any Siemens document that says so). An Instance DB is a DB after all and as such accessible by the whole user program (as you would know already). The FAQ What is the difference between an instance data block and a global data block and how does a CALL call influence the DB register? even containsa statement that says "The STEP 7 program has equal read and write access to the global and instance DBs in the CPU" Having said that, below are a couple of links about similar questions thatcontain info about potential pitfalls with the approach of accessing IDB variablesoutside of the associated FB: Reading Instance DB in user program Passing parameters into Instance FB/DB Last but not least, as far as IEC 61131-3 is concerned, a Function (FC) does NOT have any internal memory, a Function Block (FB)does. As far as I know, the IEC standarddoes not prescribe that the FB's "memory" must not be accessed from outside the FB (I might stand corrected on this though). Siemens implementation ofthe"memory" for aFB comes simply in a form of a(Instance) DB, which certainly makes access from the outside of the FB possible. While this is arguably ideally avoided, it can be done and there may becases where it can be even useful to do so (I admittedly have done so myself). I wonder thoughif your clients reason for doing sois perhaps because he is simply used to Allen Bradleys implementation of a "Function Block" (where LADDER calls of them require to supply the Parameters externally, have a looktoo HERE and HERE for some interesting Blogs from DMC about FB's). I hope this helps |
Cheers |
|
This contribution was helpful to4 thankful Users |
7/11/2012 2:16 PM | |
Joined: 3/25/2008 Last visit: 1/28/2022 Posts: 232 Rating: (20) |
Thanks a lot for your answers, i asked this because some time ago,i read a post in which it was "suggested" by an expert (i do not remember the name of the post ) that ideally any variable of an instance DB should not be used outside the corresponding FB, so maybe i get it in the wrong way and i misunderstood that suggestion, i thought doingso was completely wrong (even if it was workingOK in the real world).
Well, our client is Ford, and theyin the past used towork with other automation brands for their power train assembly lines (Phoenix Contact and Telemecanique), now theyhave implemented what they call FAST (Ford and Siemens Transline), in which there is some FB's that works in the way i mentioned before, so for me it'skind strangesince those blocks i guess where designed by people with extensive experience in automation, actually i do not see (from my point of view) any good reason for it (i mean there is no special use or need to do so). But from the point of view of GrahamPSNWater, it does makes sence 100%, and that is something i have not considered. Anyway, now i know it is not such as a big problem, but i think we can agree that if it's not 100% necesary or usefull, then you must not touch/handle IDB's in such way. Have a great day . |
Keep working! |
|
4/8/2019 4:22 PM | |
Posts: 5 Rating: (1) |
Hi everyone. I was wondering if there was an official recommendation on how this should be done. In the Programming Guideline for S7-1200/S7-1500 Siemens actually recommends not accessing instance data blocks directly from other blocks that aren't the actual FB the DB was created for. Since I googled this and got here before actually checking the programming guideline I'm posting this here so that others can find this "official recommendation" more easily. Thanks to the original poster and all answers so far. Vasco |
This contribution was helpful to2 thankful Users |
9/11/2019 9:39 AM | |
Joined: 11/15/2017 Last visit: 8/20/2024 Posts: 78 Rating: (17) |
Thank you Vasco for your post, i was also looking into this issue. Siemens recommends not to directly acces instance DB's from any other location than their local FB. When searching the reason not to directly acces instance DBs from other places i found users on this forum warning about unpredicted machine behaviour, possibly resulting in injury or even Death. Maybe it's not the best (programmer) practise directly accessing instance FB's, but it does work. Now i do have to say this is in a 1518 PLC. Maybe with the older PLC's this is a bigger issue. |
Last edited by: Sibrand at: 09/11/2019 09:48:56 |
|
4/17/2020 1:56 PM | |
Joined: 1/14/2016 Last visit: 6/18/2021 Posts: 8 Rating: (0) |
I have also been reading data from FB Instance DB's lately. It's quite clean in my opinion, now that the cross-references are working. I always write at the block though. I'm currently working on a project, reusing code from an older machine. The code is FULL of read and write to instance blocks, even statics. I think it would be good if TIA at least gave a warning or colored these mistakes, just like if you try to read and FC Output. Perhaps there's an option for this that I haven't noticed? I think it would steer everyone in a direction of best practice. |
Follow us on