Hírek:

Fontos tudnivalók a migrációval kapcsolatban, Kérlek nézd meg a Régi fórumról új fórumra való költözés

Main Menu

UCCNC vezérlő program

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

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

kuner

És milyen távra tudná vinni így? Túl messzire nem.

dezsoe

Ha jól értem, akkor mindkét porton BV2 van. Ha igen, akkor egyikről sem mennek be a bemenetek? (A 15-ösön kívül?)

dezsoe

Így van. Az USB 5V-járól nem is beszélve...

dezsoe

Svejk mester!

Elkészültek a makrók. Meg lehetett volna kicsivel egyszerűbben is csinálni, de ahogy megírtam, úgy rugalmasabb, mert amelyik bemenetet nem akarod használni, oda portra és pinre 0-t írsz. (Így a második makrót például esztergához be tudod úgy állítani, hogy csak a 0-s, az X és a Z legyen aktív.) A bemenetek feldolgozása azért van így, hogy a tekerő köztes és kontakt hibás állapotaiban ne kapcsolgasson feleslegesen. Amúgy is csak akkor vált, ha a bemenetek állapota és a pillanatnyi beállítás eltér. Mivel az eltérést figyeli, a program induláskor rögtön beáll a bemeneteknek megfelelően, ahogy akartad.

Mindkettőt be kell állítani macroloop-nak, automatikus futással.

Az első a lépést változtatja:

// ================================================================================================
// Mxxxxx - Macroloop: Yaxley olvasás - lépés
// ================================================================================================
// "A másik Yaxley 3 állású és kiválasztja a 0,001, 0,01 és 0,1 léptetést az MPG-nek."
// ================================================================================================

int currState = 0;
int readState = 0;

// =============== Előkészítés

if (led0001 == -1)
{
  led0001 = GetLEDNumber(port0001, pin0001);
  led001 = GetLEDNumber(port001, pin001);
  led01 = GetLEDNumber(port01, pin01);
  led1 = GetLEDNumber(port1, pin1);
}

// =============== Feldolgozás

currState = (exec.GetLED(step0001) ? 1 : 0);
currState = currState << 1 | (exec.GetLED(step001) ? 1 : 0);
currState = currState << 1 | (exec.GetLED(step01) ? 1 : 0);
currState = currState << 1 | (exec.GetLED(step1) ? 1 : 0);

readState = GetPinState(led0001, neg0001);
readState = readState << 1 | GetPinState(led001, neg001);
readState = readState << 1 | GetPinState(led01, neg01);
readState = readState << 1 | GetPinState(led1, neg1);

if (readState != currState)
{
  switch (readState)
  {
    case 0x01:
      exec.Callbutton(btn1);
      exec.AddStatusmessage("Step: 1.0");
      break;
    case 0x02:
      exec.Callbutton(btn01);
      exec.AddStatusmessage("Step: 0.1");
      break;
    case 0x04:
      exec.Callbutton(btn001);
      exec.AddStatusmessage("Step: 0.01");
      break;
    case 0x08:
      exec.Callbutton(btn0001);
      exec.AddStatusmessage("Step: 0.001");
      break;
  }
}

// =============================================================================  -- Events --

#Events

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

// =============== LED konstansok

const int step0001 = 148;
const int step001 = 149;
const int step01 = 150;
const int step1 = 151;

// =============== Gomb konstansok

const int btn0001 = 241;
const int btn001 = 164;
const int btn01 = 165;
const int btn1 = 166;

// =============== Bemenetek - Port, pin, negálás

const int port0001 = 1;
const int pin0001 = 12;
const bool neg0001 = false;

const int port001 = 1;
const int pin001 = 11;
const bool neg001 = false;

const int port01 = 1;
const int pin01 = 15;
const bool neg01 = false;

const int port1 = 0;
const int pin1 = 0;
const bool neg1 = false;

// =============== Bemenetek - LEDek

static int led0001 = -1;
static int led001 = -1;
static int led01 = -1;
static int led1 = -1;

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

// =============== LED száma port és pin alapján

int GetLEDNumber(int port, int pin)
{
  int LED = -1;
  switch (port)
  {
    case 1:
      LED = pin;
      break;
    case 2:
      LED = 68 + pin;
      break;
    case 3:
      LED = 85 + pin;
      break;
    case 4:
      LED = 102 + pin;
      break;
    case 5:
      LED = 119 + pin;
      break;
  }
  return LED;
}

// =============== Bemenet állapota

int GetPinState(int led, bool neg)
{
  if (led == -1) return 0;
  bool ledState = exec.GetLED(led);
  return (ledState ^ neg ? 1 : 0);
}


A második az üzemmódot:

// ================================================================================================
// Mxxxxx - Macroloop: Yaxley olvasás - tengely és mód
// ================================================================================================
// "Az egyik 5 állású Yaxley, 0, X, Y, Z, A állással. (0 -> cont / más -> MPG multi)"
// ================================================================================================

int currState = 0;
int readState = 0;

// =============== Előkészítés

if (ledCont == -1)
{
  ledCont = GetLEDNumber(portCont, pinCont);
  ledMPGX = GetLEDNumber(portMPGX, pinMPGX);
  ledMPGY = GetLEDNumber(portMPGY, pinMPGY);
  ledMPGZ = GetLEDNumber(portMPGZ, pinMPGZ);
  ledMPGA = GetLEDNumber(portMPGA, pinMPGA);
}

// =============== Feldolgozás

currState = (exec.GetLED(modeCont) ? 1 : 0);
currState = currState << 1 | (exec.GetLED(modeMPGMulti) ? 1 : 0);
for (int i = 0; i < 4; i++)
  currState = currState << 1 | (exec.GetLED(axisX + i) ? 1 : 0);

// readState = GetPinState(ledCont, negCont) == 1 ? 0x02 : 0x01;
readState = GetPinState(ledCont, negCont) << 1;
readState = readState << 1 | GetPinState(ledMPGX, negMPGX);
readState = readState << 1 | GetPinState(ledMPGY, negMPGY);
readState = readState << 1 | GetPinState(ledMPGZ, negMPGZ);
readState = readState << 1 | GetPinState(ledMPGA, negMPGA);

if ((readState & 0x0F) != 0x00)
  readState |= 0x10;

// 0 0 C M X Y Z A

if (readState != currState)
{
  if ((readState & 0xF0) != (currState & 0xF0))
    switch (readState & 0xF0)
    {
      case 0x10:
        exec.Callbutton(btnMPGMulti);
        break;
      case 0x20:
        exec.Callbutton(btnCont);
        exec.AddStatusmessage("Mode: Continous");
        break;
    }
  if ((readState & 0xF0) == 0x10)
    switch (readState & 0x0F)
    {
      case 0x01:
        exec.Callbutton(btnAxisA);
        exec.AddStatusmessage("Mode: MPG Multi A");
        break;
      case 0x02:
        exec.Callbutton(btnAxisZ);
        exec.AddStatusmessage("Mode: MPG Multi Z");
        break;
      case 0x04:
        exec.Callbutton(btnAxisY);
        exec.AddStatusmessage("Mode: MPG Multi Y");
        break;
      case 0x08:
        exec.Callbutton(btnAxisX);
        exec.AddStatusmessage("Mode: MPG Multi X");
        break;
    }
}

// =============================================================================  -- Events --

#Events

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

// =============== LED konstansok

const int modeCont = 145;
const int modeMPGMulti = 154;
const int axisX = 155;

// =============== Gomb konstansok

const int btnCont = 161;
const int btnMPGMulti = 228;
const int btnAxisX = 220;
const int btnAxisY = 221;
const int btnAxisZ = 222;
const int btnAxisA = 223;

// =============== Bemenetek - Port, pin, negálás

const int portCont = 1;
const int pinCont = 12;
const bool negCont = false;

const int portMPGX = 1;
const int pinMPGX = 11;
const bool negMPGX = false;

const int portMPGY = 1;
const int pinMPGY = 15;
const bool negMPGY = false;

const int portMPGZ = 0;
const int pinMPGZ = 0;
const bool negMPGZ = false;

const int portMPGA = 0;
const int pinMPGA = 0;
const bool negMPGA = false;

// =============== Bemenetek - LEDek

static int ledCont = -1;
static int ledMPGX = -1;
static int ledMPGY = -1;
static int ledMPGZ = -1;
static int ledMPGA = -1;

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

// =============== LED száma port és pin alapján

int GetLEDNumber(int port, int pin)
{
  int LED = -1;
  switch (port)
  {
    case 1:
      LED = pin;
      break;
    case 2:
      LED = 68 + pin;
      break;
    case 3:
      LED = 85 + pin;
      break;
    case 4:
      LED = 102 + pin;
      break;
    case 5:
      LED = 119 + pin;
      break;
  }
  return LED;
}

// =============== Bemenet állapota

int GetPinState(int led, bool neg)
{
  if (led == -1) return 0;
  bool ledState = exec.GetLED(led);
  return (ledState ^ neg ? 1 : 0);
}

000000000

Nem így ahogy a képen van

A BV2 kártyán van a GND P15 P13 P10 és P11 egy csoportba

 a P15 be volt már kötve és megy is szépen bármit kötök rá az jól működik a több Pin-t P10-13-11 még nem is használtam  csak a kábelezés volt meg.

  

000000000

illetve mindkét kártyán az összes be és kimenet jól működik kivéve a említetteket nem sikerül életre kelteni, esetleg van valami módja hogy tesztelni lehessen?

dezsoe

Akkor sajnos nincs ötletem. Illetve annyi, hogy egy műszerrel végig kéne nézni, hogy hol tűnik el a jel. (Optocsatoló előtt, után, kimeneten, UC300-on stb.) Jobbat nem tudok. Kár, hogy csak a nagysebességű opto van foglalatban, ha esetleg az opto-kkal lenne baj.

000000000

kapcsolási rajz sajnos nincs 2db nagy sebességű opto input van az egyiket néztem a másik kitudja, de neki fekszek pihent erővel hátha valamit benézek. Köszönöm az észrevételeidet!

svejk

Atya világ! [#wow1]

Azt hittem pár sor lesz az egész....  Annyi sör nincs a közelemben levő két multiban, hogy ki tudnálak fizetni, így csak megköszönni tudom. [#worship]

Remélhetőleg más is tud belőle meríteni ötletet/tudást.

dezsoe

Azért is írtam áttekinthetősre, hogy fel lehessen belőle felhasználni részleteket. :) Próbáld ki, aztán mesélj, hogy jó-e.

svejk

Természetesen működik, pont úgy ahogy elképzeltem! [#eljen]
Még egyszer köszönöm! [#worship]

dezsoe


000000000

Uc300eth milyen leválasztó kártyát tudnátok ajánlani ? Elsősorban 1# 4# 5# portokra gondolok (bidirectional) Lpt kiosztású egy natur pl ilyen gondolom nem jó

Db25 interface

dezsoe

Ez nem jó. Olyat keress, amiben a 2-9-es lábak is bemenetek.

000000000

Már keresem egy jó ideje, nézzem tovább. Visszatérve a tegnapi opto csatolt bemenetekre az elképzelhető, hogy lassú lenne az optocoupler a uc300 100khz hez és ez okoz gondot?