You are on page 1of 16

A3 / 1

Anexa 3
Funcii predefinite n limbajul NXC pentru
comanda motoarelor robotului NXT

Coninut
1. Funcii primitive ............................................................................................ 2
1.1. Constante predefinite pentru modulul de ieire...................................... 2
2. Forme convenabile de apelare a funciilor primitive.................................. 9


Doarece controlul motoarelor este o necesitate n programarea roboilor, sunt
asigurate pentru a facilita lucrul cu porturile de iesire un numr de apeluri de de
funcii specifice, cu functionalti variate ce sunt descrise n urmtoarea seciune.
Sunt metode mai convenabile pentru scrierea de programe mai concise.
n aceast anex sunt prezentate funciile predefinite n limbajul NXC pentru
comanda i citirea strii modulului de ieire NXT, asociat motoarelor, prin
intermediul firmware-ului.
Exist, n esen, doar dou funcii una de scriere (pentru trimiterea
comenzilor, setarea parametrilor), i una de citire (pentru citirea parametrilor de
funcionare, a strii modulului). Prin parametrii lor, predefinii ca i constante,
aceste dou funcii asigur n totalitate interfaa ntre program i partea firmware-
ului care gestioneaz modulul de ieire. Aceste funcii sunt numite primitive
(Primitive calls).
Pe lng acestea, mai sunt definite n API-ul NXC i o serie de funcii, numite
convenabile (Convenient calls), care au la baz funciile primitive apelate implicit
cu o anumii parametri, i care pot fi de folos n exprimarea mai compact a
comenzilor.
n paragraful 1 sunt date cele dou funcii primitive i constantele predefinite,
iar n paragraful 2 sunt prezentate funciile convenabile.

Anexa 3
A3 / 2

1. Funcii primitive

GetOutput(port, const field)
Funcia returneaz valoarea parametrului specificat prin cmpul field, pentru portul
de ieire specificat prin port.
Porturile de ieire posibile sunt OUT_A, OUT_B, OUT_C. Adresele acestora sunt
date n tabelul 3.1.
n tabelul 3.2 sunt date constantele predefinite pntru cmpuri i domeniile de valori
posibile.
Exemplu:
// Citete valoarea furnizat de counterul asociat encoderului, de la portul A.
x = Get Out put ( OUT_A, TachoCount )

SetOutput(port, const field1, val1, , const fieldN, valN)
Atribuie cmpurilor field1...fieldn valorile specificate val1...valn. Portul de ieire este
specificat prin constanta port.
Porturile de ieire posibile i adresele lor sunt date n tabelul 3.1.

n tabelul 3.2 sunt date constantele predefinite pntru cmpuri i domeniile de valori
posibile.
Exemplu:
// Stabilete poziia dorit la 720 de grade pentru (motoarele conectate la) porturile A i B:
Set Out put ( OUT_AB, TachoLi mi t , 720) ;

1.1. Constante predefinite pentru modulul de ieire

Aproape toate funciile NXC API ce fac referire la porturile de ieire primesc
ca prim argument o ieire sau un set de ieiri ce reprezint portul sau porturile de
ieire corespunztoare. Adresele acestora sunt specificate n tabelul 3.1.
Funcii predefinite n limbajul NXC pentru comanda direct a motoarelor
A3 / 3

Tabel 3.1 Constantele porturilor de iesire









Parametrii de funcionare i de stare ai modulului de ieire sunt specificai ca
i cmpuri n funciile primitive. Aceste cmpuri reprezint de fapt adrese, i sunt
predefinite, ca i constante, pentru a uura utilizarea lor. Aceste constante
predefinite i domeniile posibile ale valorilor care se pot scrie /citi la /de la adresele
pe care le definesc sunt prezentate tabelul 3.2.
Tabel 3.2 Constantele predefinte pentru cmpurile funciilor primitive
Constante
predefinite
pentru
cmpuri
Tipul Acces Domeniu Semnificaie
UpdateFlags ubyte Citire/
Scriere
0... 255 Sunt indicatori folosii pentru
actualizarea comenzilor.
Acest cmp poate include orice
combinaie de bii de stare,
Constante predefinite pentru porturile
de intrare/iesire la care se conecteaz
motoare
Valoare
(adresa relativ)
OUT_A 0x00
OUT_B 0x01
OUT_C 0x02
OUT_AB 0x03
OUT_AC 0x04
OUT_BC 0x05
OUT_ABC 0x06
Anexa 3
A3 / 4

descris n tabelul 3.3
OutputMode ubyte Citire/
Scriere
0... 255 Permite setarea explicit a
modului de lucru. Acesta este un
cmp de bii ce poate include
oricare din constantele
prezentate n tabelul 3.4.
Exemple:
- Prin setarea bitului
OUT_MODE_MOTORON se
permite alimentarea motoarelor.
- Pentru a activa franarea
electrica se seteaz
OUT_MODE_BRAKE.
Se folosete
UF_UPDATE_MODE mpreun
cu UpdateFlags n momentul n
care se doresc a fi comise
modificrile efectuate asupra
acestui cmp .
Power sbyte Citire/
Scriere
[-100,
100]
Specific nivelul de putere al
ieirii (valoarea absolut este
factorul de umplere al
semnalului PWM de tensiune).
n cazul n care se folosete
regulatorul intern de vitez,
valoarea pentru power aplicat
efectiv este calculat de
regulator.
Semnul valorii scrise n acest
cmp controleaz direcia de
rotaie.
Se folosete
UF_UPDATE_POWER cu
UpdateFlags n momentul n
Funcii predefinite n limbajul NXC pentru comanda direct a motoarelor
A3 / 5

care se doresc a fi comise
modificrile efectuate asupra
acestui cmp.
ActualSpeed sbyte Citire [-100,
100]
Returneaz nivelul de putere
efectiv aplicat de firmware.
n bucl deschis, ActualSeed
este chiar Power. Acestea sunt
diferite n cazul n care se
utilizeaz regulatorul de viteza al
firmware-ului.
TachoCount slong Citire signed
long
Returneaz poziia unghiular
actual a motorului, relativ la
poziia iniial. Poziia iniial
poate fi cea de la nceputul
rulrii programului sau poziia n
care care se afla motorul n
momentul n care s-a impus
ultima poziie-int (TachoLimit
a se vedea mai jos). Se
reseteaz automat de fiecare
dat cnd se stabilete o nou
poziie int.
Valoarea este citit de la
firmware n grade, acesta
calculnd-o pe baza numrului
de pulsuri citite de la encoder.
Semnul valorii citite indic
direcia de rotaie a motorului
relativ la poziia iniial.
Pentru a reseta TachoCount i
a anula poziia-int se seteaza
flag-ul
UF_UPDATE_RESET_COUNT,
cu UpdateFlags.
Anexa 3
A3 / 6

TachoLimit ulong Citire/
Scriere
unsigned
long
Prin TachoLimit se specific
poziia-int, adic unghiul cu
care se dorete s se roteasc
motorul.
Se foloseste
UF_UPDATE_TACHO_LIMIT i
UpdateFlags pentru a comite
modificarea fcut pentru
TachoLimit.
TurnRatio sbyte Citire/
Scriere
[-100,
100]
Permite distribuirea vitezei
ntre dou motoare.
Exist doar trei combinaii
posibile ale ieirilor: OUT_AB,
OUT_BC i OUT_AC, utilizabile
cu TurnRatio n fiecare dintre
aceste trei opiuni primul motor
listat este considerat a fi motorul
din stnga.
Valorile negative ale
constantei TurnRatio nclin
balansul de viteza spre motorul
din stnga n timp ce valorile
pozitive l schimb spre drepta.
O valoare absolut de 50
conduce la oprirea unui motor,
iar cellalt primete ntreaga
valoare a vitezei de referin.
Pentru valoarea absolut de 100
cele dou motoare primesc
aceeai vitez dar de sens
opus.
RegMode ubyte Citire/
Scriere
0...255 Modul de reglare folosit pentru
regulatorul intern de vitez.
Exist dou moduri posibile:
Funcii predefinite n limbajul NXC pentru comanda direct a motoarelor
A3 / 7

- Reglaj de vitez pentru un
motor. n acest mod, firmware-ul
ncearc s menin viteza
impus motorului
- Sincronizarea nseamn c
firmware-ul ncearc s menin
aceeai vitez la cele dou
motoare, indiferent de
ncrcarea fizic. Acest mod
poate fi utilizat pentru pstrarea
automat a unui traseu drept de
robotul mobil. De asemena
acest mod poate fi utilizat cu
constanta TurnRatio ce
furnizeaz un balans de vitez.
Setarea
OUT_REGMODE_SYNC pentru
dou porturi ale motorului
sincronizarea vitezelor acestora.
Overload ubyte Citire 0, 1 Bit de testare a suprancrcrii
motoarelor
RegPValue ubyte Citire/
Scriere
0...255 Cmp pentru setarea
coeficientului proporional al
regulatorului PID implementat la
nivel de firmware. Necesit
actualizare cu
UF_UPDATE_PID_VALUES
RegIValue ubyte Citire/
Scriere
0...255 Cmp pentru setarea
coeficientului integral al
regulatorului PID implementat la
nivel de firmware. Necesit
actualizare cu
UF_UPDATE_PID_VALUES.
RegDValue ubyte Citire/ 0...255 Cmp pentru setarea
coeficientului derivativ al
Anexa 3
A3 / 8

Scriere regulatorului PID implementat la
nivel de firmware. Necesit
actualizare cu
UF_UPDATE_PID_VALUES

Valorile valide ale campului UpdateFlags sunt descrise in tabelul 3.3.
Tabel 3.3 Constantele UpdateFlags
Constantele UpdateFlags Efect
UF_UPDATE_MODE Opereaza (comite) schimbarile
cmpului OutputMode.
UF_UPDATE_SPEED Opereaza (comite) schimbarile
cmpului Power.
UF_UPDATE_TACHO_LIMIT Opereaza schimbarile
cmpului TachoLimit.
UF_UPDATE_RESET_COUNT Reseteaza toate counterele de
rotatie, anuleaza TachoLimit
UF_UPDATE_PID_VALUES Opereaza simultan schimbarile
cmpurilor RegPValue, RegIValue
i RegDValue
Se foloseste UF_UPDATE_MODE, UF_UPDATE_SPEED,
UF_UPDATE_TACHO_LIMIT, si UF_UPDATE_PID_VALUES mpreun cu alte
cmpuri pentru a opera schimbri n starea ieirilor.
Valorile valide ale constantelor OutputMode sunt descrise in tabelul 3.4.
Tabel 3.4 Constantele OutputMode
Constante OutputMode Valoare Efect
Funcii predefinite n limbajul NXC pentru comanda direct a motoarelor
A3 / 9

OUT_MODE_COAST 0x00 ntrerupe alimentarea motoarelor
OUT_MODE_BRAKE 0x02 Frnare electric a motoarelor
OUT_MODE_REGULATED 0x04 Regulator vitez / poziie activat

Valorile valide ale constantelor RegMode sunt descrise n tabelul 3.5.
Tabel 3.5 Constantele RegMode
Constante RegMode Valoare Efect
OUT_REGMODE_IDLE 0x00 Dezactiveaz regulatoarele
OUT_REGMODE_SPEED 0x01 Activeaz reglajul de vitez
OUT_REGMODE_SYNC 0x02 Asigur rotirea sincron a dou
motoare.

2. Forme convenabile de apelare a funciilor primitive
Comenzile de micare ale motoarelor pot fi date utiliznd funciile primitive,
n care se specific parametrii, o parte dintre acetia necesitnd apeluri
suplimentare pentru actualizare, prin intermediul flag-urilor. Pentru a uura
programarea, n API-ul NXC exist o serie de funcii care reprezint forme
convenabile de apel al funciilor primitive, folosind implicit anumii parametri i
actualizare automat pentru cei care cer actualizare.
Versiunile Ex ale functiilor permit resetarea counterelor asociate
encoderelor, folosind constantele de resetare prezentate in tabelul 3.6.
Tabel 3.6. Constantele de resetare
Anexa 3
A3 / 10







Off(port)
Funcie pentru oprirea motorului (motoarelor) conectat la portul specificat, prin
frn electric. Adresele porturilor de ieire pot fi definite ca variabile sau
constante. Porturile de ieire posibile sunt date n tabelul 3.1.
Exemplu:
Of f ( OUT_A) ; // oprete motorul conectat la portul A
OffEx(port, const reset)
Versiunea Ex a funciei Off().
Valorile valide pentru resetare sunt prezentate n tabelul 3.6.
Coast(port)
Funcie pentru oprirea motorului conectat la portul specificat, prin ntreruperea
alimentrii. Adresele porturilor de ieire pot fi definite ca variabile sau constante.
Porturile de ieire posibile sunt date n tabelul 3.1.
Exemplu:
Coast ( OUT_A) ;

Constantele de resetare Valoare
RESET_NONE 0x00
RESET_COUNT 0x08
RESET_ROTATION_COUNT 0x40
RESET_ALL 0x68
Funcii predefinite n limbajul NXC pentru comanda direct a motoarelor
A3 / 11

CoastEx(port, const reset)
Versiunea Ex a funciei Coast(port).
Valorile valide pentru resetare sunt prezentate n tabelul 3.6.
Exemplu:
Coast Ex( OUT_A, RESET_NONE) ;
Float(port)
Un alt nume pentru funcia Coast.
OnFwd(port, pwr)
Funcia permite pornirea i rotirea nainte cu o putere pwr (exprimat n procente
din puterea maxim), a motorului conectat la portul specificat. Adresele porturilor
de ieire pot fi definite ca variabile sau constante. Porturile de ieire posibile sunt
date n tabelul 3.1.
Exemplu:
OnFwdEx( OUT_A, 75) ;
OnFwdEx(port, pwr, const reset)
Versiunea Ex a funciei OnFwd().

OnRev(port, pwr)
Funcia permite pornirea i rotirea napoi cu o putere pwr (exprimat n procente
din puterea maxim), a motorului conectat la portul specificat. Adresele porturilor
de ieire pot fi definite ca variabile sau constante. Porturile de ieire posibile sunt
date n tabelul 3.1.
Exemplu:
OnRev( OUT_A, 75) ;
Anexa 3
A3 / 12

OnRevEx(port, pwr, const reset)
Versiunea Ex a funciei OnRev().
Exemplu:
OnRevEx( OUT_A, 75, RESET_NONE) ;

OnFwdReg(port, pwr, regmode)
Funcia permite pornirea i rotirea nainte cu reglaj de vitez notat pwr,
(exprimat n procente din viteza maxim), a motorului conectat la portul specificat.
Adresele porturilor de ieire pot fi definite ca variabile sau constante. Porturile de
ieire posibile sunt date n tabelul 3.1. Modurile de setri specifice reglajului de
vitez sunt n tabelul 3.5.
Exemplu:
OnFwdReg( OUT_A, 75, OUT_REGMODE_SPEED) ; // reglaj de viteza de
// 75% din viteza maxima
OnFwdRegEx(port, pwr, regmode, const reset)
Versiunea Ex a funciei OnFwdReg().
Exemplu:
OnFwdRegEx( OUT_A, 75, OUT_REGMODE_SPEED, RESET_NONE) ;

OnRevReg(port, pwr, regmode)
Funcia permite pornirea i rotirea napoi cu reglaj de vitez notat pwr (exprimat
n procente din viteza maxim), pentru motorul conectat la portul specificat.
Adresele porturilor de ieire pot fi definite ca variabile sau constante. Porturile de
ieire posibile sunt date n tabelul 3.1. Modurile de setri specifice reglajului de
vitez sunt n tabelul 3.5.
Funcii predefinite n limbajul NXC pentru comanda direct a motoarelor
A3 / 13

Exemplu:
OnRevReg( OUT_A, 75, OUT_REGMODE_SPEED) ;

OnRevRegEx(port, pwr, regmode, const reset)
Versiunea Ex a funciei OnFwd.
Exemplu:
OnRevRegEx( OUT_A, 75, OUT_REGMODE_SPEED, RESET_NONE) ;

OnFwdSync(port, pwr, turnpct)
Rotete nainte i sincronizeaz vitezele motoarelor conectate la porturile de ieire
specificate. Adresele porturilor de ieire pot fi definite ca variabile sau constante.
Porturile de ieire posibile sunt date n tabelul 3.1.
Exemplu:
OnFwdSync( OUT_AB, 75, - 100) ;
OnFwdSyncEx(port, pwr, turnpct, const reset) - Versiunea Ex a funciei anterioare.
Valorile valide pentru resetare sunt prezentate n tabelul 3.6.
Exemplu:
OnFwdSyncEx( OUT_AB, 75, 0, RESET_NONE) ;

OnRevSync(port, pwr, turnpct)
Rotete napoi i sincronizeaz vitezele motoarelor conectate la porturile de ieire
specificate. Adresele porturilor de ieire pot fi definite ca variabile sau constante
Porturile de ieire posibile sunt date n tabelul 3.1.
Anexa 3
A3 / 14

Exemplu:
OnRevSync( OUT_AB, 75, - 100) ;
OnRevSyncEx(port, pwr, turnpct, const reset) - Versiunea Ex a funciei anterioare.
Valorile valide pentru resetare sunt prezentate n tabelul 3.6.
Exemplu:
OnRevSyncEx ( OUT_AB, 75, - 100, RESET_NONE) ;

RotateMotor(port, pwr, angle)
Rotete motorul conectat la portul specificat cu un unghi exprimat n grade.
Porturile de ieire posibile sunt date n tabelul 3.1..
Exemplu:
Rot at eMot or ( OUT_A, 75, 45) ; // roteste motorul A nainte cu 45 de grade
Rot at eMot or ( OUT_A, - 75, 45) ; // r roteste motorul A napoi cu 45 de grade

RotateMotorPID(port, pwr, angle, p, i, d)
Rotete motorul conectat la portul specificat cu un unghi exprimat n grade.
Porturile de ieire posibile sunt date n tabelul 3.1. De asemenea se specific
valorile coeficienilor regulatorului PID.
Exemplu:
Rot at eMot or PI D( OUT_A, 75, 45, 20, 40, 100)

RotateMotorEx(port, pwr, angle, turnpct, sync, stop) - este o extensie a comenzii
precedente care permite sincronizarea celor dou motoare, prin parametrul sync
i frnarea electric a motoarelor la sfritul rotaiei, prin parametrul stop.
Porturile de ieire posibile sunt date n tabelul 3.1.
Funcii predefinite n limbajul NXC pentru comanda direct a motoarelor
A3 / 15

Exemplu:
Rot at eMot or Ex( OUT_AB, 75, 360, 50, t r ue, t r ue)

RotateMotorExPID(port, pwr, angle, turnpct, sync, stop, p, i, d)
Aceeai funcie ca mai sus, n care se specific i coeficienii regulatorului.
Exemplu:
Rot at eMot or ExPI D( OUT_AB, 75, 360, 50, t r ue, t r ue, 30, 50, 90)

ResetTachoCount(port) - Reseteaz contoarele de rotaie asociate porturilor
specificate. Porturile de ieire posibile sunt date n tabelul 3.1.
Exemplu:
Reset TachoCount ( OUT_A)

MotorTachoCount(output)
Returneaz valoarea contorului de poziie al motorului conectat la portul specificat.
Porturile de ieire posibile sunt OUT_A, OUT_B, OUT_C.
Exemplu:
x = Mot or TachoCount ( OUT_A)

MotorOverload(port)
Returneaz, ca valoare boolean, starea de suprancrcare a motorului. Porturile
de ieire posibile sunt OUT_A, OUT_B, OUT_C. Adresele acestora sunt date n
tabelul 3.1.
Exemplu:
x = Mot or Over l oad( OUT_A)

Anexa 3
A3 / 16

MotorRotationCount(port) Value
Returneaz valoarea contorului de poziie asociat portului specificat. Porturile de
ieire posibile sunt OUT_A, OUT_B, OUT_C. Adresele acestora sunt date n
tabelul 3.1.
Exemplu:
x = Mot or Rot at i onCount ( OUT_A)

You might also like