my_real = get_real('*SYSTEM*','$SCR_GRP[1].$MCH_POS_X')
Lol, I forgot $. Now it is working
Thanks for the response tho R47 .
my_real = get_real('*SYSTEM*','$SCR_GRP[1].$MCH_POS_X')
Lol, I forgot $. Now it is working
Thanks for the response tho R47 .
Hello there,
I have created a socket server (Fanuc robot LR Mate 200iC/5L with R30iA controller) and client on Pc with python.
$SCR_GRP[1].$m_pos_enb = True
The server code looks like this:
PROGRAM tcpserver2
%STACKSIZE = 4000
%NOLOCKGROUP
%NOPAUSE=ERROR+COMMAND+TPENABLE
%ENVIRONMENT uif
%ENVIRONMENT sysdef
%ENVIRONMENT memo
%ENVIRONMENT kclop
%ENVIRONMENT bynam
%ENVIRONMENT fdev
%ENVIRONMENT flbt
%INCLUDE klevccdf
%INCLUDE klevkeys
%INCLUDE klevkmsk
-------------------------------------------------------------------------------
VAR
file_var : FILE
tmp_int : INTEGER
tmp_int1 : INTEGER
tmp_real : REAL
tmp_str : STRING[128]
tmp_str1 : STRING[128]
STATUS : INTEGER
entry : INTEGER
posreg : XYZWPR
my_real : REAL
-------------------------------------------------------------------------------
ROUTINE get_real(prog_name : STRING; var_name : STRING) : REAL
VAR
entry : INTEGER
i : REAL
STATUS : INTEGER
BEGIN
GET_VAR(entry, prog_name, var_name, i, STATUS)
IF STATUS<>0 THEN
WRITE('Error:[',prog_name,']',var_name,STATUS,CR)
ENDIF
RETURN(i)
END get_real
-------------------------------------------------------------------------------
BEGIN
-- DISCONNECT the server port BEFORE doing a CONNECT
WRITE('Disconnecting..',CR)
MSG_DISCO('S3:',STATUS)
WRITE('Done.',CR)
SET_FILE_ATR(file_var, ATR_IA)
-- set the server port before doing a connect
SET_VAR(entry, '*SYSTEM*','$HOSTS_CFG[3].$SERVER_PORT',1002,STATUS)
WRITE('Connecting..',CR)
MSG_CONNECT('S3:',STATUS)
WRITE(' Connect Status = ',STATUS,CR)
IF STATUS = 0 THEN
-- Open S3:
WRITE ('Opening',CR)
FOR tmp_int1 = 1 TO 20 DO
OPEN FILE file_var ('rw','S3:')
STATUS = IO_STATUS(file_var)
WRITE (STATUS,CR)
IF STATUS = 0 THEN
-- WRITE an INTEGER
FOR tmp_int = 1 TO 1000 DO
WRITE('Reading',CR)
-- Read 10 bytes
BYTES_AHEAD(file_var, entry, STATUS)
WRITE(entry, STATUS, CR)
READ file_var (tmp_str::10)
STATUS = IO_STATUS(file_var)
WRITE (STATUS, CR)
WRITE('Succesfull read data from client..',CR)
WRITE('Send data back to client..',CR)
-- Write 4 bytes (REAL)
my_real = get_real('*SYSTEM*','SCR_GRP[1].$MCH_POS_X')
WRITE file_var (my_real::9::2)
STATUS = IO_STATUS(file_var)
WRITE (STATUS, CR)
WRITE('Done sending!',CR)
ENDFOR
CLOSE FILE file_var
ENDIF
ENDFOR
WRITE('Disconnecting..',CR)
MSG_DISCO('S3:',STATUS)
WRITE('Done.',CR)
ENDIF
END tcpserver2
Display More
I am stuck on the following code below. I am trying to send a system variable to the client.
-- Write 4 bytes (REAL)
my_real = get_real('*SYSTEM*','SCR_GRP[1].$MCH_POS_X') <<
WRITE file_var (my_real::9::2)
Can someone help me, please?
Hello everyone,
Currently, I have established a connection between robot and pc by means of sockets. A python application runs a socket server, and on the Fanuc robot the client.
However, I have two additional questions I would like to ask you.
1) How can I send position data from the robot (for example x-axis) from the client to the server? I assume putting the script in BG-logic and refresh the variable constantly. However, how will the script look like? An example would be nice.
xPos=($SCR_GRP[1].$MCH_POS_X*10)
2) Do I need to open and close the server every time I want to send data to the server? Or just loop forever in a while loop?
Thanks in advance. Below my code.
PROGRAM dsenddata
%STACKSIZE = 4000
%NOLOCKGROUP
%NOPAUSE=ERROR+COMMAND+TPENABLE
%ENVIRONMENT uif
%ENVIRONMENT sysdef
%ENVIRONMENT kclop
%ENVIRONMENT bynam
%ENVIRONMENT fdev
%ENVIRONMENT flbt
%INCLUDE klevccdf
%INCLUDE klevkeys
%INCLUDE klevkmsk
VAR
file_var : FILE
tmp_int : INTEGER
tmp_str : STRING[128]
STATUS : INTEGER
entry : INTEGER
loop1 : BOOLEAN
BEGIN
SET_FILE_ATR(file_var, ATR_IA)
SET_VAR(entry, '*SYSTEM*','$HOSTC_CFG[1].$SERVER_PORT',8000,STATUS)
WRITE(' VAR status = ',STATUS,CR)
-- Connect the tag
MSG_CONNECT('C1:',STATUS)
WRITE(' Connect status = ',STATUS,CR)
loop1 = TRUE
IF STATUS = 0 THEN
WHILE loop1 = TRUE DO
WRITE('Opening file...',CR)
OPEN FILE file_var('rw','C1:')
STATUS = IO_STATUS(file_var)
IF STATUS = 0 THEN
tmp_str = 'Senddata'
WRITE file_var(tmp_str)
WRITE('Wrote: ',tmp_str,CR)
WRITE('Waiting to read from server...')
READ file_var(tmp_str)
STATUS = IO_STATUS(file_var)
WRITE('Read status: ',STATUS,CR)
WRITE('Read: ',tmp_str,CR)
loop1 = FALSE
WRITE('Closed file.',CR)
CLOSE FILE file_var
ELSE
WRITE('Error opening file',CR)
loop1 = FALSE
ENDIF
ENDWHILE
ENDIF
WRITE('Disconnecting..', CR)
MSG_DISCO('C1:',STATUS)
WRITE('Disconnect status=',STATUS,CR)
END dsenddata
Display More
Thank you for your reply Nation.
FANUC Robot LR 200 iC/5L and R30iA controller, so I will purchase KAREL.
The webpage data is too slow for me. Do you know how fast I can retreive the data with a socket server via TCP/IP?
Hi all,
Do I need to buy the KAREL license option to setup a socket server on the R30iA Mate Controller.
Or is there a way to do it without purchasing KAREL license?
I want to send the robot position via TCP/IP to the client side (PC). R648 (User Socket Msg) is installed on the controller.