? ? ? ? ? ? ? ? ? ? 雅馬哈與上位機(jī)TCP通訊
1.0 可以先用調(diào)試助手測(cè)試,先設(shè)定電腦IP以及雅馬哈控制器IP,系統(tǒng)--通信設(shè)置,設(shè)置控制器的IP

1.1 在選項(xiàng)--通用以太網(wǎng)端口,設(shè)置GP0(通訊對(duì)象),模式伺服,通訊對(duì)象的IP,端口1004,改行符CRLF,這里要注意了,有換行符的0A 0B為換行符,不添加會(huì)不識(shí)別的

1.2 剛才在控制器那端,設(shè)置的通訊對(duì)象為伺服端,那控制器就是客戶端,在調(diào)試助手這里,設(shè)置的對(duì)象就是控制器端,所有協(xié)議類(lèi)型為客戶端TCP Client,所有這里設(shè)置的是控制器的IP和端口,注意跟控制設(shè)置的IP端口一致

1.3 具體代碼如下:
*CONNECT:
DQ2$="trigger,"+"1"+","+"1" '--------DQ$為字符串,DQ!為實(shí)數(shù),DQ%為整數(shù)類(lèi)型
A$="" '--------字符串清空
SEND DQ2$ TO GP0'-----------------------GP0為通信端,觸發(fā)上相機(jī)1拍照{取料拍照}
SEND GP0 TO A$'---------------接收端,當(dāng)通訊GP在前面就為接收,否則為發(fā)送,A$為字符串
OK$=MID$(A$,1,1) '----------讀取A$從第1個(gè)開(kāi)始的1個(gè)字符,賦值給OK$
'
IF OK$="1" THEN
? ?X!=VAL(MID$(A$,3,8))'-----一般都為8個(gè)字節(jié),VAL為字符串轉(zhuǎn)換成實(shí)數(shù)?
? ?Y!=VAL(MID$(A$,12,8))
? ?R!=VAL(MID$(A$,21,8))
? ?LOC1(P2)=X! '--------把實(shí)數(shù)X!傳送給P2點(diǎn)位的第一軸坐標(biāo)
? ?LOC2(P2)=Y!
? ?LOC4(P2)=R!
? ?LOC3(P2)=50??
? ?GOTO *MAIN
ELSE
? ? DELAY 5000
? ? GOTO *CONNECT
? ? HALT
ENDIF
1.4 如下圖,如果相機(jī)發(fā)送1,-100.340,223.4500,23.56000,0,那我收到的第一個(gè)字符就是1,第二個(gè)就是,第三個(gè)就是-,以此類(lèi)推。這里要注意要知道機(jī)器人坐標(biāo)的最大數(shù)值,這里雅馬哈的最大位數(shù)連上+-和小數(shù)點(diǎn).是8位字符,所以每個(gè)坐標(biāo)都要滿8位,如果坐標(biāo)不滿(可能10.12也有可能是100.12)就要補(bǔ)零,要么上位機(jī)相機(jī)補(bǔ)零,要么機(jī)器人控制器識(shí)別字符或者分隔符,雅馬哈是不能識(shí)別分隔符的,而愛(ài)普生是可以的,有識(shí)別分隔符指令會(huì)簡(jiǎn)單點(diǎn)不用補(bǔ)零,識(shí)別字符的話會(huì)比較麻煩.所以雅馬哈的話最好時(shí)上位機(jī)補(bǔ)零后發(fā)送到機(jī)器人,

了解最新工控PLC,上位機(jī),機(jī)器人,通訊等實(shí)例測(cè)試筆記~~請(qǐng)關(guān)注百家號(hào)或頭條號(hào)--老王工控筆記