Hírek:

Fontos tudnivalók a migrációval kapcsolatban, kérlek olvasd el:

A régi fórumról áthozott hozzászólásoknál a felhasználó neve adatvédelmi megfontolásokból véletlenszerűen generált értékekre lett  lecserélve. Ez akkor tud a valódi értékre visszaállni, ha az adott felhasználó a régi fórumon nyilatkozik, hogy beleegyezik az adatainak az új fórumra továbbításához, majd ezután itt a régi felhasználónevével és email címével regisztrál.
8~20 óra között, 1~30 percen belül megtörténik a jóváhagyás, 30 percenként ellenőrizd email fiókodat (SPAM-ot is) mindenképp kapsz mail-t, a sikeres regisztrácioról, vagy a hibáról és, hogy mi a teendőd.
Nézd meg  "A régi fórumról, az új fórumra költözés útmutatót."
A régi fórumon használt email címmel de más felhasználói azonosítóval érkező regisztrációs kérelmek törlésre kerűlnek.

Main Menu

UCCNC vezérlő program

Indította gaben, 2024 április 09, 16:54

Előző téma - Következő téma

gaben

Szia,

szerintem rossz helyre írtál, de ha már így alakult én egyszerűbbet és pláne ingyeneset a Fusion360-nál.
vjanos fórumtársunk remek oktató videót is készített róla, ami a YouTube-on elérhető.
Ráadásul van külön topikja, rengeteg hasznos infóval illetve közös segítségnyújtási lehetőséggel.
Gyakorlatilag pár óra alatt bele lehet jönni az alkatrész készítésbe és a szerszámpálya generálásba.

Üdv, Gábor

gaben

"nem tudok" lemaradt az egyszerűbbet elől

Scythian

Köszönöm, már ez is segítség.
Menten meg is lesem.
Igazándiból nem tudtam megfelelő topicot választani, mert általános vagy nincs, vagy olyan régen szóltak hozzá, hogy valahol leghátul lenne meg. S mivel már majdnem CNC, ezért gondoltam itt megkapom a választ.
További szép estét!

svejk

A tengelyeknél az "Enable" kimenetek mindössze az E-stoppal vannak kapcsolatban?

svejk

Ha kreálok a RUN képernyőre egy LED-et, és elnevezem mondjuk 999-re akkor ennek a LED-nek az állapotát hogy is tudom kivinni valamelyik fizikai kimenetre?
Ehhez is makrot kell írni?

svejk

Ja, megyen csak egyszerűen be kell írni a LED számát az output triggerbe.

dezsoe

Igen, igen. :) Mindkét kérdésre. (Az elsőre pontosan az a válasz, hogy reset kioldva és a tengely engedélyezve van (Axis enabled pipa).)

dezsoe

Szia!

Első tesztnek íme egy makró. Az anyagközeli bekapcsolás még nincs benne.

// ================================================================================================
// Multi coolant switch
// ================================================================================================
//
// Beállítások:
// const int EnableLED = 52;            M7: 52, M8: 53
// const int tmrConst = 10;             Kikapcsolás késleltetése 1/20 s-ban
// const int avgMax = 10;               Átlagolt koordináták száma (1/20 s-onként olvas újat)
// double[] coolX = {5.0, -5.0};        Fúvókák X koordinátája a főorsóhoz képest (1. fúvóka, 2. fúvóka [, ...])
// double[] coolY = {5.0, -5.0};        Fúfókák Y koordinátája a főorsóhoz képest (1. fúvóka, 2. fúvóka [, ...])
// int[] vPorts = {3, 3};               Szelep kimenetek port száma (1. fúvóka, 2. fúvóka [, ...])
// int[] vPins = {1, 2};                Szelep kimenetek láb száma (1. fúvóka, 2. fúvóka [, ...])
// bool[] vNeg = {false, false};        Kimenetek ActiveLow beállításai: ha negált, akkor true (1. fúvóka, 2. fúvóka [, ...])
// int[] coolZ = {0, 1};                Z mozgáskor melyik sorszámú szelepek menjenek, számozás 0-tól indul
//
// Mxxx.txt, ahol xxx egy még nem használt sorszám, MacroLoops-ban ezt a sorszámot kell beállítani, AutoRun pipával
//
// ================================================================================================

if (firstRun)
{
  firstRun = false;
  for (int i = 0; i < avgMax; i++)
  {
    deltaXa[i] = 0.0;
    deltaYa[i] = 0.0;
  }
}

double machX = exec.GetXmachpos();
double machY = exec.GetYmachpos();
double machZ = exec.GetZmachpos();

double deltaX = machX - lastX;
double deltaY = machY - lastY;
double deltaZ = machZ - lastZ;

deltaXa[avgPtr] = deltaX;
deltaYa[avgPtr] = deltaY;

if (++avgPtr == avgMax) avgPtr = 0;

deltaX = 0.0;
deltaY = 0.0;

for (int i = 0; i < avgMax; i++)
{
  deltaX += deltaXa[i];
  deltaY += deltaYa[i];
}

deltaX = deltaX / avgMax;
deltaY = deltaY / avgMax;

int valve = FindValve(deltaX, deltaY);

if (exec.GetLED(EnableLED) && (exec.GetLED(M3LED) || exec.GetLED(M4LED)))       // Spindle is on and coolant enabled
{
  if (deltaZ != 0.0)
  {
    // Ha ki volt kapcsolva (lastValve), akkor valamit be kéne kapcsolni
    timer = tmrConst;
    SetValve(-2);
  }
  else if ((deltaX != 0.0) || (deltaY != 0.0))
  {
    // Irány bekapcsolása
    timer = tmrConst;
    SetValve(valve);
  }
}
else
  if (timer > 0) timer = 1;                                                     // Instant off if turned on not enabled

if (timer > 0)
  if (--timer == 0)
    SetValve(-1);

lastX = machX;
lastY = machY;
lastZ = machZ;

// ================================================================================================

#Events

// ================================================================================================

const int M3LED = 50;
const int M4LED = 51;

const int EnableLED = 52;                                                       // M7: 52, M8: 53

const int tmrConst = 10;                                                        // Number of 1/20 s

static double lastX = 0.0;
static double lastY = 0.0;
static double lastZ = 0.0;

static int timer = 0;

const int avgMax = 10;

double[] deltaXa = new double[avgMax];
double[] deltaYa = new double[avgMax];

double[] coolX = {5.0, -5.0};
double[] coolY = {5.0, -5.0};

int[] vPorts = {3, 3};
int[] vPins = {1, 2};
bool[] vNeg = {false, false};

int[] coolZ = {0, 1};

int lastValve = -1;

int avgPtr = 0;

bool firstRun = true;

// ================================================================================================

private void SetValve(int vset)
{
  if (vset != lastValve)
  {
    if (vset == -2)
    {
      // Z szelepek nyitása
      bool inCoolZ;
      for (int i = 0; i < vPorts.Length; i++)
      {
        inCoolZ = false;
        for (int j = 0; j < coolZ.Length; j++)
          if (coolZ[j] == i)
            inCoolZ = true;
        if (inCoolZ)
          SetPin(vPorts[i], vPins[i], vNeg[i]);
        else
          ClrPin(vPorts[i], vPins[i], vNeg[i]);
      }
    }
    else
      for (int i = 0; i < vPorts.Length; i++)
      {
        if (i == vset)
          SetPin(vPorts[i], vPins[i], vNeg[i]);
        else
          ClrPin(vPorts[i], vPins[i], vNeg[i]);
      }
    lastValve = vset;
    Console.WriteLine("SetValve: " + vset.ToString());
  }
}

// ================================================================================================

private void SetPin(int port, int pin, bool neg)
{
  if (neg)
    exec.Clroutpin(port, pin);
  else
    exec.Setoutpin(port, pin);
}

private void ClrPin(int port, int pin, bool neg)
{
  if (neg)
    exec.Setoutpin(port, pin);
  else
    exec.Clroutpin(port, pin);
}

// ================================================================================================

int FindValve(double deltaX, double deltaY)
{
  double angle = 0.0;
  double check = 181.0;
  int ptr = 0;
  int valve = -1;

  if ((deltaX != 0.0) || (deltaY != 0.0))
  {
    for (int i = 0; i < coolX.Length; i++)
    {
      angle = Math.Abs(GetAngle(coolX[i], coolY[i], deltaX, deltaY));
      if ((angle == check) && (i == lastValve))
        valve = i;
      if (angle < check)
      {
        check = angle;
        valve = i;
      }
    }
  }

  return valve;
}

// ================================================================================================

double GetAngle(double x1, double y1, double x2, double y2)
{
  double angle = Math.Atan2(y2, x2) - Math.Atan2(y1, x1);

  angle = angle * 360 / (2 * Math.PI);

  if (angle < 0) angle += 360;

  if (angle > 180) angle = -(360 - angle);

  return angle;
}

// ================================================================================================

svejk

Még egy kis Enable kérdés.

- Mi célt szolgálhat az Enable jel késleltetési lehetősége?

Ehhez kapcsolódóan még a következőt nem értem.
(UC300ETH-5LPT)
Az oké, hogy az áram ráadásakor a kimenetek párszor tíz ms-ra aktívak lesznek, de a bekapcsolási tranziensek lecsengése után, ha elindítom az UCCNC-t akkor mondjuk a szóban forgó "Enable" kimenet miért lesz aktív majd egy másodpercig.
A szoftver nem tudja hogy "Reset"-be fog indulni?

Tudom a "Charge-Pump" használatával mindezek kiküszöbölhetőek, csak a miértjére vagyok kíváncsi.

dezsoe

Ennek utána kell nézzek, mert nem használom. :)

dtb

Nálam be van állítva a késleltetés, hogy ne egyszerre rántsák meg a motorok a tápot, hanem egymástól eltérő időben, késleltetve. Magával a késleltetett enable jellel azt is ki tudod kerülni, hogy a legelső jelszint változást lépésként értelmezze a vezérlő. Szerintem.

s7manbs8


svejk

Én sem használtam még soha, sőt a mach3-nál sem láttam semmi értelmét, főleg nem léptetős cuccoknál.

Csak gondoltam megnézem hátha valami jó ötlet ez mégis.

NickE

Azt hittem, lesz ma valami jó kis black friday akció UC400ETH-ra :)

eduard

Hamarosan tudok tesztelni. Jovo het kozepe, vege fele. Addig atnezem, es ha van kerdes irok. Nagyon koszonom a munkad, igy egeszen uj ertelmet nyer a customer support :)