Nachi机器人TCP通讯

输入格式211,-265,167\n
逗号为英文格式,\n表示坐标输入后记得回车

NachiRobot

VARIABLE.INC

' Variable declarations
' V: global variable
' L: local variable

' IP & port
IP_LAST,217
PORT,10030

' %: integer variable
ERR_COM,V%[1]
ERRCODE1,V%[2]
ERRCODE2,V%[3]

SENT_BYTES,V%[11]
RECIEVED_BYTES,V%[12]
BYTE_DATA,V%[13]
TOSEND_BYTES,V%[14]
rCurrentNum,V%[15]
DECISION_VALUE,V%[16]

RECVBUF_READ_READY,V%[21]
RECVBUF_WRITE_READY,V%[22]
SENDBUF_READ_READY,V%[23]
SENDBUF_WRITE_READY,V%[24]

SHUT_DOWN_EXEC,V%[25]
SHUT_DOWN_FINISHED,V%[26]

' $: str variable
SEND_STR,V$[1]
CharString,V$[2]
ARG_STR,V$[3]

STR_SAVE_OFFSET,10

RECV_STR1,V$[11]
RECV_STR2,V$[12]
RECV_STR3,V$[13]
RECV_STR4,V$[14]
RECV_STR5,V$[15]
RECV_STR6,V$[16]
RECV_STR7,V$[17]

' !: REAL Number
MOVE_POS_X,V![11]
MOVE_POS_Y,V![12]
MOVE_POS_Z,V![13]
MOVE_POS_RZ,V![14]
MOVE_POS_RY,V![15]
MOVE_POS_RX,V![16]

MZ04-01-A.999

INCLUDE "VARIABLE"

' 初始化
RECVBUF_READ_READY = 0
RECVBUF_WRITE_READY = 0
SENDBUF_READ_READY = 0
SENDBUF_WRITE_READY = 0

SHUT_DOWN_EXEC = 0
SHUT_DOWN_FINISHED = 0
ERR_COM = 0

MOVE_POS_RX = 0
MOVE_POS_RY = 90
MOVE_POS_RZ = 0
' Fixture direction fixing

' connect open --USERTASK.999
FORKMCR 999, 10000
*READY
' send welcome commond
CallProc WaitForSendReady()
SEND_STR = "Please enter coordinates or exit:"
CallProc ExecuteSend()

CallProc ExecuteRecieve()
IF "exit" = RECV_STR1 THEN *FINAL

' recv value
' CallProc ExecuteRecieve()

' move
DECISION_VALUE = VAL(RECV_STR4)
IF DECISION_VALUE = 0 AND rCurrentNum = 3
	MOVE_POS_X =  VAL(RECV_STR1)
	MOVE_POS_Y =  VAL(RECV_STR2)
	MOVE_POS_Z =  VAL(RECV_STR3)
	' MOVE_POS_RX = VAL(RECV_STR4)
	' MOVE_POS_RY = VAL(RECV_STR5)
	' MOVE_POS_RZ = VAL(RECV_STR6)
	CallProc ExecuteMove()
ENDIF
GOTO *READY

' program finished
*FINAL
SHUT_DOWN_EXEC = 1
IF SHUT_DOWN_FINISHED = 0 THEN *FINAL
END

' *********subfunction*********

UsrProc WaitForSendReady()
	*SEND_LOOP
	IF ERR_COM <> 0 THEN *FINAL
	IF SENDBUF_WRITE_READY = 0 THEN *SEND_LOOP
EndProc

UsrProc ExecuteSend()
	SENDBUF_READ_READY = 1
EndProc

UsrProc ExecuteRecieve()
	RECVBUF_WRITE_READY = 1
	*RECV_LOOP
	IF ERR_COM <> 0 THEN *FINAL
	IF RECVBUF_READ_READY = 0 THEN *RECV_LOOP
	RECVBUF_READ_READY = 0
EndProc

UsrProc ExecuteMove()
	MOVEX A=1,AC=3,SM=3, M1X, L, (MOVE_POS_X, MOVE_POS_Y, MOVE_POS_Z, MOVE_POS_RX,MOVE_POS_RY,MOVE_POS_RZ),R=10,MS
EndProc

USERTASK-A.999

' TCP/IP Server

INCLUDE "VARIABLE"

*CREATE
FOR L100%=0 TO 20 STEP 1
	SOCKCREATE 1, 0			'Socket#1 & TCP/IP
	IF E1%>=0 THEN *SOCKBIND
	PAUSE 500
NEXT
GOTO *ERROR_END

*SOCKBIND
SOCKBIND 1, PORT   ' PORT = 10030
IF E%[1] < 0 THEN *ERROR_END

' wait connect
*SOCKWAIT
SOCKWAIT 1,2,0
IF E%[1] < 0 THEN *ERROR_END

' ----------------------------
*COM_LOOP
SENDBUF_WRITE_READY = 1
IF SENDBUF_READ_READY <> 0 THEN *SEND_BUF
IF RECVBUF_WRITE_READY <> 0 THEN *RECV_BUF
IF SHUT_DOWN_EXEC <> 0 THEN *NORMAL_END
GOTO *COM_LOOP

*RECV_BUF
RECVBUF_WRITE_READY = 0

' receive data--------
rCurrentNum = 1
V$[rCurrentNum + STR_SAVE_OFFSET] = ""  
' RECV_STR1(V11$) = ""

*RECV_BYTE_LOOP
SOCKRECV 2, 1, 1, 0, RECIEVED_BYTES
' write to RECIEVED_BYTES(V12%)
IF E%[1] < 0 THEN *ERROR_END

' Extracts 1 byte of data from the buffer
GETBYTE 1, BYTE_DATA, 0
CharString = CHR$(BYTE_DATA)
IF 10 = BYTE_DATA OR 13 = BYTE_DATA
' In ASCII code 10 is line feed and 13 is carriage return 
' (their as the end of an instruction)
GOTO *RECV_END  ' Out1
ENDIF

IF "," = CharString
rCurrentNum = rCurrentNum + 1
V$[rCurrentNum + STR_SAVE_OFFSET] = ""
GOTO *RECV_BYTE_LOOP
ENDIF

V$[rCurrentNum + STR_SAVE_OFFSET] = V$[rCurrentNum + STR_SAVE_OFFSET] + CharString
GOTO *RECV_BYTE_LOOP
' receive data---------

*RECV_END
SOCKRECV 2, 2, 1, 0, RECIEVED_BYTES
' write to RECIEVED_BYTES(V12%)
IF E%[1] < 0 THEN *ERROR_END
RECVBUF_READ_READY = 1
' ExecuteRecieve() Loop
' BYTE_DATA = 0
GOTO *COM_LOOP
' receive data end---------


' sent data--------
*SEND_BUF
SENDBUF_READ_READY = 0
SOCKSENDSTR 2, SEND_STR, LEN(SEND_STR), 0, SENT_BYTES, 2
IF E%[1] < 0 THEN *ERROR_END
GOTO *COM_LOOP
' sent data end--------

*ERROR_END
ERRCODE1 = E%[1]
ERRCODE2 = E%[2]
ERR_COM = 1

' close the connect
*NORMAL_END
SOCKCLOSE 1
SOCKCLOSE 2
SHUT_DOWN_FINISHED = 1
END

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: NACHI机器人编程软件是一款专门为机器人编程而设计的软件。该软件提供了丰富的功能和工具,可以帮助程序员轻松地创建和调试机器人程序。在使用NACHI机器人编程软件时,用户可以通过简单的拖拽操作设定机器人的动作、速度、位置,甚至可以控制机器人的力度和力矩,实现复杂的运动路径规划和控制。此外,NACHI机器人编程软件还支持多种编程语言和界面语言,满足用户不同的编程需求。用户可以根据自己的喜好和实际需求选择不同的编程方式进行编程,比如C/C++、VB、C#等。在编写机器人程序时,NACHI机器人编程软件还支持实时仿真和调试,用户可以在模拟环境下调试程序,以避免机器人运动时的可能错误和危险。总之,NACHI机器人编程软件是一款强大、灵活、易用的机器人编程工具,可以帮助用户高效地实现机器人开发和应用。 ### 回答2: NACHI机器人编程软件是一个非常实用的工具,它能够帮助工程师和程序员轻松地编写机器人运动控制程序。与传统的编程方式相比,使用NACHI机器人编程软件能大幅简化编程难度和缩短开发周期,提高生产效率。 NACHI机器人编程软件可以自动化生成机器人的路径规划,减少人工介入,提高操作的安全性和可靠性。此外,该软件支持多种编程语言和编程模式,能够根据不同的工作场景进行自适应调整,实现精准控制。 与此同时,NACHI机器人编程软件还具备可视化编程界面,使得编程过程更加生动直观,易于理解。用户可以通过拖拽组件、设置参数等方式轻松完成编程任务,避免了繁琐的手工调试过程,提高了编程效率和品质。 总的来说,NACHI机器人编程软件是一个功能强大、易于使用的工具,它能够帮助用户快速地开发出高质量的机器人控制程序,满足各种物料搬运、加工、装配等工艺要求,为自动化生产提供了有力的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

织蛾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值