Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Function takes total distance over the X number of block specified from the input.
- //If the destination block is found within the X number the remaining distance is
- //provided.
- //Check if our current block is our destination
- IF #Navigation.Destination.Final <> #Block AND #Navigation.Destination.Intermediate <> #Block THEN
- //Subtract current distance in block from total distance of block
- #Distance := "DB_BLOCKS".Block[#Block].EndValue - #Position;
- #tBlock := #Block;
- //------------------------------------Drive Without Communication---------------------------------------------------
- //------------------------------------Needed for cuts in DP Rail----------------------------------------------------
- IF "DB_BLOCKS".Block[#Block].NoComm.START <> 0 AND "DB_BLOCKS".Block[#Block].NoComm.STOP <> 0 THEN
- "DriveNoComm" := #Position <= "DB_BLOCKS".Block[#Block].NoComm.STOP AND #Position >= "DB_BLOCKS".Block[#Block].NoComm.START;
- ELSE
- "DriveNoComm" := FALSE;
- END_IF;
- //Loop through total number of blocks to look ahead
- FOR #i := 1 TO #Count DO
- #tBlock := "DB_BLOCKS".Block[#tBlock].NextBlockIndex; //Set block to next position
- //Block found is the final destination block and has a positioning point
- IF "DB_BLOCKS".Block[#Navigation.Destination.Final].PositionPoint <> 0 AND #tBlock = #Navigation.Destination.Final THEN
- #Distance := #Distance + ("DB_BLOCKS".Block[#Navigation.Destination.Final].EndValue - "DB_BLOCKS".Block[#Navigation.Destination.Final].PositionPoint );
- EXIT;
- //Block found is the intermediate destination block and has a positioning point
- ELSIF "DB_BLOCKS".Block[#Navigation.Destination.Intermediate].PositionPoint <> 0 AND #tBlock = #Navigation.Destination.Intermediate THEN
- #Distance := #Distance + ("DB_BLOCKS".Block[#Navigation.Destination.Intermediate].EndValue - "DB_BLOCKS".Block[#Navigation.Destination.Intermediate].PositionPoint );
- EXIT;
- //Block found is intermediate or final and does not have a positioning point
- ELSIF (#tBlock = #Navigation.Destination.Final OR #tBlock = #Navigation.Destination.Intermediate) AND "DB_BLOCKS".Block[#tBlock].PositionPoint = 0 THEN
- #Distance := #Distance + ("DB_BLOCKS".Block[#tBlock].EndValue - (("DB_BLOCKS".Block[#tBlock].EndValue - "DB_BLOCKS".Block[#tBlock].StartValue) / 2));
- END_IF;
- //Final or intermediate not found, add total distance of block
- #Distance := #Distance + ("DB_BLOCKS".Block[#tBlock].EndValue - "DB_BLOCKS".Block[#tBlock].StartValue);
- END_FOR;
- //Distance remaining if we are in the FINAL block with POS POINT
- ELSIF #Navigation.Destination.Final = #Block AND "DB_BLOCKS".Block[#Navigation.Destination.Final].PositionPoint <> 0 THEN
- #Distance := "DB_BLOCKS".Block[#Navigation.Destination.Final].PositionPoint - #Position;
- //Distance remaining if we are in the INTERMEDIATE block with POS POINT
- ELSIF #Navigation.Destination.Intermediate = #Block AND "DB_BLOCKS".Block[#Navigation.Destination.Intermediate].PositionPoint <> 0 THEN
- #Distance := "DB_BLOCKS".Block[#Navigation.Destination.Intermediate].PositionPoint - #Position;
- //Distance remaining in our block if there is no positioning point, block distance/2
- ELSE
- #Distance := ("DB_BLOCKS".Block[#Block].EndValue - (("DB_BLOCKS".Block[#Block].EndValue - "DB_BLOCKS".Block[#Block].StartValue) / 2)) - #Position;
- END_IF;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement