Strona 1 z 1
szybkość działania programu i biblioteka inpout32.dll
: 22 lis 2007, 14:10
autor: cempulik
Wykorzystuje bibliotekę inpout32.dll jednak mam z nią problemy. Nie da się ustawić "dobrej" szybkości silników. Pomiędzy krokami muszę dawać uśpienie głównego wątku programu na 1ms. Bardzo zmniejsza to szybkość pracy.
Fragment mojego programu wygląda następująco:
timeDelay=1;
mikroStep=30;
public void Xgo()
{
for (int j = 0; j < mikroStep; j++)
{
suma = 0;
suma += (int)Math.Pow(2, 3);
PortAccess.Output(adress, suma);
Thread.Sleep(timeDelay);
Reset();
}
}
public void Reset()
{
PortAccess.Output(adress, 0);
Thread.Sleep(timeDelay);
}
Jeśli nie dam "Thread.Sleep(timeDelay);" to silnik właściwie się nie obraca.
Jak można temu zaradzić?
: 22 lis 2007, 14:16
autor: jarekk
Nie da się - taka dyskusja już była.
Bibilioteka ma pod sobą duży kod drivera Windowsowego, jej wywołania (w pętli, bez opóżnienia) będą dawały dość przypadkowy rezultat
A samo ...Sleep(1ms) jest tylko poboznym życzeniem - można się spodziewać 10-20ms
Tylko bardzo specjalistyczne drivery ( Mach, który używa wpina się w zasadzie pod Windowsy) lub DOS da radę ( DOS nawet lepiej).
Może zatem dual(quad) core oraz pętla w programie ( bez funkcji systemowych ) ?
szybkość
: 22 lis 2007, 14:51
autor: cempulik
niestety taki sam efekt jest po użyciu jakiegoś Timera i zdarzeń "tick" przy wartościach mniejszych niż 1 ms
: 22 lis 2007, 15:03
autor: jarekk
Jakich zdarzeń "tick" ?
Nie tędy droga - kolega nie ma szans na zbudowanie czegoś dobrze działającego używając inpout32.dll ( lub podobnych) - prościej podłączyć coś pod USB/port szeregowy ( mikroprocesor) i tam sterować silnikami.
: 22 lis 2007, 16:49
autor: triera
nie stosując specjalistycznych (drogich) bibliotek -> DOS.
Można zacząć się bawić stosując choćby kompilator FirstBASIC (shareware, 25$)
http://www.powerbasic.com/files/pub/pbdos/
i można bezpośrednio obsługiwać LPT.
: 22 lis 2007, 20:03
autor: markcomp77
jeśli już zmieniamy system operacyjny (Win32 -> DOS)...
to może lepiej rozważyć programowanie w linuksie z jądrem czasu rzeczywistego?
: 22 lis 2007, 20:25
autor: triera
Instalujemy FreeDos-a + jakąś nakładkę a-la NortonCommander,
następnie jakiś kompiler (może być QuickBASIC (free), Pascal, C... jak ktoś woli,)
i w ciągu pół godziny możemy zacząć się bawić w sterowanie silnikami.
Komputer może być z odzysku - przy Pentium 200MMX silniki kręcą jak rakieta.
Jak się znudzi naciskamy wyłączamy klawiszem POWER.