10/29/2010 8:25 AM | |
Joined: 8/4/2010 Last visit: 9/4/2024 Posts: 7 Rating: (0) |
Hi , guys . I have problem with FC. I created FC counting _pcs and when i call and use only one the fc is normally running. Problem is when i call and use this blok twice in one programm. FC are influencing each other and this is my problem . I would like if get my answer on this problem and maybe solution . Thanks for help AttachmentS7_FC.zip (52 Downloads) |
10/29/2010 9:01 AM | |
Joined: 10/7/2005 Last visit: 9/25/2024 Posts: 3022 Rating: (1054)
|
Hello Nemak the quick solution for your problem is to do this: 1.) Change theOUT's to IN_OUT's 2.) Make sure you definetely write to the TEMP variables before you read from them (I've only glanced through your logic and think this is the case, but please verify this). Number 1 is currently definetely your problem as you do a read access to the OUT's before you write to them. FC's have no memory and parameteres are passed by value which means that the OUT's are not initialised at FC call and cancontain random values (it'll work if you'd use MW's instead of DBW's but that's a different story). Have a look HERE for more on this subject and you can avoid similar pitfalls in the future by following these "Golden Rules" for usage of FC's Parameters: IN: Read only OUT: Write only AND must be written too every time the FC is called IN_OUT: Read/write access TEMP: Write access before Read access I hope this helps |
Cheers |
|
This contribution was helpful to1 thankful Users |
10/29/2010 1:34 PM | |
Joined: 10/7/2005 Last visit: 9/25/2024 Posts: 3022 Rating: (1054)
|
Hello again Nemak I fear I caused some confusion by stating that usiing MW's instead of DBW's will make it work too. We need to be clear that the cause of the problem is the incorrect usage of the OUT parameter inside the the FC (doing a read access to it in general and doing so before you write to it specifically). Changing the OUT to an IN_OUT is as such the correct cause of action and shoudl be seen as the one and only correct way to fix it (my advise: stick with the listed "Golden Rules"). Leaving it as an OUT and instead changing the actual parameter froma DBW to aMW does (somewhat unfortunately) work too, but it does so because Step7 can now pass the address on to the call of the FC rather than having to do its "designed" mode of passing thevalue contained in the variable. In case you would like to read up on more technical detail on this whole matter, allow me to refer to my entriesinTHIS Post. I hope this helps |
Cheers |
|