NI-enheter i Python

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
Icecap
Inlägg: 26150
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

NI-enheter i Python

Inlägg av Icecap »

Mitt senaste projekt är att testa om hårdvaran jag utvecklat senast faktisk fungerar.

Det har 3 st National Instruments, 2 st USB-6502 och en USB-6002.

Jag kan adressera portar, styra Analog Out osv. men jag har ett konstigt problem som kanske beror på att jag griper hela alltet fel an.

Jag har 2 st portar för att styra 16 st On/Off, 2 st portar för att styra 16 st LED, 2 st portar för att styra Hög/Låg spänning. Alla portar har 8 bit.

Jag har 4 bit av en port som styr ett adressval, 4 andra bit för att styra ett annat adressval.

Exempel på hur jag uppdaterar On/Off-bitsen:

Kod: Markera allt

task = nidaqmx.Task()
task.do_channels.add_do_chan('Dev3/port1/line0:7')
task.start()
task.write(Power_bits & 255)
task.stop()
task.close()
task = nidaqmx.Task()
task.do_channels.add_do_chan('Dev3/port2/line0:7')
task.start()
task.write((Power_bits >> 8) & 255)
task.stop()
task.close()
Jag startar alltså ett task, lägger till en port, startar tasken, skriver värdet till porten, stopper tasket och raderar det.

Jag får lite felmeddelanden som jag inte fattar. De är inte identiska och skriver jag till en port på en NI-enhet och gör exakt det samma på den andra (fast med ändrat device-namn) ger det fel.

ALLA task blir avslutat i varje operation.
Om jag lägger in att den ska vänta på att en task blir klar - för en Digital Out-funktion får jag fel för det.

Men är det jag som har klantat mig?
Ska jag i verkligheten definiera alla task FÖRST (med unika namn), och SEDAN - genom alla använda funktioner - skriva till dessa öppna task?
H.O
Inlägg: 5716
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Re: NI-enheter i Python

Inlägg av H.O »

Jag har ingen sådan hårdvara så jag kan inte testa men det kanske hade underlättat om du postat VILKA felmeddelanden du får.

Dokumentationen nämner att när endast ett värde skrivs med write() så är autostart-flaggan =True som default. Men i ditt fall så har du ju redan startat tasken. Prova

Kod: Markera allt

task = nidaqmx.Task()
task.do_channels.add_do_chan('Dev3/port1/line0:7')
task.write(Power_bits & 255)
task.wait_until_done(0.5)    # Är det denna du provat?
task.stop()
task.close()
Sen kanske task.stop() och task.close() inte är blockande så när du direkt efter skapar in ny task med samma namn kanske den gamla inte är "glömd" (t.ex om GC ska göra sitt jobb). Vad händer om du ger den andra tasken ett annat namn?
Användarvisningsbild
Icecap
Inlägg: 26150
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: NI-enheter i Python

Inlägg av Icecap »

Den task.wait_until_done() vill ge ett felmeddelande om att task'en inte finns.

Det är ett felmeddelande jag inte kan hitta, mener att det var -50xxx. Alltså -50k-nånting.

Högsta felnummer jag har hittat är -20k-nånting.

Kan inte reproducera det nu - men jag fick problem med att 6501'an plötsligt inte ville svara och jag misstänkar att det kan vara knas med min USB-hub.

På onsdag tar jag med en hub med egen powersupply, då får jag se om det ändrar något.

Men det ändrar inte frågan:
Ska man skapa ett antal task som man sedan skickar data från/tar emot data från?
Senast redigerad av Icecap 5 mars 2024, 09:49:59, redigerad totalt 1 gång.
H.O
Inlägg: 5716
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Re: NI-enheter i Python

Inlägg av H.O »

Såvitt jag förstår, ja.
En task måste vara startad för att den ska gå att läsa/skriva. I vissa fall autostartar den, i andra fall måste den startas manuellt.
I ditt fall hade jag som sagt provat med olika namn för respektive task.
Användarvisningsbild
Icecap
Inlägg: 26150
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: NI-enheter i Python

Inlägg av Icecap »

Nu har jag hittat felet som var.

USB-6501 är en GAMMAL typ (som USB-6001 & USB-6008) och drivrutinerna i en nyare installation av NI DAQmx fungerar inte till dessa - ifall det finns mer än en enhet.

Man måste tanka ner 'NI DAQmx Base' som kan ta hand om dessa åldringar och efter att ha tvunget drivrutinen till rätt värde, blinkade LEDn ett par gångar, var släckt i 3-6 sekunder - varefter den blinkade igen.

Det kort "finns" numera även på andra datorer om vi kopplar in det så firmwaren är nog uppdaterat. O denna FW-uppdateringsfunktion finns bara i 'NI DAQmx Base'.

Upptäckte en annan "rolig" grej: Använder en del av en port (8 bit) till olika saker.
4 bit för adressval. Bit 0-3
2 bit för kommunikationsval. Bit 4-5
2 bit för utgångstypval. Bit 6-7

Men när jag skrev till bit 4-5 med värde mellan 0 och 3 hände INGET!
Fick en mindre hjärnblödning o testade med att rycka upp värdet till "rätt" bitposition - och plötsligt fungerade allt.

Nu har jag bara ett fel i enheten, det är kanal 7 som inte kan slå på då den tror att det är överströmsproblem. Annars fungerar allt.

Det får jag fixa onsdag, det är kanske ett lödfel.
Skriv svar