Do you mean I should use Big Endian?
Little_Endian False here means the message is decode in Big_endian only.
Posts by Shubham_23
-
-
Hello Robot -Forum Fanuc Community, After referring to multiple solution and not being able to solve the issue I am posting my doubt here.
I am trying to send data from a Python client to move a Fanuc Robot Server in Roboguide. I have the Karel and Socket Programming packages installed on the Roboguide.
The Data I am sending it in the form of one integer and 6 real values which represents Joint values.
Here is the Python Client to send the Data. " I can't share the full python code but the The OpenFanucClient constructor sets the IP and Port Message and fanuc_client.process_msg uses Struct to unpack the data and also checks Little Endian. NOTE: Little Endian is False alwaysCode
Display Moreimport socket #Socket Params server_ip='127.0.0.1' server_port = 12345 socket_timeout_s = 4 #Sample Message test_id = 1 test_params = [46.0,16.0,-13.7,100.1,-45.2,-69.5] log = logging.getLogger(__name__) log.addHandler(logging.NullHandler()) # fanuc = OpenFanuc(host=server_ip,port=server_port) fanuc_client = OpenFanucClient(server_ip,server_port) try: #Connect to the server fanuc_client.connect() #Send and receive message try: fanuc_client.process_msg(OpenFanucMsg(id=test_id,params=test_params)) except Exception as e: print('Failed to process message',e) except socket.timeout: print("Socket timeout occurred. Connection timed out.") except Exception as e: print("Error:", e) finally: fanuc_client.disconnect() ------------------------------ packed_data = struct.pack( OpenFanucMsg.packed_data_format(), self.id, *self.default_params ) def packed_data_format(cls) -> str: """ Returns the format string that describe the data layout when packing and unpacking data. """ fmt = "<" if cls.little_endian else ">" fmt += "i" + str(cls.params_len) + "f" #>i6f return fmt
Code
Display MoreThe problem seems to be with Karel Server, as I am not very familiar with the bytes and communication nuances for Fanuc. So, apologies for any naive questions or missing details. Below is my Karel Code: I have written 4 different cases that I have tried and the error I encountered PROGRAM Claude -- translator directive %NOPAUSESHFT %DEFGROUP = 1 %COMMENT = '2023.09.19' %STACKSIZE = 4000 %NOLOCKGROUP %NOPAUSE=ERROR+COMMAND+TPENABLE -- Missing Environment Groups %ENVIRONMENT uif %ENVIRONMENT sysdef %ENVIRONMENT memo %ENVIRONMENT kclop %ENVIRONMENT bynam %ENVIRONMENT fdev %ENVIRONMENT flbt %ENVIRONMENT regope %INCLUDE klevccdf %INCLUDE klevkeys %INCLUDE klevkmsk -- const declarations CONST oRunningOk = 705 oError = 706 timeoutVal = 60000 myTim = 5 -- Timer used as timeout myTimeout = 40000 -- 40 seconds myTimOff = 10000 -- TODO - Check the proper Value rPosRet = 50 -- Position calculated by procedures rSelMov = 150 -- 1 Linear 2 PTP (Point-to-Point) rIniRet = 151 -- Various return registers -- program vars VAR -- file group ServerFile : FILE -- integer group temp_int : INTEGER stato : INTEGER -- status recByte : INTEGER codiceErr : INTEGER -- Error Code entry : INTEGER Ret : BOOLEAN i : INTEGER -- Unknown porta : INTEGER -- port faseMain : INTEGER -- Main Phase fase : INTEGER -- Phase portaHW : STRING[20] portaSW : STRING[20] ipHMI : STRING[15] temp_str : STRING[254] msg_id : REAL -- 'id' written in a message msg_params : ARRAY [9] OF REAL -- 'parameters' written in a message -- Boolean Group debug : BOOLEAN -- Array of positions aPosizioni : ARRAY [100] OF XYZWPR -- Similar to temp position -- Shared data for receiving and sending data bEndFound : BOOLEAN -- Unused nPezzo : INTEGER I1 : INTEGER R1 : REAL R2 : REAL R3 : REAL R4 : REAL R5 : REAL R6 : REAL R7 : REAL R8 : REAL R9 : REAL PosAttuale : XYZWPR -- Current Position Counter : INTEGER -- Unused c : INTEGER -- Unused CounterRet : INTEGER -- Unused pzz : INTEGER -- Unused PhaseOK : BOOLEAN -- Unused indicePos : INTEGER -- Initialization Server ROUTINE IniEth VAR i : INTEGER BEGIN faseMain = 0 fase = 0 portaSW = '12345' portaHW = 'S3:' stato = 0 debug = true -- Initialize 'ipHMI' if it is uninitialized IF UNINIT(ipHMI) THEN ipHMI = '192.168.1.110' ENDIF END IniEth ROUTINE wait_fr_data(neededBytes: INTEGER) : INTEGER VAR numBytes : INTEGER BEGIN numBytes = 0 -- Initialize variable to enter the loop WHILE (numBytes < neededBytes) DO BYTES_AHEAD(ServerFile, numBytes, stato) -- Count bytes received Write('Number of Bytes',numBytes,cr) IF stato <> 0 THEN -- Connection error faseMain = 0 fase = 0 RETURN(-1) ENDIF IF (numBytes >= neededBytes) THEN RETURN(0) ENDIF DELAY 1 ENDWHILE RETURN(-1) END wait_fr_data ROUTINE TestTCP VAR rit : INTEGER loop1 : BOOLEAN posGiunti : JOINTPOS tmp_int : INTEGER io_stato : INTEGER temp_real : Array[256] of Real stri : String[4] i : INTEGER BEGIN -- Initialize 'port' if it is uninitialized IF UNINIT(porta) THEN porta = 12345 ENDIF WHILE TRUE DO -- Wait for incoming connections MSG_DISCO('S3:', stato) CLOSE FILE ServerFile -- Initialize Server SET_FILE_ATR(ServerFile, ATR_IA) -- SET_FILE_ATR(ServerFile,ATR_READAHD) MSG_CONNECT('S3:', stato) IF stato = 0 THEN WRITE('New connection accepted. state=', stato, CR) CLR_IO_STAT(ServerFile) OPEN FILE ServerFile('rw', 'S3:') -- While connection is alive process incoming messages io_stato = IO_STATUS(ServerFile) WHILE io_stato = 0 DO WRITE('Opening File', CR) -- Case 1: Using Wait_fr_data function -- IF wait_fr_data(28) < 0 THEN -- Connection error, disconnect from Client and wait for new connection -- TODO: Add error handling and exit -- ELSE DELAY 100 Write('Post Delay',cr) --Case 2.0 -- Commenting the Wait_fr_data call : Error Waits at Line 175 -- For I = 1 to 9 DO -- WRITE('In Loop',cr) -- Read ServerFile(msg_params[i]) -- ENDFOR -- -- CASE 3 -- Error Prints String and some value as shown in the picture RobotForum: Only using 4 bytes -- READ ServerFile(temp_str::4) -- WRITE('String',temp_str::4) --Case 4-- Tried converting those strings to REAL Values resulted in the Syntax error -- CNV_STR_REAL((temp_str::4),I1) -- WRITE('[DEBUG] msg-in:',I1,cr) ---------------------------------------------------------------------- -- 181 CNV_STR_REAL((temp_str::4),I1) -- ^ ERROR -- ")" expected. -- 181 CNV_STR_REAL((temp_str::4),I1) -- ^ ERROR -- "," or ")" expected. -- 181 CNV_STR_REAL((temp_str::4),I1) -- ^ ERROR -- Invalid statement. ";" or new line expected. ------------------------------------------------------------------------------- -- ENDIF io_stato = IO_STATUS(ServerFile) ENDWHILE -- Connection with the Client was closed WRITE('Connection closed', CR) ELSE WRITE('Error in accepting new connection. state=', stato, CR) ENDIF ENDWHILE WRITE TPPROMPT('Disconnecting..', CR) MSG_DISCO('S3:', stato) CLOSE FILE ServerFile WRITE TPPROMPT('Done', CR) END TestTCP -- Main Function BEGIN IniEth TestTCP END Claude
Image: Case 3
Thanks
Shubham