Nasc Sraitheach#
Réamhrá#
Ligeann SerialLink do dhá Inchinn V5 cumarsáid a dhéanamh trí shonraí sraitheacha amha a sheoladh agus a fháil thar VEX Link. In ionad teachtaireachtaí lipéadaithe, tarchuireann SerialLink maolán (teaghrán nó eagar byte). Fágann sé seo go bhfuil sé úsáideach le haghaidh cumarsáide ardleibhéil idir róbat, amhail sonraí braiteora a shruthú, formáidí paicéad saincheaptha a sheoladh, nó do phrótacal féin a thógáil ar bharr bytes.
Gach uair a úsáidtear send cuireann sé sonraí leis an maolán glactha atá ag an V5 Brain nasctha. Léitear sonraí san ord ina dtagann siad (ar dtús isteach, ar dtús amach). Má sheoltar il-mhaoláin sula n-úsáideann an V5 Brain eile receive, fanann siad sa scuaine agus cuirtear ar ais iad ceann ar cheann san ord inar seoladh iad. Ós rud é gur féidir le sonraí scuaine a dhéanamh, d’fhéadfadh maoláin mhóra a sheoladh arís agus arís eile i ngach lúb riaráiste a chruthú; i gcás naisc atá ríthábhachtach ó thaobh ama de, ná seol ach an méid atá uait.
Tábhachtach: Caithfidh an dá róbat tionscadail a úsáideann SerialLink a bheith ag rith ag an am céanna, nó ní sheolfar/ní gheofar aon sonraí.
Úsáideann an leathanach seo link mar shampla SerialLink Cuir d’ainm cumraithe féin ina áit de réir mar is gá.
Seo thíos liosta de na modhanna atá ar fáil:
is_linked– Tugann sé seo ar ais an bhfuil an Inchinn seo ceangailte go gníomhach lena Inchinn phéireáilte.send– Seolann sé teachtaireacht ghearr (le sonraí int/snámhphointe roghnacha) chuig an Inchinn péireáilte.receive– Fanann sé leis an gcéad teachtaireacht isteach eile agus seolann sé ar ais í.received– Cláraíonn sé feidhm le glaoch uirthi aon uair a fhaightear teachtaireacht nua.
Cruthaigh Nasc#
Cruthaigh Nasc Sraitheach ar an dá Inchinn V5 chun cainéal cumarsáide a bhunú eatarthu—gan sreang le Raidióin Róbat V5 nó trí Chábla Cliste sreangaithe—ionas gur féidir leis na róbónna sonraí sraitheacha amha a sheoladh chuig a chéile.
SerialLink(smartport, name, linktype, wired)
Paraiméadar |
Cur síos |
|---|---|
|
An Port Cliste a úsáidtear don nasc seo—an port a bhfuil an Raidió Róbat V5 ceangailte leis (gan sreang) nó a bhfuil an Cábla Cliste breiseánaithe isteach ann (sreangaithe). Scríofa mar |
|
An t-ainm uathúil le tabhairt don nasc seo mar shreang. |
|
An ról a úsáidfidh an Inchinn seo don phéire nasc seo. Ní mór Bainisteoir amháin agus Oibrí amháin a bheith i ngach péire:
|
|
Roghnach. Cibé acu an bhfuil an nasc seo sreangaithe nó gan sreang:
|
Cód do Róbat 1
""" Create a wireless link in Port 1 name: VEXRoboticsLink123456789 linktype: Manager """ link = SerialLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.MANAGER)Cód do Róbat 2
""" Create a wireless link in Port 1 name: VEXRoboticsLink123456789 linktype: Worker """ link = SerialLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.WORKER)
Modhanna atá ar Fáil#
Nuair a bheidh do SerialLink socraithe agus na Brains nasctha, is féidir leat na modhanna thíos a úsáid chun sonraí sraitheacha amha a sheoladh, a fháil agus freagairt dóibh.
is_linked#
Tugann an modh is_linked ar ais cibé an bhfuil na V5 Brains ar SerialLink péireáilte le chéile.
True– Tá an dá inchinn V5 péireáilte agus ag cumarsáid ar an nasc seo.False– Níl an dá Inchinn V5 péireáilte ar an nasc seo.
Nóta: Is dea-chleachtas é a chinntiú i gcónaí go bhfuil na V5 Brains nasctha ag tús tionscadail sula ritheann tú aon chód eile.
Usage:
link.is_linked()
Paraiméadair |
Cur síos |
|---|---|
Níl aon pharaiméadair ag an modh seo. |
Cód do Róbat 1
# Send a message to the other robot # Create the link link = SerialLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.MANAGER) # Do not run code UNTIL the Brains are linked while not link.is_linked(): wait(0.1, SECONDS) brain.screen.print("Robot 1 - Manager") link.send("HELLO")Cód do Róbat 2
# Display the message that Robot 1 sends # Create the link link = SerialLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.WORKER) # Do not run code UNTIL the Brains are linked while not link.is_linked(): wait(0.1, SECONDS) brain.screen.print("Robot 2 - Worker") brain.screen.next_row() def received_message(bytearray, length): # Slice the bytearray to the valid data data = bytearray[:length] # Decode and strip the message before displaying it text = data.decode().strip() brain.screen.print("Got: ", text) # Call received_message whenever a message is received link.received(received_message)
send#
send tarchuireann sé beart sraitheach amha chuig an V5 Brain nasctha eile.
Agus na sonraí sin á léamh le receive, ní fhillfidh receive ach amháin nuair a bheidh an líon beart atá sonraithe ag a pharaiméadar length bailithe aige. Dá bhrí sin, má ghlaonn do chód receive i gcónaí le fad length, ba cheart duit a chinntiú go bhfuil an líon beart sin i ngach teachtaireacht a sheoltar le send (go minic trí líonadh) ionas nach gcuirfidh an glacadóir bac ar bheith ag fanacht le beart breise.
Mura mian leat a bheith ag brath ar chomhaireamh beacht beacht, bain úsáid as received ina ionad; ligeann sé duit cibé beart atá ar fáil a láimhseáil gan fad sonrach a bheith ag teastáil.
Usage:
send(buffer)
Paraiméadair |
Cur síos |
|---|---|
|
Na sonraí le seoladh chuig an V5 Brain nasctha eile. Is féidir gur teaghrán |
Cód do Róbat 1
# Send a message to the other robot # Create the link link = SerialLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.MANAGER) # Do not run code UNTIL the Brains are linked while not link.is_linked(): wait(0.1, SECONDS) brain.screen.print("Robot 1 - Manager") link.send("HELLO")Cód do Róbat 2
# Display the message that Robot 1 sends # Create the link link = SerialLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.WORKER) # Do not run code UNTIL the Brains are linked while not link.is_linked(): wait(0.1, SECONDS) brain.screen.print("Robot 2 - Worker") brain.screen.next_row() def received_message(bytearray, length): # Slice the bytearray to the valid data data = bytearray[:length] # Decode and strip the message before displaying it text = data.decode().strip() brain.screen.print("Got: ", text) # Call received_message whenever a message is received link.received(received_message)
receive#
receive tugann sé sonraí sraitheacha ar ais ón V5 Brain nasctha eile in ord FIFO (na sonraí neamhléite is sine ar dtús).
Ós rud é go bhfanann receive le haghaidh comhaireamh beart cruinn, is minic a bhíonn líonadh ag teastáil le haghaidh teachtaireachtaí fad seasta nuair a úsáidtear receive ionas go sroicheann gach teachtaireacht an méid ionchais. Má tharchuireann an seoltóir níos lú ná send beart, leanfaidh length ag fanacht leis na beart atá fágtha agus ní sheolfaidh sé aon rud ar ais.
Má tá an scuaine folamh agus má sholáthraíonn tú sos ama timeout, receive fanann sé suas leis an líon sin milleasoicind le haghaidh sonraí nua. Mura dtagann aon rud isteach sa fhuinneog sin, filleann sé None. Fanann aon sonraí a sheoltar ina dhiaidh sin sa scuaine le léamh níos déanaí.
Usage:
receive(length, timeout)
Paraiméadair |
Cur síos |
|---|---|
|
Líon na mbeart le glacadh. |
|
Roghnach. Cé chomh fada i milleasoicindí a fhaightear |
Cód do Róbat 1
# Send a math problem for the other Brain to solve # Create the link link = SerialLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.MANAGER) # Do not run code UNTIL the Brains are linked while not link.is_linked(): wait(0.1, SECONDS) brain.screen.print("Robot 1 - Manager") """ Change whether to "add" or "subtract", then what numbers to use in the operation. """ packet = "add,7,2.5" # Pad with spaces until it's exactly 16 bytes while len(packet) < 16: packet = packet + " " link.send(packet)Cód do Róbat 2
# Solve the math problem that the other Brain sends # Create the link link = SerialLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.WORKER) # Do not run code UNTIL the Brains are linked while not link.is_linked(): wait(0.1, SECONDS) brain.screen.print("Robot 2 - Worker") brain.screen.next_row() # Receive exactly 16 bytes buffer = link.receive(16) # Remove the added " " padding text = buffer.decode().strip() # Separate the operator and numbers parts = text.split(",") operator = parts[0] a = float(parts[1]) b = float(parts[2]) # Use what operator was sent if operator == "add": result = a + b elif operator == "subtract": result = a - b # If not "add" or "subtract", do nothing else: pass brain.screen.print("Result = ", result)
received#
received feidhm le glaoch uirthi aon uair a fhaigheann an V5 Brain sonraí sraitheacha.
Usage:
link.received(callback)
Paraiméadair |
Cur síos |
|---|---|
|
Feidhm [Feidhm] atá sainithe roimhe seo a fhorghníomhaítear nuair a fhaigheann an V5 Brain sonraí sraitheacha. |
received glao ar ais a ghlaoitear le dhá argóint:
Síniú Athghlao:
callback(buffer, length)
Argóint |
Cur síos |
|---|---|
|
Eagar |
|
Líon na mbeart bailí a fuarthas i |
Cód do Róbat 1
# Send a message to the other robot # Create the link link = SerialLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.MANAGER) # Do not run code UNTIL the Brains are linked while not link.is_linked(): wait(0.1, SECONDS) brain.screen.print("Robot 1 - Manager") link.send("HELLO")Cód do Róbat 2
# Display the message that Robot 1 sends # Create the link link = SerialLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.WORKER) # Do not run code UNTIL the Brains are linked while not link.is_linked(): wait(0.1, SECONDS) brain.screen.print("Robot 2 - Worker") brain.screen.next_row() def received_message(bytearray, length): # Slice the bytearray to the valid data data = bytearray[:length] # Decode and strip the message before displaying it text = data.decode().strip() brain.screen.print("Got: ", text) # Call received_message whenever a message is received link.received(received_message)