EDIT: When using PULSE you can enter the value of duration of time for the pulse. How I missed the love note on the screen, idk, but now you know 😅 16:40
I fixed some programs recently using IF statements. We have a robot that picks a part from one station and goes to deliver it to 1 of 2 stations depending on which one is free. When it goes to the 2nd station it has to pick the part already there, then place the part it picked at the first station, then deliver it to a fourth station. When moving to all these stations we use a register to know where the robot is, or was headed to, so that we can properly back out of the station with a Homing program. The problem was if the robot was heading to, or already inside of, the second or third station and the station faulted out it would of course stop everything and sound an alarm. People would instinctively hit Reset on the HMI to silence the alarm and the PLC would say, oh this station is in alarm but the other one is available and would crash the robot into the station. So I added IF statements at the beginning of the deliver to station 2 and station 3 and station 4 that checks the current robot position, the register, and if I am in one of the other stations then back the robot out of that station before delivering to the available station. So if I stalled going into station 2, after the reset and the PLC now saying go to station 3, the station 3 program checks to see if the robot is in station 2, which it is at this point, and backs the robot out before delivering to station 3. If it had already picked the part at station 2 and was in the process of delivering a part to station 2 when it stalled, after the reset the PLC will first want to place the picked part in station 4. So station 4’s program first checks, is the robot in station2? If it is it backs the robot out and delivers to station 4. If it is not in station 2 then it checks, is the robot in station 3? If it is then it backs the robot out before delivering to station 4.
is there any reason the heartbeat would not function? I set it to a previoulsy spare DO, cold started. It is ON or OFF, and I can manually toggle between ON and OFF, but it does not beat. all the other cell outputs are working normally like sim and override
Is just a programmers preference to program a WAIT or IF statement to be WAIT DI[1]=ON AND DI[2]=OFF rather than WAIT (DI[1] AND !DI[2])? Or IF DI[1]=ON AND DI[2]=OFF, DO[1]=ON rather than IF (DI[1] AND !DI[2]), DO[1]=ON? I've seen both ways and prefer the 2nd method, especially with a lot of mixed logic instructions.
I'm always a fan of concise logic, so method #2 would typically be my favorite. The problem comes into play with folks who aren't trained on the "NOT" symbol "!"; using method #1 you have "self documenting code" because it reads like a book. Method #2 is for propeller heads like us ;)
@adamwillea How can I write a TP program like this: IF PR[10] = True, DO[10]=On ELSE DO[10] = OFF I want to turn on an output when the robot is at a PR position by running this program in the BG logic. When I try to create a if statement using PR, I get PR[i,j] and can't find the TRUE/False instruction. Thanks
In the company that I work in we don't have all those if statements, like if() then .. we only have the simple ones, does anyone know why? I thought it could be the version or the model, but we got some new robots and we don't have that either. Does anyone know if I have to enable anything?
If my memory serves correctly, the IF( ) statements first appeared in V8.30. Might have been earlier, but certainly not in any V7.XX revs. So check your Version ID screen and see what software you are on. You may want to get on a later update IF you need the IF. (see what I did there? lol)
EDIT: When using PULSE you can enter the value of duration of time for the pulse. How I missed the love note on the screen, idk, but now you know 😅 16:40
Doing good Adam!
I fixed some programs recently using IF statements. We have a robot that picks a part from one station and goes to deliver it to 1 of 2 stations depending on which one is free. When it goes to the 2nd station it has to pick the part already there, then place the part it picked at the first station, then deliver it to a fourth station. When moving to all these stations we use a register to know where the robot is, or was headed to, so that we can properly back out of the station with a Homing program. The problem was if the robot was heading to, or already inside of, the second or third station and the station faulted out it would of course stop everything and sound an alarm. People would instinctively hit Reset on the HMI to silence the alarm and the PLC would say, oh this station is in alarm but the other one is available and would crash the robot into the station. So I added IF statements at the beginning of the deliver to station 2 and station 3 and station 4 that checks the current robot position, the register, and if I am in one of the other stations then back the robot out of that station before delivering to the available station. So if I stalled going into station 2, after the reset and the PLC now saying go to station 3, the station 3 program checks to see if the robot is in station 2, which it is at this point, and backs the robot out before delivering to station 3. If it had already picked the part at station 2 and was in the process of delivering a part to station 2 when it stalled, after the reset the PLC will first want to place the picked part in station 4. So station 4’s program first checks, is the robot in station2? If it is it backs the robot out and delivers to station 4. If it is not in station 2 then it checks, is the robot in station 3? If it is then it backs the robot out before delivering to station 4.
is there any reason the heartbeat would not function? I set it to a previoulsy spare DO, cold started. It is ON or OFF, and I can manually toggle between ON and OFF, but it does not beat. all the other cell outputs are working normally like sim and override
Is just a programmers preference to program a WAIT or IF statement to be WAIT DI[1]=ON AND DI[2]=OFF rather than WAIT (DI[1] AND !DI[2])? Or IF DI[1]=ON AND DI[2]=OFF, DO[1]=ON rather than IF (DI[1] AND !DI[2]), DO[1]=ON? I've seen both ways and prefer the 2nd method, especially with a lot of mixed logic instructions.
I'm always a fan of concise logic, so method #2 would typically be my favorite. The problem comes into play with folks who aren't trained on the "NOT" symbol "!"; using method #1 you have "self documenting code" because it reads like a book. Method #2 is for propeller heads like us ;)
@adamwillea
How can I write a TP program like this:
IF PR[10] = True, DO[10]=On
ELSE DO[10] = OFF
I want to turn on an output when the robot is at a PR position by running this program in the BG logic. When I try to create a if statement using PR, I get PR[i,j] and can't find the TRUE/False instruction.
Thanks
Day 17 of asking Adam to do q pallet tool video/pallet pro setup on laptop
In the company that I work in we don't have all those if statements, like if() then .. we only have the simple ones, does anyone know why? I thought it could be the version or the model, but we got some new robots and we don't have that either. Does anyone know if I have to enable anything?
If my memory serves correctly, the IF( ) statements first appeared in V8.30. Might have been earlier, but certainly not in any V7.XX revs. So check your Version ID screen and see what software you are on. You may want to get on a later update IF you need the IF. (see what I did there? lol)
@@AdamWillea thanks for the answer! Hugs from Brazil.