5/21/2006 9:45 PM | |
Joined: 1/7/2006 Last visit: 11/17/2023 Posts: 2705 Rating: (318) |
Hi Dave, You have to make first a few symbolic names, they are given in the start of the file thats hereby. This is because SCL couldn't have Global Data [:(] AttachmentSCL WriteAll.zip (1822 Downloads) |
I hope that the answer will help, if you have still questions, don't hesitate to ask me. |
|
This contribution was helpful to5 thankful Users |
5/25/2007 12:47 AM | |
Joined: 8/10/2006 Last visit: 8/13/2024 Posts: 298 Rating: (29) |
Late, Very nice. Thank you for sharing your work! Jim |
3/16/2012 5:14 PM | |
Joined: 1/28/2009 Last visit: 9/10/2024 Posts: 6849 Rating: (1365)
|
Dear Georgio, What do you think about using "Real_TO_Dword" conversion! You can try that or upload part of your program related to the problem. // To copy content a DB to another, possibly you can use SFC20 Best regards, Hamid Hosseini AttachmentSFC20.pdf (711 Downloads) |
Last edited by: hdhosseini at: 3/16/2012 5:23 PM |
|
3/16/2012 5:27 PM | |||||
Joined: 10/28/2008 Last visit: 7/21/2023 Posts: 245 Rating: (14) |
Dear hdhosseini. I was thinking about using REAL_TO_DWORD and DWORD_TO_REAL but I think that it is working like conversion from real to DINT in FBD/STL (DI_R, ROUND, TRUNC, CEIL and FLOOR). But now I can see that in help:
Now I am a little bit confused about these function.. I do not know exactly if these funtion work in the same way like DWORD to real and real to DWORD conversion in FBD/STL. I simply have 2 data blocks with real numbers and only want to address these values indirectly. Thats all. Please see attached snapshot with my solution in DWORD. I know that for copying I can use SFC20, but further I want to make another things with matrices and I need to know how to access real values indirectly... Thank you a lot for your answers. Georgio |
||||
Last edited by: Georgio at: 3/16/2012 5:35 PMLast edited by: Georgio at: 3/16/2012 5:32 PMGeorgio |
|||||
3/16/2012 6:02 PM | |
Joined: 1/28/2009 Last visit: 9/10/2024 Posts: 6849 Rating: (1365)
|
Dear Georgio, About the conversion from Real to DWORD (and vice versa): [code] ORGANIZATION_BLOCK OB1 VAR_TEMP // Reserved info : ARRAY[0..19] OF BYTE; // Temporary Variables END_VAR //Real to DWORD MD4:= DINT_TO_DWORD((TRUNC (MD8))); //DWORD TO REAL //md8 := (DINT_TO_REAL (DWORD_TO_DINT (MD4))); ; END_ORGANIZATION_BLOCK [/code] Let me check your codes,I will update here Best regards, Hamid Hosseini |
Last edited by: hdhosseini at: 3/16/2012 6:16 PM// CODE OPTIMIZED |
|
3/16/2012 6:24 PM | |||||
Joined: 10/28/2008 Last visit: 7/21/2023 Posts: 245 Rating: (14) |
Dear hdhosseini I know how conversion from real to dword in STL/FBD works But as I wrote I am a little bit confused about these function in SCL now.. If it is working like TRUNC, DI_R.... From help:
Now I think I maybe solved my problem. I use REAL_TO_DWORD and DWORD_TO_REAL. Now I have 2 DB with real numbers. I read 4 bytes like DWORD, convert it with and the real value and store with conversion to another DB. Please see attached file... Problem is that I read and write DWORD, but in DBs I have real numbers.. I read DWORD, convert it to REAL, and than REAL number convert to DWORD and store to DB. It works, but I think that it is not correct... My code: [code] FUNCTION FC60: BOOL VAR_INPUT InVal : REAL := 0.0; END_VAR VAR_OUTPUT Val : REAL := 0.0; END_VAR VAR ConVar : INT; Inkrement : INT; END_VAR VAR_TEMP cms1 : BOOL; cms0 : BOOL; dummy : BOOL; SaveVar : DWORD; SaveVarReal : REAL; END_VAR // cms0 and cms1 cms0 := cms0 AND NOT(cms0); cms1 := cms1 OR NOT(cms1); ConVar := "MatrixA.DB".NoOfRow; FOR Inkrement:= 4 TO 36 BY 4 DO SaveVarReal:= DWORD_TO_REAL("MatrixA.DB".DD[Inkrement]); "MatrixB.DB".DD[Inkrement] := REAL_TO_DWORD(SaveVarReal); END_FOR; FC60 := cms1; END_FUNCTION [/code] Thank you for your answers. Best regards. Georgio AttachmentSCL.pdf (478 Downloads) |
||||
Last edited by: Georgio at: 3/16/2012 6:30 PMLast edited by: Georgio at: 3/16/2012 6:30 PMGeorgio |
|||||
3/16/2012 8:28 PM | |
Joined: 1/28/2009 Last visit: 9/10/2024 Posts: 6849 Rating: (1365)
|
Hello again, I did not have your source code so I tried to create situation similar to yours.I created 2 DBs identical with some real numbers as cell elements(See the snapshots for my case): Following codes working perfectly in my case as I checked with PLCSIM. Why do not you use assignment ":=" because both cells are real? [code] ORGANIZATION_BLOCK OB1 VAR_TEMP // Reserved info : ARRAY[0..19] OF BYTE; // Temporary Variables HD:INT; END_VAR FOR HD:= 0 TO 20 BY 4 DO // Statement Section DB2.DBD[HD] := DB1.DBD[HD]; ; END_FOR; ; END_ORGANIZATION_BLOCK [/code] Best regards AttachmentForum_SCL_16_MARCH.zip (435 Downloads) |
3/17/2012 9:24 AM | |
Joined: 10/28/2008 Last visit: 7/21/2023 Posts: 245 Rating: (14) |
Hi hdhosseini I tried to do as you but it is not working in my case. I do not why If you want you can see attached code.. This is working properly: [code] SaveVarReal:= DWORD_TO_REAL("MatrixA.DB".DD[Incr1]); "MatrixB.DB".DD[Dest] := REAL_TO_DWORD(SaveVarReal); [/code] But this (as your explanation) is not working: [code] "MatrixB.DB".DBD[Dest] := "MatrixA.DB".DBD[Incr1]; [/code] Thank you for your help ! Best regards. Georgio AttachmentCodes_120317.zip (312 Downloads) |
Georgio |
|
3/17/2012 6:52 PM | |
Joined: 1/28/2009 Last visit: 9/10/2024 Posts: 6849 Rating: (1365)
|
Hello Georgio, Check the result of my test.Note,Each cell is not transferred from source DB to same cell to target DB. Please provide snapshot as the undesired result. Best regards, Hamid Hosseini AttachmentForum_SCL_17_MARCH.zip (363 Downloads) |
Follow us on