EdingCncapi Netframework

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

Moderator: Moderators

Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13479
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: EdingCncapi Netframework

Bericht door Arie Kabaalstra »

Ja.. ik ontken ook niet dat het beter kan.. maar eh.. 'k ben welgeteld 2 dagen aan het knutselen met C#.. en ik was in VB.Net nog niet eens zo'n held.. je eigen programmeertaal ontwikkelen is makkelijker, want dan weet je zelf hoe alles werkt..

't is voor mij allemaal nieuwe materie.. van iemand die net zijn diploma A heeft gehaald, mag je toch ook niet verwachten dat ie "even het kanaal overzwemt"?

Ok.. Revalidatie begonnen.. (Basic had niet eens een "Case" statement, dat ontdekte ik pas in VB... in C# heet dat dus een Switch..

Code: Selecteer alles

switch (variable/expression)
{
    case value1:
        // Statements executed if expression(or variable) = value1
        break;
    case value2:
        // Statements executed if expression(or variable) = value1
        break;
    ... ... ... 
    ... ... ... 
    default:
        // Statements executed if no case matches
}
Syntaxis ziet er overzichtelijk uit..
Nu nog uitvlooien hoe subroutines aan te roepen, Kan dat ook met getallen?..
Dat ik subroutines maak met namen en een nummer. en dat het nummer wat je ingeeft (of uit Eding vist) rechtstreeks correspondeert met dat nummer?

Wat ik Nu in mijn Macro heb is #1100 als "Cycle identifier", als "Gosub #1100" ondersteund zou worden in EdingCNC, dan zou me dat een hoop schelen.. dan hoef ik, met maximaal 20 Cycli ( er zijn immers 20 UserButtons), alleen maar even te kijken IF 0<#1100<20.. gosub #1100..
Maar dat gaat dus in EdingCNC niet zo.. Wat ik begrepen heb is dat het in Heidenhain besturingen Wel kan.. dat je Q1 als parameter een waarde geeft.. en dan LblCall Q1

Als een dergelijk foefje in C# ook kan. heb ik die hele Case niet nodig..
nieles
Berichten: 83
Lid geworden op: 15 mei 2009 13:43
Locatie: Zwolle

Re: EdingCncapi Netframework

Bericht door nieles »

als enkel je doel is om een nummer om te zetten in een tekst, dan kan je een enum gebruiken
https://docs.microsoft.com/en-us/dotnet ... types/enum
Jantje2k
Berichten: 173
Lid geworden op: 15 aug 2020 17:28
Locatie: Hardinxveld-Giessendam

Re: EdingCncapi Netframework

Bericht door Jantje2k »

Als je op basis van een cijfer een functie wilt kunnen aanroepen zou je kunnen kijken naar een dictionary.

Een dictionary moet je zien als een woordenboek. Die hebben altijd een key en een value. Op basis van een key kun je dan dus een value ophalen.

Je zou als value een function kunnen gebruiken. Een voorbeeld hoe dat werkt zie je hier: https://stackoverflow.com/questions/423 ... dictionary

Als je key dan dus de Cycle zou zijn, kun je de bijbehorende functie ophalen uit de dictionary en daarna die functie uitvoeren.

Maar dat is wel gelijk weer een stuk ingewikkelder natuurlijk
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13479
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: EdingCncapi Netframework

Bericht door Arie Kabaalstra »

Interessant concept!.. ik kom overigens zelf ook vaak op "stack overflow" terecht.. die site staat vol met snippets code die je zo in je programma kan mikken..

'k weet het.. 't zomaar kopiëren van stukken code kan listig zijn... (zie ook Therac 25) maar dat geeft me wel inzicht in wat er kan, en hoe het kan.

Omdat ik nog maar aan het begin sta, wil ik eerst eens uitzoeken hoe ik in plaats van doorprogrammeren in het voorbeeld, zelf een project op kan zetten, en daar de juiste koppelingen in maken met de dll's die ik nodig heb.

Als ik het voorbeeld open, dan heb ik in mijn Solution Explorer van boven naar beneden staan:

Code: Selecteer alles

Solution 'CncApi64JogExample' (1 of 1 project)
	CncApi64JogExample
		>Properties
		>References
		  App.config
		  CncApi64.dll
		  CncApi64JogExample_temporaryKey.pfx
		  CncServer.exe
		>Form1.cs
		  Obelix.ico
		  packages.config
		>program.cs
de vraag is nu.. hoe krijg ik CncApi64.dll en Cncserver.exe daar in de "tree" , hoe voeg ik dat toe?..
Jantje2k
Berichten: 173
Lid geworden op: 15 aug 2020 17:28
Locatie: Hardinxveld-Giessendam

Re: EdingCncapi Netframework

Bericht door Jantje2k »

Arie Kabaalstra schreef: 11 feb 2021 12:23 Interessant concept!.. ik kom overigens zelf ook vaak op "stack overflow" terecht.. die site staat vol met snippets code die je zo in je programma kan mikken..

'k weet het.. 't zomaar kopiëren van stukken code kan listig zijn... (zie ook Therac 25) maar dat geeft me wel inzicht in wat er kan, en hoe het kan.

Omdat ik nog maar aan het begin sta, wil ik eerst eens uitzoeken hoe ik in plaats van doorprogrammeren in het voorbeeld, zelf een project op kan zetten, en daar de juiste koppelingen in maken met de dll's die ik nodig heb.

Als ik het voorbeeld open, dan heb ik in mijn Solution Explorer van boven naar beneden staan:

Code: Selecteer alles

Solution 'CncApi64JogExample' (1 of 1 project)
	CncApi64JogExample
		>Properties
		>References
		  App.config
		  CncApi64.dll
		  CncApi64JogExample_temporaryKey.pfx
		  CncServer.exe
		>Form1.cs
		  Obelix.ico
		  packages.config
		>program.cs
de vraag is nu.. hoe krijg ik CncApi64.dll en Cncserver.exe daar in de "tree" , hoe voeg ik dat toe?..
Welk programma gebruik je om in te programmeren? Is dat Visual Studio Community?

In dat geval heb je dus libraries. Een library moet je zien als een bibliotheek vol met code bestanden, zodat je zelf niet meer hoeft te programmeren. In C# is de standaard om libraries mee te beheren NuGet. Als je in de menubalk bovenaan naar Tools > Nuget > Package Manager (of zoiets) toegaat kun je zoeken voor libraries. Als je er een hebt gevonden die je wilt gebruiken (in dit geval CncApi64) kun je op installeren klikken en dat gebeurt dit automatisch voor je
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13479
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: EdingCncapi Netframework

Bericht door Arie Kabaalstra »

Thanks.. daar ga ik even naar kijken.. dan kan ik tenminste een nieuwe map aanmaken, en daar in doorwerken, in plaats van allerhande kunstgrepen te moeten uitvoeren..

Ik heb net voor het progje wat de applicatie wakker moet schudden weer even teruggegrepen naar VB.NET, omdat ik in VB al goed werkende code had.
Appactivate werkt idioot genoeg niet altijd met de Programma naam, maar wel altijd met het Process Id.. dus.. peuteren we die er even uit..

't liefste doe ik dat met een kleine console applicatie.. maar Appactivate wil niet werken in een Console?
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13479
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: EdingCncapi Netframework

Bericht door Arie Kabaalstra »

Overigens.. Ja.. ik werk met Visual Studio 2019 Community.

Inmiddels heb ik mijn DialogStart.exe klaar.. die kijkt of "Obelix" (Object oriented Engineering Language) ergens slaapt, en dan schudt ie em wakker..

Zodra ik daar een Exe van klaar heb, dan kan ik die ook in de EdingCNC map plaatsen, en in de Home-routine 't commando "Exec Obelix.exe" zetten..
bij't opstarten van de machine, na het homen wordt Obelix gestart, en kan ik em desgewenst wakker schudden vanuit mijn Macro.
Wat "dingetjes" netter gemaakt.. ik werk altijd met een schermresolutie van 1024 x 768, op een 15" scherm.. groot genoeg, meer hoeft van mij echt niet.. wat er op het scherm getoond wordt, is immers ondergeschikt aan wat er in de machine gebeurt.
Daarmee heb ik het formaat van mijn Dialoogje op 1024 x 670 gekleurde kabouters gezet, zodat de Functieknoppenbalk in EdingCNC nog zichtbaar blijft.
dan kan ik , als ik een verkeerde macro gekozen heb altijd meteen de juiste opzoeken, Obelix kijkt naar de waarde van #1100 op het moment dat ie geactiveerd wordt, en toont dan de juiste dialoog (Ja.. ik ga die Switch/Case er zo in zetten).
Ik heb ook het "Startpunt" op 0,0 gezet, zodat ie altijd bovenin het scherm, over de volle breedte zichtbaar is.

Bij elkaar toch een hele klus.. de Macro moet aansluiten op Obelix, 't "wekkertje" moet netjes aflopen (slimmigheidje daarin is dat ie eerst kijkt of Obelix wel gestart is)
Jantje2k
Berichten: 173
Lid geworden op: 15 aug 2020 17:28
Locatie: Hardinxveld-Giessendam

Re: EdingCncapi Netframework

Bericht door Jantje2k »

AppActivate werkt inderdaad niet in een console app, want de documentatie van Microsoft zegt daarover:
You can use AppActivate only with processes that own windows. Most console applications do not own windows, which means that they do not appear in the list of processes that AppActivate searches. When running from a console application, the system creates a separate process to run the application and returns the output to the console process. Consequently, when you request the current process ID, you get the process ID of this separate process, rather than the console application's process ID.
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13479
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: EdingCncapi Netframework

Bericht door Arie Kabaalstra »

Dat had ik inmiddels ook gevonden,
Dus maar een kleine applicatie gemaakt met een Formpje.
die kan weergeven dat Obelix niet draait als ie em niet kan vinden..
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13479
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: EdingCncapi Netframework

Bericht door Arie Kabaalstra »

't werkt wel met die "wekker applicatie" maar mooier zou het zijn als Obelix wakker wordt als er in EdingCNC iets veranderd.. zoals de waarde van #1100 bijvoorbeeld.. Ik kan in EdingCNC met de Userbutton de macro #1100 op een waarde laten zetten (die waarde geeft aan welke cyclus er geprogrammeerd moet worden, dan Knoop ik de juiste waarden in Obelix aan de parameters en schiet die terug in EdingCNC, waarna EdingCNC er het programmaatje mee maakt.. en #1100 ook meteen in het programma zet..
Dan Kan Obelix em weer op 0 zetten.. niets an de hand..

echter.. dan moet Obelix wel "op wacht" staan.. en hoe doen we dat?.. met een Timer die elke zoveel milliseconden (laten we zeggen 100) kijkt naar de waarde van #1100..

Alleen.. heb ik dat nog niet voor elkaar.. iemand een suggestie hoe ik dat kan doen?..
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13479
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: EdingCncapi Netframework

Bericht door Arie Kabaalstra »

Code: Selecteer alles

 public void timer1_Tick(object sender, EventArgs e)
        {
            Double Wakeup = G_VariableAccess.GetVariable(1000);
            if (Wakeup > 0)
            {
                this.Activate();
            }
        }
Yes!.. Geen "Wekkerapplicatie" meer nodig.. zodra ik de waarde van #1000 verander dan wordt Obelix wakker!
Dat vond ik toch een nettere oplossing.. 'k wist alleen niet hoe het te schrijven.
In eerste instantie deed de Timer niets.. maar "Duhhh".. je moet em wel eerst aanzetten : timer1.Enabled = true; in je Form1.Load zetten..

ik begin er nu echt lol in te krijgen.. 🤩
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13479
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: EdingCncapi Netframework

Bericht door Arie Kabaalstra »

Nog even een vraagje aan de C# Kenners hier.. of eigenlijk een paar vragen:

in VB.Net kun je "modules" maken, feitelijk een bestandje waar je subs in kan gooien, en vanuit je hoofdcode kan aanroepen (analoog aan de Macro.CNC van EdingCNC).
Is dit in C# ook mogelijk?
in mijn Programmeerapplicatie die ik een 10 jaar geleden geschreven heb, zat een Module die puur de "instellingen" per dialoog bevatte, als ik een bepaalde dialoog wilde gebruiken verwees ik naar die sub in de Module "Dialogen", daarmee werden teksten getoond, Textboxen getoond, en wat andere bijzaken geregeld.

'k zou het wel makkelijk vinden als ik in een apart bestand de indelingen van mijn dialogen kan vastleggen, en dan gewoon vanuit de Case/Switch (ja.. moet ik er nog steeds inzetten) bepalen welke routine ik aanroep om de juiste dialoog te tonen.
Dat zorgt voor overzicht, en ik zit niet met al die dingen in mijn hoofdprogramma.

Dan.. zijn er boeken die jullie kunnen aanraden?.. Ik heb een aantal boeken over VB.NET en C/C++, maar nog geen voor C#
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13479
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: EdingCncapi Netframework

Bericht door Arie Kabaalstra »

Code: Selecteer alles

public enum Color { Red, Green, Blue }

public class Example
{
   public static void Main()
   {
      Color c = (Color) (new Random()).Next(0, 3);
      switch (c)
      {
         case Color.Red:
            Console.WriteLine("The color is red");
            break;
         case Color.Green:
            Console.WriteLine("The color is green");
            break;
         case Color.Blue:
            Console.WriteLine("The color is blue");
            break;
         default:
            Console.WriteLine("The color is unknown.");
            break;
      }
   }
}
Zie ik hier goed dat Enum Zero based is?.. als ik de code goed begrijp is C een variabele die Random tussen 0 en 3 is.. 0 = Red, 1=Green, 2=Blue, 3= unknown..



Da's ook een elegante manier om mijn code te bouwen..

Code: Selecteer alles

public enum Cycle { Facing, Turning, Chamfer, Fillet, Grooving, Threading, Drilling, enz.. }
Double CycleIdentifier = G_VariableAccess.GetVariable(1100);

public class Example
{
   public static void Main()
   {
      Cycle c = (Cycle) (CycleIdentifier);
      switch (c)
      {
         case Cycle.Facing:
            Console.WriteLine("The color is red");
            break;
         case Cycle.Turning:
            Console.WriteLine("The color is green");
            break;
         case Cycle.Chamfer:
            Console.WriteLine("The color is blue");
            break;
            
            enz...
         default:
            Console.WriteLine("The color is unknown.");
            break;
      }
   }
}
Jantje2k
Berichten: 173
Lid geworden op: 15 aug 2020 17:28
Locatie: Hardinxveld-Giessendam

Re: EdingCncapi Netframework

Bericht door Jantje2k »

Arie Kabaalstra schreef: 14 feb 2021 18:47 Nog even een vraagje aan de C# Kenners hier.. of eigenlijk een paar vragen:

in VB.Net kun je "modules" maken, feitelijk een bestandje waar je subs in kan gooien, en vanuit je hoofdcode kan aanroepen (analoog aan de Macro.CNC van EdingCNC).
Is dit in C# ook mogelijk?
Bedoel je hiermee gewoon classes? Dat je objecten aanmaakt, functies uit een class aanroept, enzovoort?
in mijn Programmeerapplicatie die ik een 10 jaar geleden geschreven heb, zat een Module die puur de "instellingen" per dialoog bevatte, als ik een bepaalde dialoog wilde gebruiken verwees ik naar die sub in de Module "Dialogen", daarmee werden teksten getoond, Textboxen getoond, en wat andere bijzaken geregeld.

'k zou het wel makkelijk vinden als ik in een apart bestand de indelingen van mijn dialogen kan vastleggen, en dan gewoon vanuit de Case/Switch (ja.. moet ik er nog steeds inzetten) bepalen welke routine ik aanroep om de juiste dialoog te tonen.
Dat zorgt voor overzicht, en ik zit niet met al die dingen in mijn hoofdprogramma.
Je zou een class kunnen aanmaken (eventueel static), waar je die dialogen inplaatst. Dat is mogelijk

Dan.. zijn er boeken die jullie kunnen aanraden?.. Ik heb een aantal boeken over VB.NET en C/C++, maar nog geen voor C#
Boeken zijn ouderwets :lol:
Plaats reactie