Okay So I found on forum Karel program which saves recieved data to position register On first look it should work fine, but when I send string with 6 coordinates (string is in format ("x, y, z, w, r, p")) the position register does not change For me Karel is working properly, can you confirm if it is okay?
But i do not know why it does not get data from python. I made simple client and server code in python and I have connection between them
Code
PROGRAM client
%STACKSIZE = 4000
%NOLOCKGROUP
%NOPAUSE=ERROR+COMMAND+TPENABLE
%ENVIRONMENT uif
%ENVIRONMENT sysdef
%ENVIRONMENT memo
%ENVIRONMENT kclop
%ENVIRONMENT bynam
%ENVIRONMENT fdev
%ENVIRONMENT flbt
%ENVIRONMENT REGOPE
%INCLUDE klevccdf
%INCLUDE klevkeys
%INCLUDE klevkmsk
-------------------------------------------------------------------------------
VAR
file_var : FILE
STATUS : INTEGER
entry : INTEGER
loop : BOOLEAN
tmp : INTEGER
pose : XYZWPR
pose_str : STRING[254]
pose_arr : ARRAY[6] OF STRING[254]
iterator : INTEGER
str_start : INTEGER
str_end : INTEGER
-------------------------------------------------------------------------------
BEGIN
SET_FILE_ATR(file_var, ATR_IA)
-- Set the server port before doing a connect
SET_VAR(entry, '*SYSTEM*', '$HOST_CFG[1].$SERVER_PORT',8000,STATUS)
WRITE('Connecting..',CR)
MSG_CONNECT('C3:',STATUS)
WRITE(' CONNECT STATUS = ',STATUS,CR)
IF STATUS = 0 THEN
-- Open C3:
WRITE ('Opening',CR)
OPEN FILE file_var ('rw','C3:')
STATUS = IO_STATUS(file_var)
WRITE ('FILE STATUS',STATUS,CR)
IF STATUS = 0 THEN
loop = TRUE
WHILE loop = TRUE DO
BYTES_AHEAD(file_var, entry, STATUS)
IF STATUS = 0 THEN
IF entry > 0 THEN
READ file_var(pose_str::entry)
-- Parse the income csv string and extract numbers
str_start = 1
str_end = 1
FOR iterator = 1 TO 6 DO
WHILE SUB_STR(pose_str, str_end, 1) <> ',' DO
str_end = str_end + 1
ENDWHILE
pose_arr[iterator] = SUB_STR(pose_str, str_start, str_end - str_start)
str_start = str_end + 1
str_end = str_start
ENDFOR
WRITE('Pose Received:', CR)
FOR iterator = 1 TO 6 DO
WRITE(pose_arr[iterator], CR)
ENDFOR
WRITE(CR)
-- Modify the position register
CNV_STR_REAL(pose_arr[1], pose.X)
CNV_STR_REAL(pose_arr[2], pose.Y)
CNV_STR_REAL(pose_arr[3], pose.Z)
CNV_STR_REAL(pose_arr[4], pose.W)
CNV_STR_REAL(pose_arr[5], pose.P)
CNV_STR_REAL(pose_arr[6], pose.R)
pose.config_data.CFG_TURN_NO1 = 0
pose.config_data.CFG_TURN_NO2 = 0
pose.config_data.CFG_TURN_NO3 = 0
pose.config_data.CFG_FLIP = FALSE
pose.config_data.CFG_UP = TRUE
pose.config_data.CFG_FRONT = TRUE
SET_POS_REG(8, pose, STATUS)
-- CALL_PROG('move_to_pr', tmp)
ENDIF
ENDIF
DELAY 50
ENDWHILE
CLOSE FILE file_var
ENDIF
WRITE('Disconnecting..',CR)
MSG_DISCO('C3:',STATUS)
WRITE('Done.',CR)
ENDIF
END client
Display More