Skip to content

A comprehensive guide and example code to establish UDP communication between a PC and a Kawasaki robot.

Notifications You must be signed in to change notification settings

codershiyar/kawasaki_robot_udp_tcp

Repository files navigation

Kawasaki Robot UDP Communication

This repository contains example code to demonstrate how to establish a UDP communication between a PC and a Kawasaki robot.

Files

  • robot_script.as: Kawasaki robot AS language script to receive UDP messages.
  • send_message.py: Python script to send UDP messages to the robot.
  • robot_tcp_communication.as: Kawasaki robot AS language script to establish TCP connection, receive data, and close the connection.
  • robot_tcp_communication.py: Python script to send TCP messages to the robot.

Setup

Kawasaki Robot

  1. Set up the robot with the provided script robot_script.as.
  2. Ensure the robot's IP address and port are correctly configured.

Python Script

  1. Ensure you have Python installed on your PC.
  2. Update the ROBOT_IP and ROBOT_PORT variables in send_message.py to match your robot's configuration.

UDP Communication

  1. Run the Kawasaki robot script robot_script.as on the robot.

  2. Execute the Python script send_message.py on your PC to send messages to the robot:

    python send_message.py
  3. The robot will receive the message and print it to its console.

TCP Communication

  1. Run the Kawasaki robot script robot_tcp_communication.as on the robot.
  2. The script contains three main programs:
    • connect_to_pc: Establishes the TCP connection to the PC.
    • receive_data: Continuously receives data from the PC and prints it.
    • close_connection: Closes the TCP connection.

Troubleshooting

  • Ensure both the PC and the robot are on the same network.
  • Verify the IP address and port configurations on both the PC and the robot.
  • Check for any network firewalls that might be blocking UDP or TCP traffic.

TCP Communication Script Details

robot_tcp_communication.as

.PROGRAM connect_to_pc()
  ; Configuration for connection using TCP.
  ; This scripts are created by Coder Shiyar
  timeout_open = 60
  pc_ip[1] = 192
  pc_ip[2] = 168
  pc_ip[3] = 0
  pc_ip[4] = 2  ; PC's IP address
  pc_port = 10001
  error_count = 0

connect:
  ; Start timer
  TIMER (2) = 0
  
  ; Attempt to connect to the PC
  TCP_CONNECT socket_id, pc_port, pc_ip[1], timeout_open
  
  ; Check if connection is successful
  IF socket_id < 0 THEN
    error_count = error_count + 1
    IF error_count >= 5 THEN
      PRINT "Client Communication with PC has failed"
    ELSE
      PRINT "TCP_CONNECT error id = ", socket_id, ", error count = ", error_count
      GOTO connect
    END
  ELSE
    PRINT "TCP_CONNECT OK id = ", socket_id, ", with time elapsed = ", TIMER (2)
  END
  
.END

.PROGRAM receive_data()
  ; Loop to receive data continuously
  WHILE TRUE DO
    num_bytes = 10
    max_length = 10
    timeout_receive = 60
    recv_result = 0
    
    ; Receive data from the PC
    TCP_RECV recv_result, socket_id, $receive_buffer[1], num_bytes, timeout_receive, max_length
    
    ; Check if data reception is successful
    IF recv_result < 0 THEN
      PRINT "TCP_RECV error in RECV", recv_result
      $receive_buffer[1] = "000"
    ELSE
      IF num_bytes > 0 THEN
        ; Print received data
        FOR i = 1 TO num_bytes
          PRINT "RecBuff[", i, "] = ", $receive_buffer[i]
          
          ; Check for specific messages
          IF $receive_buffer[1] == "1" THEN
            PRINT "IT IS 1"
          END
          IF $receive_buffer[1] == "2" THEN
            PRINT "IT IS 2"
          END
        END
      ELSE
        $receive_buffer[1] = "000"
        recv_result = -1
      END
    END
  END
 
.END

.PROGRAM close_connection()
  ; Close the connection to the PC
  close_result = 0
  IF socket_id >= 0 THEN
    TCP_CLOSE close_result, socket_id
  END
  
  ; Check if the connection is closed successfully
  IF close_result < 0 THEN
    PRINT "TCP_CLOSE error id = ", socket_id
  ELSE
    PRINT "TCP_CLOSE OK id = ", socket_id
  END
.END