Leeuwinga schreef: ↑04 jan 2024 19:54
Dus kode G04 wordt softwarematig door Mach3 uitgevoerd . (punt)
Daar zou ik toch maar niet zo stellig in zijn....
Mach3 bestaat grofweg uit het GUI deel, een ringbuffer met 4096 segmenten op de kerneltick erin, en een kernel die de beweging doet.
Jij hebt het over de parallelle poort, Mach3 in zijn puurste vorm. Dan is dat geweldig knappe stuk code van Art Fenerty met z'n gemorrel aan de APIC timer verantwoordelijk voor het uitvoeren van de commando's. Dat stukje code is een huzarenstukje; dat doet dingen die eigenlijk niet kunnen. Van dat soort stukjes lowlevel bitneukerij word ik heel vrolijk, vandaar dat ik van Mach3 amper wat weet, behalve dat soort dingen.
Nu, ga je naar een USB of Ethernet device, dan verloopt de communicatie naar het motiondevice via een plugin.
Kijk je vervolgens in de documentatie, dan vind je onder andere:
Code: Selecteer alles
As you can see, the way the flow works is Mach3 calls the MAchDevice.cpp when it
needs to, and the MachDevImplemention.cpp holds the device specific routines that
MachDevice.cpp sends to command up to.
When Mach3 gets told to shutdown, this process then helps you shut it all down..
Next in the MachDevice we have:
extern "C" __declspec(dllexport) void DoDwell(double time)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState( ));
myDwell(time);
}
This obviously gets called when Mach3 processes a G04 command. In this case the
myDwell command would send a command to the ServoRun device and it would do a
dwell process. Perhaps a routine such as this in the implementation file..
void myDwell( double time)
{
if( sr == NULL ) return;
Engine->DwellTime = (int) time * 1000;
sr->DoADwell( time );
}
Let wel; MachDevice.cpp en MachDevImplemention.cpp is broncode die bij de plugin hoort...
En het sr object is wat je zelf geacht word te implementeren.
Voor zover ik weet blijft de parallelle-poort logica wel draaien voor onder andere timingdoeleinden, en volgens mij draait de trajectplanner daar ook.
Maar dan nog is de kans dat er een bug in de plugin zit die rotzooit met G4 is dus niet bepaald nul, want dat loopt via de plugin-code. (punt)
De belangrijkste wet in de wetenschap: 'hoe minder efficient en hoe meer herrie, hoe leuker het is'