9/6/2021 8:27 PM | |
Joined: 2/21/2021 Last visit: 4/8/2024 Posts: 25 Rating: (0) |
Hi Experts, I need help on understanding the proper use of SFC 14 parameters, specifically the "RECORD". According to the manual: the length of the data must amount to three or more than four bytes and the "RECORD" actual parameter data type is "ANY". The maximum length depends on the CPU. I was troubleshooting a slave Lenze drive of S7-400 CPU. I found the SFC14 in the PLC program has a STRUCT data type actual parameter for the "RECORD" parameter. The STRUCT data is coming from the TEMP parameter of the FB. The PLC program works fine. My question is that why the SFC14 block does not have an error when the actual parameter for the "RECORD" is not a type "ANY" and where to find (product manual) the specified maximum length of data for the "RECORD" parameter. Please see my attachment for details. Thank you, helix360 AttachmentAttachment1.docx (281 Downloads) |
9/7/2021 4:46 PM | |
Joined: 9/27/2006 Last visit: 9/24/2024 Posts: 12282 Rating: (2685)
|
Hello helix; It appears that you have misunderstandings on SFC 14, why it is used, and how to program it. Why do you use SFC 14? Because there is a section of data that you want to trasfer in a single peration, without using individual addresses, as you would do with Load/Transfer 9Move) instructuions. Then you must use SFC 14 to define the parameters of that transfer. The screenshot below is taken from the System ad standard Functions manua, Ch. 16, and describes the paramenters of SFC 14. https://support.industry.siemens.com/cs/ww/en/view/109751826 Parameter LADDR uses hexadecimal format to point to the beginning of the area you want to read in your lave. In your cae, the area has been defined a Inputs 7660 to 7673, a length of 14 bytes. The start address (LADDR) would then be 16#w#1DEC (hex equivalent of 7660). RET_VAL is an INT register that will contain error codes, for example, so MW200 is acceptable. RECORD is an ANY pointer to the destination registers you will use to retain the data you have read from yur slave. An ANY pointer uses a pointer format giving the start address of the destination zone, specified to the bit address, and the number of bytes to be transfered. For example, P#DB12.DBX10.0 BYTE14 would send your data to DB12, DBB10 to DB12.DBB23, where your program can read ansd use them. Hope this helps, Daniel Chartier |
9/7/2021 6:09 PM | |
Joined: 2/21/2021 Last visit: 4/8/2024 Posts: 25 Rating: (0) |
Hi dchartier, I understand why SFC14 is used in conjunction with SFC15. But my question is just about the parameter that is used in "RECORD" because for me it is not like in an ANY format. If you look at my attachment the "RECORD" parameter is from an FB TEMP (#StatusProzess) of STRUCT type - it's not of the format P#DB12.DBX10.0 BYTE14 (just an example). Thank you, helix360
|
9/7/2021 9:05 PM | |
Joined: 9/27/2006 Last visit: 9/24/2024 Posts: 12282 Rating: (2685)
|
Hello helix; Just one point: in my earlier reply there was no mention of SFC 15, why do you make that first comment? To make SFC 14 work, the Destination parameter must be of type ANY pointer. Either the ANY pointer is provided on a call of SFC 14 directly as P#DBx.DBy0.0 BYTE zz, or it can be built progammatically so that when you call the FB that calls SFC 14 you can be more flexible and introduce the elements of the ANY pointer as TEMP parameters. What I believe is happening is that the original programmer is creating the ANY pointer inside the FB you show partilally, using TEMP vaiables attached to the TEMP structure StatusProzess. Something like this is described in the following document: https://support.industry.siemens.com/cs/ww/en/view/20443243 Maybe you could expand the view of the StatusProzess structure so we can sassociate the contents to this description of the ANY parameter (from the link above), or locate the actual code that generates the ANY pointer in the FB: "The parameter type ANY is 10 bytes long and contains information about the data type (byte 1), the repeat factor or the number of data types to transfer on the parameter (bytes 2 and 3), the DB number (bytes 4 and 5), the memory area (byte 6), the bit and the byte address." Hope this helps, Daniel Chartier |
Last edited by: dchartier at: 09/07/2021 21:06:59 |
|
9/9/2021 8:00 PM | |
Joined: 2/21/2021 Last visit: 4/8/2024 Posts: 25 Rating: (0) |
Hi Daniel, I'm sending you the expanded view of the StatusProzess. Please see attached document. Regards, helix360
AttachmentANY POINTER.docx (293 Downloads) |
Follow us on