E++, Custom EdingCNC Editor

Nederlandse CNC controller op basis van de usb poort of Ethernet.

Moderator: Moderators

Plaats reactie
hfjbuis
Donateur
Berichten: 3056
Lid geworden op: 13 feb 2017 00:26
Locatie: Hoensbroek

Re: E++, Custom EdingCNC Editor

Bericht door hfjbuis »

Arie Kabaalstra schreef: 12 mar 2023 21:44 Ik zit even te denken... Kan ik die kleuren niet als Object definiëren?..
Dat ik dus een Object aanmaak met properties voor de diverse kleuren?.. Dus Object "Taalstijl" met Properties "Subkleuren", "Cyclekleuren" enzovoorts?.. dat ik ze gewoon ergens in een file kan gooien?..
Dat is wel de manier om het te doen. Je definieert een object met daarin de properties voor de kleuren en de methoden om de properties te lezen en schrijven naar een bestand. Je vraagt het object om van/naar een bestand te schrijven.
Maar je zult meer meer data willen schrijven naar een bestand. Als je hiervan een basis object maakt met daarin de methoden om de data te lezen, te schrijven, de foutafhandeling, etc kun je hier alle ander objecten van afleiden. Per object zul je de methode om te lezen en schrijven moeten programmeren, maar alle andere methodes zijn hetzelfde. Eenmaal schrijven en debuggen en dat werk is dan voor alle afgeleide objecten gedaan. Mocht je ooit nog een fout/verbetering willen toepassen, hoef je dat ook maar in het basis object te doen en alle andere objecten kunnen daar dan ook van profiteren.
Zo is mijn SerialStream object (class) gebouwd met daarvan afgeleid een object voor USB, Bluetooth en Ethernet communicatie. Binnenkort komt daar nog ModBus bij met voor elk ModBus dialect een apart object (class).
There are only 2 limits, the sky and your imagination
Gebruikersavatar
hugo stoutjesdijk
Donateur
Berichten: 11995
Lid geworden op: 02 mar 2011 17:04
Locatie: elst (u)
Contacteer:

Re: E++, Custom EdingCNC Editor

Bericht door hugo stoutjesdijk »

Arie Kabaalstra schreef: 12 mar 2023 17:58 Even kijken of ik iets kan verzinnen om dat deel, en mogelijk de rest , zoals History en Cycle bestand ook in een datzelfde "ini"bestandje op te slaan.. is een XML layout handig?..
Hoef je als het goed is niet zelf te verzinnen, zoiets gebruikte ik al een jaar of 20 geleden in Delphi, dat is volgens mij een soort van standaard functie. Dus zal in C# ook wel mogelijk zijn.
Iets met 'FormCreate' 'FormClose'en dan krijg je zoiets dergelijks.
Natuurlijk helemaal afhankelijk wat je in die OnClose opgeeft.
En dat is inderdaad een XML formaat bestand.

Code: Selecteer alles

[settings]
Width=1904
Height=981
Left=0
Top=0
sourcepath=H:\LU_VAN\
targetpath=H:\lu_naar\
extensie=.txt
DataBits=7
CommPort=COM1
BaudRate=9600
ParityType=4
StopBits=2
teller=18
Ik ben voor meer techniek op school, maar dan wel vanaf groep 1 basischool.
hfjbuis
Donateur
Berichten: 3056
Lid geworden op: 13 feb 2017 00:26
Locatie: Hoensbroek

Re: E++, Custom EdingCNC Editor

Bericht door hfjbuis »

Een ini bestand is gemakkelijk voor een dimensionale vaste gegevens en is ook wel het gemakkelijkste om te gebruiken. Voor gegevens die groeien, zoals een tool table, gebruik ik liever een XML bestand. Voor beiden heeft C# bibliotheken. Ik zou niet beide types gaan gebruiken. Houd er rekening mee, dat het niet handig is om het type bestand in de toekomst te veranderen. Zelf heb ik gekozen voor XML. NotePad++ heeft een mooie plugin om XML weer te geven en op te schonen.

Een stukje uit een van mijn XML tabellen.

Code: Selecteer alles

			<ProbePositionZ>-59.475</ProbePositionZ>
			<ProbeHomePositionX>106.014</ProbeHomePositionX>
			<ProbeHomePositionZ>36.477</ProbeHomePositionZ>
			<ProbeFeedRate>350</ProbeFeedRate>
			<ProbeMaxTravelZ>-450</ProbeMaxTravelZ>
		</AppShell>
	</AppData>
	<Lathe>
		<RadiusCNCtask>
			<SelectedGroup>0</SelectedGroup>
			<SelectedSubGroup>0</SelectedSubGroup>
			<SelectedCuttingDepthIndex>13</SelectedCuttingDepthIndex>
			<LastCuttingDepth>0</LastCuttingDepth>
			<TotalCuttingDepth>2.4</TotalCuttingDepth>
			<CuttingDepthDatas>
				<CuttingDepthData0>
					<AutoCut>False</AutoCut>
					<RelativeFeedRate>100</RelativeFeedRate>
					<CuttingDepth>0</CuttingDepth>
				</CuttingDepthData0>
				<CuttingDepthData1>
					<AutoCut>False</AutoCut>
					<RelativeFeedRate>100</RelativeFeedRate>
					<CuttingDepth>50</CuttingDepth>
				</CuttingDepthData1>
There are only 2 limits, the sky and your imagination
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13370
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: E++, Custom EdingCNC Editor

Bericht door Arie Kabaalstra »

ok.. Voor de kleurtjes een Object maken.. en de boel middels een bibliotheek in een XML bestandje mikken..en nu.. Hoe doene me dat?... Ik ben wat C# betreft nog immer vochtig achter de oren...

Moet ik zo'n XML writer bijvoorbeeeld in een Class mikken, dat wil zeggen in Visual Studio een Class Library template gebruiken om daar de Code in te mikken, middels "sleur en pleur" ? 🖱 en hoe gebruik ik dat dan in mijn applicatie?..met Using?..
en met Objecten. idem.. kan/moet dat ook in een aparte Class?.. en kan ik die dan ook aan mijn applicatie(s) knupp'n?
hfjbuis
Donateur
Berichten: 3056
Lid geworden op: 13 feb 2017 00:26
Locatie: Hoensbroek

Re: E++, Custom EdingCNC Editor

Bericht door hfjbuis »

Hier een voorbeeld van de class met de kleur data en de methodes om de kleuren te laden/saven.
Bij het initialiseren van het form worden de kleuren gelezen.
In de class moet je nog programmeren hoe de data moet worden gelezen en geschreven.
Je kunt t.z.t. deze TextColors class in een eigen library zetten met zijn eigen namespace en die library class dan met using.... gebruiken. Dat is de manier om gemeenschappelijke classes te sharen.

Code: Selecteer alles

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TestNameSpace
{

    using System;
    using System.IO;

    public class TextColors
    {
        public Color Color1 = Color.Black;
        public Color Color2 = Color.Red;

        public TextColors(Color Color1, Color Color2)
        {
            this.Color1 = Color1;
            this.Color1 = Color2;
        }
        public bool LoadColors(string Filename, string ID)
        {
            // Hier de code schrijven om de kleuren te bewaren onder de naam ID
            return true;
        }
        public bool SaveColors(string Filename, string ID)
        {
            // Hier de code schrijven om de kleuren te lezen onder de naam ID
            return true;
        }
    }

    public partial class Form1 : Form
    {
        public TextColors ColorSet1 = new TextColors(Color.Blue, Color.Orange);
        public TextColors ColorSet2 = new TextColors(Color.White, Color.Green);
        public TextColors ColorSet3 = new TextColors(Color.Black, Color.Green);


        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            LoadColors("TestFilename");
        }
        public bool LoadColors(string FileName)
        {
            bool Result = true;
            if (!ColorSet1.LoadColors(FileName, "Set1")) Result = false;
            if (!ColorSet2.LoadColors(FileName, "SetTwee")) Result = false;
            return Result;
        }
        public bool SaveColors(string FileName)
        {
            bool Result = true;
            if (!ColorSet1.SaveColors(FileName, "Set1")) Result = false;
            if (!ColorSet2.SaveColors(FileName, "SetTwee2")) Result = false;
            return Result;
        }
    }
}
There are only 2 limits, the sky and your imagination
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13370
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: E++, Custom EdingCNC Editor

Bericht door Arie Kabaalstra »

Je kunt t.z.t. deze TextColors class in een eigen library zetten met zijn eigen namespace en die library class dan met using.... gebruiken. Dat is de manier om gemeenschappelijke classes te sharen.
Maar tot die tijd hou ik ze dus gewoon in dezelfde Namespace?..(daar ben ik inmiddels wel achter.. je kunt meerdere classes in één Namespace zetten.)

in mijn testapplicatie had ik die Class in Program.CS gemikt.. gewoon om te kijken of het gaat.. en dat gaat.. dat wil zeggen.. Ik kan een object definiëren, en dan waardes toekenen aan de properties.. maar als ik dat in Form 2 doe.. (waar mijn kleurdialoogje op staat) hoe kan ik dan in Form 1 die objecten, en hun properties oproepen?..

en.. wordt dat dan beter als ik het apart heb in een Library.. wat precies is een Library?.. een DLL?..
hfjbuis
Donateur
Berichten: 3056
Lid geworden op: 13 feb 2017 00:26
Locatie: Hoensbroek

Re: E++, Custom EdingCNC Editor

Bericht door hfjbuis »

methode 1
De class is nu gedefinieerd in de namespace van Form 1.
Zet de name van deze namespace bij de usings van Form2 en daarmee is de class ook binnen form2 bekend.
Het kan ook zonder usings. Zet dan de namespace voor de class naam Namespace.Class

methode 2
Zet de class in een eigen namespace boven de namespace van form1.
Zet in Form1 en Form2 een usings naar de namespace van de class.

methode 3
Zet de class in een eigen namespace in een eigen C# file.
Zet in Form1 en Form2 een usings naar de namespace van de class.

In het algemeen begin ik bij de eerste methode en als alles goed werkt, zet ik de class in een file met andere gedeelde classes. Zo heb ik een algemene files voor coderingen, communicatie, CNC besturing, Gonio, Statistiek, Grafieken, Graveren, FileIO, etc. Elke file heeft zijn eigen namespace.
Je moet niet 2 keer dezelfde code schrijven en debuggen. 90% van mijn code bestaat uit bibliotheken.
There are only 2 limits, the sky and your imagination
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13370
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: E++, Custom EdingCNC Editor

Bericht door Arie Kabaalstra »

90% van mijn code bestaat uit bibliotheken.
En dat is eigenlijk precies wat ik met CNC programma's ook al jaren doe.. vanaf het moment dat macro.cnc in het leven geroepen is door Bert (nog in de tijd met de Fischer-Price Icoontjes, en toen het nog USBCNC Heette)
Dat waren nog de versies met een Freesje en een USB Stekker als Icoon...Ja..die heb ik gemaakt :lol:
Maar in wezen doe ik nu, en deed ik op de Heidenhain niet anders..Je kunt bij Heidenhain andere programma's als "Cyclus" laden...en de standaard Cycli zijn ook niet meer dan het vastleggen van een Reeks "properties" van een bepaald object (Cycle), en als je dan aan de properties geen getalwaarde, maar een parameter toewijst.en je zet de Cycle in een Loop..waarbij je die ene parameter steeds veranderd... moet je eens kijken wat je dan krijgt... :mrgreen:

Ik ga er eens naar kijken.. momenteel ben ik al doende met wat "Snippets" aan het vastleggen..gewoon kleine C# projectjes die maar één kunstje kennen.. zoals het activeren van een andere applicatie, en Ok. het sturen van Toetsaanslagen naar die applicatie..
Dan ga ik zo een progje bouwen dat de inhoudt van een (fastColored)textBox naar een bestandje fietst..voor het opslaan en terugladen van een NC bestandje, of een willekeurig ander bestandje..

en dan eens kijken of we die Classes inkomen, zonder dat ik meteen in de hoek wordt gezet..🤪
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13370
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: E++, Custom EdingCNC Editor

Bericht door Arie Kabaalstra »

Ik ben inmiddels ook even met een "Template" Macro begonnen, eigenlijk een macro met alles behalve de daadwerkelijke code, maar wel alle subroutines, zodat je zelf zonder al te veel moeite de boel kan invullen..

Ik zit er ook aan te denken.. de huidige cycli, met voor en nabewerking.. dat duurt te lang voor een onderdeel dat met dialogen wordt geprogrammeerd.. omdat in elke bewerking 2 tools gebruikt worden, dus per bewerking 2 wissels... en dat kost tijd..de "uitgeklede" G84 cyclus van mijn "Emcootje 120" is toch eigenlijk wel een fijne cyclus, je progt em met een haartje overmaat, en dan 1 beitel, en de hele contour even napoetsen.
En dat is eigenlijk ook hoe het heurt..

als alles klaar is, dan mieter ik voor mijn machines mijn macro erop..hoe die eruit komt te zien?..dat weet ik zelf ook nog niet..Ik denk er dus sterk aan om toch richting de eenvoud van bijvoorbeeld de EMCO TM02 sturing te gaan... de huidige dialogen, daar gaat het ook mee, maar dan moet je alles programmeren, alleen het voorbewerken, en dan een kopie maken, en alle bewerkingen het voorsnijden uitzetten, en het nasnijden invullen... da's te veel gedoe...
hfjbuis
Donateur
Berichten: 3056
Lid geworden op: 13 feb 2017 00:26
Locatie: Hoensbroek

Re: E++, Custom EdingCNC Editor

Bericht door hfjbuis »

Ik heb een lijst met snede dieptes en relative snelheid. De eerste snede diepte uit de lijst is voor het ruw draaien, alle overige (kleine snede diepte en lagere snelheid) voor de nabewerking.
Mijn "code" maakt een lijstje beginnend met de laatste (kleinste) snedediepte en bouwt zo het profiel op met de nabewerkingen. Wat overblijft wordt met de (eerste) snede diepte voor het ruw draaien gedaan. De snede diepte voor het ruw draaien wordt nog gecorrigeerd zodat al het ruw draaien met dezelfde snede diepte wordt gedaan.
Bij het draaien kan ik stoppen bij de voorlaatste pass om de dikte te controleren en eventueel de laatste pass met een aangepaste diepte doen. Ik heb een lijstje van 10 snede dieptes waarvan ik er een paar (meestal 3) selecteer. Tussen staal en aluminium wijzig ik meestal alleen de snede diepte van het ruw draaien (3 muis kliks of taps).
Alleen als er veel vanaf moet, doe ik voor draaien in staal met een aparte beitel, in aluminium maar zelden.
There are only 2 limits, the sky and your imagination
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13370
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: E++, Custom EdingCNC Editor

Bericht door Arie Kabaalstra »

zo'n lijst.... dat kan op 2 plaatsen... tenslotte kun je middels de dialogen op 2 manieren programmeren.. op de "machine" of op de "Editor".. 't is makkelijk genoeg om een array te vullen met snijgegevens per materiaal in een Array.. je moet dan alleen aan het begin van je programma de juiste parameter even de juiste waarde geven, zodat ie de juiste array benaderd,, of dat nu voor staal, alu, titanium of messing is...
Het voordeel van in de Editor zoiets maken is dat je Defaults hebt, die je een naam geeft.. in plaats van een Nummer., maar.. dan moet je we zorgen dat je dat ook in een Dialoog krijgt.. en daarmee zal ik de dialogen ook in de Editor moeten bouwen, omdat ik op de geëigende manier geen Toetsaanslagen naar Eding gejaagd krijg...

Als ik dat "objectengedoe" een beetje onder de knie ga krijgen, dan kan ik een Cycle ook als echt Object gaan benaderen..

Code: Selecteer alles

class TurningCycle{
 
    public int X, Y, DOC, Feed;
 
    }
Heel veel meer dan dat moet het niet zijn tenslotte..Ok.. er zijn nog meer variabelen te verzinnen, voor het afschuinen van begin of eind.. om zo in één klap een Conus te proggen... wel leuk als je zelf HSK opnames wil maken...(Yes i do!!)
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13370
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: E++, Custom EdingCNC Editor

Bericht door Arie Kabaalstra »

;CYCLE FACING
#1001 =40 (X)
#1003=-4 (Z)
#4001=500 (FEED)
#4002=1 (DOC)
#3999=1 (CYCLE INDEX)
;ENDCYCLE
Zo dan... de Tabs vallen weg in een Quote, maar het idee is duidelijk, meer dan dit heb je niet nodig om even wat materiaal weg te fietsen... Waar heb je anders een "Voorraadverwijderfiets" voor😝
Ik heb de Code nu ook in een keer bijna compleet voor alle situaties, dit is een vlakdraaicyclus, maar vlakdraaien, hoeft niet persé aan de voorkant te geschieden, dat kan ook met een linkse beitel, aan de achterkant van een flens, of met een steekbeitel even een vlakje nafietsen.. of met een binnendraaibeitel achterin een kamer, of voorin.. net wat je wilt.. de code houdt er rekening mee..

Het enige wat ik er nog in moet "mikken"🎯 is een gereedschapscontrole.. ofwel.. even kijken of de orientatie klopt.. zodat je een foutemelding krijgt als je met een binnendraaibeltel van buiten naar binnen w... hmmm..nee.. want ik wil nog wel eens van buiten naar binnen... als ik een blinde kamer wil draaien in een horlogedeksel bijvoorbeeld.. Orientatie wordt wel belangrijk bij Radiusdraai- en bij Steekcycli... daar wel..maar die komen laterder..
hfjbuis
Donateur
Berichten: 3056
Lid geworden op: 13 feb 2017 00:26
Locatie: Hoensbroek

Re: E++, Custom EdingCNC Editor

Bericht door hfjbuis »

Arie Kabaalstra schreef: 14 mar 2023 19:31 Het enige wat ik er nog in moet "mikken"🎯 is een gereedschapscontrole.. ofwel.. even kijken of de orientatie klopt.. zodat je een foutemelding krijgt als je met een binnendraaibeltel van buiten naar binnen w... hmmm..nee.. want ik wil nog wel eens van buiten naar binnen.
Ik voer de controle wel uit, maar kan deze overrulen. Ik bepaal de tool offset (X) door b.v met een draadsnijbeitel een stukje te draaien en de gedraaide diameter te controleren.
There are only 2 limits, the sky and your imagination
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13370
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: E++, Custom EdingCNC Editor

Bericht door Arie Kabaalstra »

Ik voer de controle wel uit, maar kan deze overrulen. Ik bepaal de tool offset (X) door b.v met een draadsnijbeitel een stukje te draaien en de gedraaide diameter te controleren.
Dat doet bijna iedereen.. de meesten, die Conventioneel hebben leren draaien, weten het nog.. stukje draaien, opmeten, noniusring instellen..
en op de meeste CNC machines gaat het niet anders.. je draait een klein stukje.. al dan niet automatisch, en dan meet je em op... en de meeste draaibanken waar ik mee gewerkt heb, die hebben wel een functie op de "Sollwert" in te voeren, waarna de besturing automagisch de Offsets berekend... zowel in X als in Z.. en die moeten kloppen..

Waar ik nog wel een beetje boos over kan worden is dat je in EdingCNC zo makkelijk de X coordinaten een offset kan geven.. en DAT DOE JE NIET OP EEN DRAAIBANK!.. de X Coordinaten staan gelijk met de MachineCoordinaten, en wel zo dat X 0, bij Tooloffset X0 OP DE CENTERLIJN LIGT!!

En, dat is niet omdat ik besloten heb dat dat handig is.. maar dat is omdat het zo is..zodat je je Tooloffset kan bepalen als je op X0 staat.. ofwel.. als je op een bekende (gemeten) diameter staat, dat je aan de hand van die Diameter je Offset kan berekenen.. op de EMCO gaat dat nog zo.. als je de "aankras functie" niet hebt geactiveerd..* Waarbij je de gemeten maat van een stukje draaiwerk zo in kan voeren, en de machine de boel voor je berekent..Ik ken overigens niemand die dat NIET heeft geactiveerd.. omdat het gewoon snel en makkelijk werkt..zolang je X0 maar op de Centerlijn ligt...

Het is zo dat EdingCNC nog altijd Geen beitelkalibratieroutines meelevert.. het is toch meer op Frezen afgestemd.
Draaien blijft toch een ondergeschoven kindje... en dat terwijl ik toch een paar beauty's van draaibanken heb staan.. Ik ga de komende tijd alle Macro's eens doorlopen.. ik heb een goed werkende macro op de EMCO5 staan.. die moet ik even kopiëren.. en dan mail ik em wel even door.. die moet er in de eerstvolgende Release gewoon inzitten..

OrientatieControle.. eigenlijk moet je zelf maar opletten welke beitel je selecteert... wat ik ook wel gezien heb is dat niet alle beitels juist zijn ingevoerd... "9"is een veelvoorkomende Oriëntatie, en da's eigenlijk niets..maar je orientatie is wel belangrijk bij bijvoorbeeld steekbeitels, want als de achterkant belangrijk is.. dan neem je dat als referentie, en hoef je dus ook de breedte van de wisselplaat niet te berekenen.. datzelfde geldt voor Kopse steekbeitels, en als je Contouren met RadiusCompensatie moet snijden (er vanuitgaande dat dat werkt) dan moet dat ook in orde zijn..
Plaats reactie