Idec has RF1V Force Guided Relays that have 2NO & 2NC contacts. RF1V-2A2BL-D24
Posts by DaveP
-
-
You can use a brute force method instead of an automatic method. Move to the PR in Frame #1, set Frame #2 to the active frame, touch up the PR without moving the robot. Set the active frame back to Frame #1 and repeat for the other PR's. You can create a TP with the PR's and the UFRAME instructions to make it a little easier but will still be manual.
-
I've seen the same thing with several of our robots that have points taught in UFRAME[0].
-
-
-
You can use the HMI option (SNPX) to send/receive real numbers to/from an HMI to the robot registers. You can do the same for position registers with this same option. Search this forum and you will find several threads.
-
Check out this thread for using the pyModbus library for using Python and Modbus TCP to communicate between a robot and a PC. We have the HMI (SNPX) option in our robots that allows for Modbus TCP comm. Assuming you can also use the Modbus TCP option.
-
Try using the DIV command to convert the Real number to an Integer. The DIV command is for Integer division and will return only the quotient. R[1] is Real, R[2] is new Integer. R[2]=R[1] DIV 1 This will divide R[1] by 1 and will set R[2] to the Integer value of R[1].
-
try replacing the underscores with periods in your new code that Hermann suggested using. His code uses a . instead of a _ in the variable name for the extended axis. new_xyz.ext1 = org_xyz.ext1 + 10
-
another option that should work for older controllers is to call a program that will set all the variables to the desired state.
IF UO[6]=ON AND UO[8]=OFF, CALL RESET_VARS
Assign the DO and RO in the RESET_VARS TP program
-
Yes, C3 is for reading the PR[3] comment. I only have experience with reading/writing to GE Quickpanel+ HMI's using the Fanuc HMI option. The HMI variable would reference the address 101 to read the comment. I use the GE Ethernet OPC driver for the Quickpanel+ HMI to read strings from the robot. Not sure about explicit message. You could set up an array in the HMI to read all of the PR comments and read the desired comment in the HMI.
-
You can view the comment (name) for PR[3] in a HMI using SNPX by setting the var name to PR[C3]. This is like setting it to SR[1] for a string register or R[1] for a numerical register. The C tells SNPX to look at the comment instead of the actual PR data. The HMI option manual shows this on page 24.
-
I tried a bunch of combinations for $SNPX_ASG[XX].$VAR_NAME and I could not get it to read the comments for the PR's by looking at variables. I tried setting a SR to the string PR[C3] and then referencing that in another $SNPX var and it wouldn't work. I could get the HMI to read and write PR[3] - PR[7] comments by setting the $SNPX_ASG[18].$VAR_NAME to PR[C3] and the size to 200. You could set a register to the PR you want to adjust, set SR[1] to the text you want to set it to, and then have the HMI look at the number and set the proper variable to the desired text from SR[1]. This is assuming you have an HMI.
-
This is an example of some entries in the $SNPX_ASG variables. The HMI will be able to see robot registers, string registers, last alarm, alarm number, alarm text, alarm history, TP program, etc. The HMI can see robot variables by adding them to the $SNPX_ASG list. The HMI variable references the number in the $ADDRESS field. You also need to set the $NUM_CIMP variable to at least a 1 or higher to allow the HMI to see the variables, this is in the $SNPX_PARAM variable. I've had to set the number to 2 or higher on some cells to make it work properly.
[*SYSTEM*]$SNPX_ASG Storage: CMOS Access: RW : ARRAY[80] OF SNPX_ASG_T
Field: $SNPX_ASG[1].$ADDRESS Access: RW: SHORT = 1
Field: $SNPX_ASG[1].$SIZE Access: RW: SHORT = 1000
Field: $SNPX_ASG[1].$VAR_NAME Access: RW: STRING[37] = 'R[1]@1.1'
Field: $SNPX_ASG[1].$MULTIPLY Access: RW: REAL = 1
Field: $SNPX_ASG[2].$ADDRESS Access: RW: SHORT = 1001
Field: $SNPX_ASG[2].$SIZE Access: RW: SHORT = 2000
Field: $SNPX_ASG[2].$VAR_NAME Access: RW: STRING[37] = 'R[1]'
Field: $SNPX_ASG[2].$MULTIPLY Access: RW: REAL = 0
Field: $SNPX_ASG[3].$ADDRESS Access: RW: SHORT = 3001
Field: $SNPX_ASG[3].$SIZE Access: RW: SHORT = 1000
Field: $SNPX_ASG[3].$VAR_NAME Access: RW: STRING[37] = 'SR[1]'
Field: $SNPX_ASG[3].$MULTIPLY Access: RW: REAL = 1
Field: $SNPX_ASG[4].$ADDRESS Access: RW: SHORT = 4001
Field: $SNPX_ASG[4].$SIZE Access: RW: SHORT = 40
Field: $SNPX_ASG[4].$VAR_NAME Access: RW: STRING[37] = '$alm_if.$last_alm'
Field: $SNPX_ASG[4].$MULTIPLY Access: RW: REAL = 1
Field: $SNPX_ASG[5].$ADDRESS Access: RW: SHORT = 4041
Field: $SNPX_ASG[5].$SIZE Access: RW: SHORT = 60
Field: $SNPX_ASG[5].$VAR_NAME Access: RW: STRING[37] = 'ALM[1]@6.6'
Field: $SNPX_ASG[5].$MULTIPLY Access: RW: REAL = 1
Field: $SNPX_ASG[6].$ADDRESS Access: RW: SHORT = 4101
Field: $SNPX_ASG[6].$SIZE Access: RW: SHORT = 400
Field: $SNPX_ASG[6].$VAR_NAME Access: RW: STRING[37] = 'ALM[1]@12.40'
Field: $SNPX_ASG[6].$MULTIPLY Access: RW: REAL = 1
Field: $SNPX_ASG[7].$ADDRESS Access: RW: SHORT = 4501
Field: $SNPX_ASG[7].$SIZE Access: RW: SHORT = 600
Field: $SNPX_ASG[7].$VAR_NAME Access: RW: STRING[37] = 'ALM[E1]@6.6'
Field: $SNPX_ASG[7].$MULTIPLY Access: RW: REAL = 1
Field: $SNPX_ASG[8].$ADDRESS Access: RW: SHORT = 5101
Field: $SNPX_ASG[8].$SIZE Access: RW: SHORT = 4000
Field: $SNPX_ASG[8].$VAR_NAME Access: RW: STRING[37] = 'ALM[E1]@12.40'
Field: $SNPX_ASG[8].$MULTIPLY Access: RW: REAL = 1
Field: $SNPX_ASG[9].$ADDRESS Access: RW: SHORT = 9101
Field: $SNPX_ASG[9].$SIZE Access: RW: SHORT = 40
Field: $SNPX_ASG[9].$VAR_NAME Access: RW: STRING[37] = '$TP_DEFPROG'
Field: $SNPX_ASG[9].$MULTIPLY Access: RW: REAL = 1
Field: $SNPX_ASG[10].$ADDRESS Access: RW: SHORT = 9141
Field: $SNPX_ASG[10].$SIZE Access: RW: SHORT = 40
-
I attached a test file we used for testing. I think it reads registers 1-10 in the robot. Also, you need set $NUM_MODBUS to at least 1 in the $SNPX_PARAM variable. This is for the number of ModbusTCP connections, mine was set to 2. The SERVER_HOST variable is the IP Address of the actual robot or the robot in Roboguide.
-
Another option is to use the HMI (SNPX) robot option and communicate to the PC using ModbusTCP. We are doing that with a Python program to a LR Mate. We are reading/writing registers and DI/DO with the PC. Search for that option in this forum and search Google for ModbusTCP libraries for Python or a .net application.
-
This is a KAREL program that prompts the user to select which Routine to run. (Triangle, Square, Circle, or Zero) You can do what you want in KAREL but it's not simple.
----------------------------------
BEGIN -- Main Body
WRITE(CHR(128),CHR(137)) -- Clear TP display area
WRITE TPPROMPT(CHR(128)) -- Clear TP prompt area
WRITE TPFUNC(CHR(128)) -- Clear TP function area
FORCE_SPMENU(TP_PANEL,SPI_TPUSER,1) -- Force User screen
SET_CURSOR(TPDISPLAY,10,10,i_STATUS)
WRITE TPDISPLAY('Select Program to Run?')
SET_CURSOR(TPFUNC,1,1,i_STATUS)
WRITE TPFUNC('Triangle')
SET_CURSOR(TPFUNC,1,10,i_STATUS)
WRITE TPFUNC('Square')
SET_CURSOR(TPFUNC,1,17,i_STATUS)
WRITE TPFUNC('Circle')
SET_CURSOR(TPFUNC,1,26,i_STATUS)
WRITE TPFUNC('Zero')
SET_CURSOR(TPFUNC,1,32,i_STATUS)
WRITE TPFUNC('Exit')
i_FKey=0
REPEAT -- Waiting for an answer
DELAY 50
FOR i_For = 129 TO 134 DO
IF (TPIN[i_For]) AND $TP_INUSER THEN
i_FKey = i_For
ENDIF
ENDFOR
UNTIL (i_FKey > 0)
SELECT i_FKey OF
CASE(129): TRIANGLE -- F1 Key
CASE(131): SQUARE -- F2 Key
CASE(132): CIRCLE -- F3 Key
CASE(133): ZERO -- F4 Key
ELSE: -- Exit
ENDSELECT
WRITE(CHR(128),CHR(137))
WRITE TPPROMPT(CHR(128))
WRITE TPFUNC(CHR(128))
END Hello_Select
-
The programmer here used VB.net but the library is the same for all the .net languages I believe. He used the sample code from the website for testing to develop his programs. I can't post his code. I don't have any experience with PCDK.
-
If the robot has the HMI (SNPX) option, which it might because you mentioned the GE Quickpanel View HMI, you can send robot register data back and forth to the robot. This may already be set up in the robot, look in the Variables for $SNPX_ASG settings. You can search for $SNPX_ASG in the forum for details. In the HMI, create an LREAL variable that points to a Robot register and set it equal to the AI4011 variable in a script.
-
We are doing that using Python in one application and VB.net in another application. We use the pyModbusTCP library for Python and Easy Modbus for VB. You should be able to use Easy Modbus for C#, see the website for samples and the library. http://easymodbustcp.net/en/
We have the HMI option in the robot so we can set up the $SNPX_ASG settings for the register transfer to the Python/VB programs. The HMI option allows us to use Modbus TCP to get the data without needing to purchase the Modbus TCP option for the robot.