Laden...
D
Doofit myCSharp.de - Member
Werkzeugmechaniker Dabei seit 29.08.2015 13 Beiträge
Benutzerbeschreibung

Forenbeiträge von Doofit Ingesamt 13 Beiträge

11.09.2015 - 21:01 Uhr

Danke für die Antwort, das war aber leider nicht der Fehler...
Vielleicht sollte ich die Frage umformulieren...Ich hab eine Textbox in die der Benutzer den Namen der zu öffnenden Datei angibt, z. B. "Halterung.dwg". Jetzt möchte ich wissen was ich machen muss, damit dieser Name in den Befehl eingesetzt wird (anstelle von "XXX"):


System.Diagnostics.Process.Start(@"F:\Dokumente\Dokumente CAD 2014 Mechanical\XXX);

11.09.2015 - 19:20 Uhr

Hallo,

Ich schreiben an einem Programm (MVC# 2010 Express) welches den Benutzer dazu auffordert verschiedenen Werte einzugeben. Diese werden dann übernommen und in einer Tabelle abgelegt. Bei den geforderten Werten soll auch eine Zeichnung (Format "Zeichnung.dwg") bereitgestellt werden. Diese soll als Link in der Tabelle erscheinen und sich bei einem Klick darauf öffnen. Wie funktioniert das? Ich weiß wie ich die Datei öffnen kann, wenn sie unter einem LinkLabel geführt wird:


System.Diagnostics.Process.Start(@"F:\Dokumente\Dokumente CAD 2014 Mechanical\Aufnahme.dwg);

Jetzt will ich ja aber dass eben die Datei die der Benutzer angegeben hat, in der Datei verlinkt wird. Das ändert sich dann bei jeder Zeile die neu in der Tabelle erstellt wird. Mein Versuch war :


System.Diagnostics.Process.Start(@"F:\Dokumente\Dokumente CAD 2014 Mechanical" + Zeichnung);

Zeichnung ist ein String und wird jedes mal durch die Eingabe des Benutzers aktualisiert. Allerdings kommt dann immer der Fehler, dass die Datei nicht gefunden werden kann. Hat da jemand einen Tipp für mich?

Danke

04.09.2015 - 01:39 Uhr

Hi,
so, ich bin jetzt umgestiegen auf eine USB Steuerkarte mit Stepperdrivern inklusive der Motoren. Mit dem mitgelieferten Testprogramm kann man die Motoren auch wunderbar bewegen. Das möchte ich allerdings natürlich durch mein eigenes Programm machen. Hat jemand Beispiele, Links, etc. zu der Ansteuerung vom USB-Port über C#? Hab auch schon Google gefragt, aber zur Ansteuerung via USB gibt es gar nicht so viel wie zum LPT-Port, ist ja klar, der LPT existiert schon etwas länger 😄 Aber da mich dieser echt zur puren Verzweiflung bringt, versuche ich es nun mit USB.

Danke 😃

02.09.2015 - 23:26 Uhr

Ja die Karte ist via LPT und USB angeschlossen.

Palin, kannst du das evtl etwas genauer ausführen? Ich kenne dieses Programm gar nicht. 🙁

02.09.2015 - 01:34 Uhr

Mir ist noch etwas aufgefallen. Wenn ich den Motor ansteuern will - egal mit welcher Methode - liegt nur auf Pin 7, Pin 8 und GND Spannung an, auf Pin 1 jedoch nicht (Benennung nach Doku = http://www.savebase.com/infobase/downloads/breakout_board_stepper_driver/user_manual_5_axis_breakout_board.pdf ). Das heißt, wenn ich GND und Pin 7 oder Pin 8 mit den zwei Kabeln einer Spule des Motors verbinde, macht er einen Step (wenn das Programm währenddessen läuft). Verbinde ich aber - egal ob Pin 7, Pin 8 oder GND - mit Pin 1, passiert gar nichts mehr. Hat das was zu bedeuten? Muss ich irgendwie Spannung an Pin 1 bringen?

LG und danke für all die Antworten bisher 😉

01.09.2015 - 12:14 Uhr

Habe auch schon folgendes in der Schleife probiert:


PortAccess.Output(0x378, 0x40);
System.Threading.Thread.Sleep(x);
PortAccess.Output(0x378, 0x60);
System.Threading.Thread.Sleep(x);

Hat ebenfalls nicht funktioniert...

31.08.2015 - 21:49 Uhr

Hier mal der komplette Code:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace Schrittmotor_Versuch_2
{
    public partial class Form1 : Form
    {
        int x = 100;
        public Form1()
        {
            InitializeComponent();
        }

        private void btnZ_Click_1(object sender, EventArgs e)
        {
            lblAnzeige.Text = "Z-Achse";
            System.Threading.Thread.Sleep(x);
            PortAccess.Output(0x378, 0x20);
            for (int i = 0; i < 100; i++)
            {
                
                System.Threading.Thread.Sleep(x);
                PortAccess.Output(0x378, 0x40);
                System.Threading.Thread.Sleep(x);
                PortAccess.Output(0x378, 0x0);
                System.Threading.Thread.Sleep(x);
            }            
        }
        
        private void btnAus_Click(object sender, EventArgs e)
        {
            PortAccess.Output(0x378, 0);
            PortAccess.Output(0x37A, 0);
            lblAnzeige.Text = "Aus";
        }
    }
}

public class PortAccess
{
    [DllImport("inpout32.dll", EntryPoint = "Out32")]
    public static extern void Output(int adress, int value);
}


class CParallelPort
{
    // inpout32.dll muss im /bin/debug-Ordner vorhanden sein!
    // Dieser Code funktioniert nur mit Windows XP
    // Für Windows 7 wird eine 64-Bit-DLL inpoutx64.dll benötigt!
    [DllImport("inpout32.dll", EntryPoint = "Out32")]
    public static extern void Output(int adress, int value);
    [DllImport("inpout32.dll", EntryPoint = "Inp32")]
    public static extern int Input(int adress);
}

31.08.2015 - 19:40 Uhr

Hat sich leider auch nach den veränderten Eingaben nichts geändert......ich weiß echt nicht was es sein könnte 😦

31.08.2015 - 17:04 Uhr

@ Palin,
ich finde leider nichts dazu, wie und ob man die Stepanzahl hochstellen kann...aber es kann gut sein dass der Motor nur einen Step macht, das würde dieses "Zucken" erklären. Aber wenn das so ist, müsste ich ja einfach eine Schleife einfügen und dann müsste er unendlich viele Steps machen (bis ich die Schleife unterbreche) und letztendlich eine ganze Umdrehung schaffen, aber auch das funktioniert nicht 🙁

31.08.2015 - 16:54 Uhr

Daran liegt es glaube ich nicht, denn wenn ich 1000ms einstelle dann zuckt der Motor eben alle 1000ms und wenn ich 1ms angebe dann zuckt er so oft dass er im Prinzip nur durchgehend brummt. Dennoch bewegt er sich nicht....das Problem muss an anderer Stelle liegen... 🤔

31.08.2015 - 16:27 Uhr

Hi MrSparkle,
ich wüsste leider nicht wie...
aber danke erstmal für den Hinweis mit der Schreibweise. 👍
Muss auch zugeben dass ich nicht so vertraut mit C# bin, eher hobbymäßig. 😁
Also jetzt bekommt der Motor immer ein Signal, was schonmal ein großer Unterschied zu vorher ist. Trotzdem bewegt er sich nicht, man spürt lediglich kleine "Zucker". Der Code sieht nun folgendermaßen aus:


PortAccess.Output(0x378, 0x40);         //Drehrichtung angeben
System.Threading.Thread.Sleep(x);     //Zeit x warten
PortAccess.Output(0x378, 0x60);         //Impuls, Bit ein
System.Threading.Thread.Sleep(x);     //Zeit x warten
PortAccess.Output(0x378, 0x0);           //Bit aus
System.Threading.Thread.Sleep(x);     //Zeit x warten
PortAccess.Output(0x378, 0x60);         //Impuls Bit ein
System.Threading.Thread.Sleep(x);     //Zeit x warten
PortAccess.Output(0x378, 0x0);           //Bit aus

Für x habe ich momentan den Wert x = 40, aber ich denke nicht dass das mit meinem Problem zusammenhängt oder?

31.08.2015 - 14:40 Uhr

Ja die Hardware funktioniert, habe die Motoren angeschlossen und über Mach3 (ein CNC-Programm dass ich mir gekauft habe) bewegt.....also dort liegt nicht das Problem.

29.08.2015 - 18:49 Uhr

Hallo,
ich habe jetzt schon mehrer Wochen damit verbracht deutsche und englische Seiten zu durchsuchen, was die Steuerung von Schrittmotoren über CSharp angeht. Ich hab auch schon eine ganz Menge gefunden,aber erstmal zum Anfang. Ich habe mir eine 5-Achs-Steuerkarte (http://www.savebase.com/infobase/downloads/breakout_board_stepper_driver/user_manual_5_axis_breakout_board.pdf), sowie 3 Nema-17-Motoren besorgt (1,7A , 1,8°, 200 Schritte für eine ganze Umdrehung bei Vollschrittbetrieb), da ich fürs erste nur mal die X-, Y- und Z-Achse verwenden möchte. Die Steuerkarte ist über den OnBoard-LPT mit dem PC verbunden. Nachdem ich die inpout32.dll importiert habe, bin ich nun durch Google so weit, dass ich es im Wechsel mit "ControlPort.Output(0x378, Binärwert);" und "System.Threading.Thread.Sleep(Zeit);" schaffe ein Signal an die Achsen zu senden, was man an der LED für die jeweilige Achse erkennt. Wenn ich die Anleitung der Steuerkarte richtig lese muss ich erst durch einen Pin die Drehrichtung angeben und daraufhin dann einen anderen Pin immer ein- und ausschalten. Dies wurde mir auch auf gutefrage.net von einem Programmierer so bestätigt. Hier mal ein Codeausschnitt mit dem ich versuche die Z-Achse zu steuern:

PortAccess.Output(0x378, 01000000);  //Drehrichtung angeben
System.Threading.Thread.Sleep(x);     //Zeit x warten
PortAccess.Output(0x378, 01100000);  //Impuls, Bit ein
System.Threading.Thread.Sleep(x);     //Zeit x warten
PortAccess.Output(0x378, 00000000);  //Bit aus
System.Threading.Thread.Sleep(x);     //Zeit x warten
PortAccess.Output(0x378, 01100000);  //Impuls Bit ein
System.Threading.Thread.Sleep(x);     //Zeit x warten
PortAccess.Output(0x378, 00000000);  //Bit aus

Das kann man natürlich am Ende alles in eine Schleife legen, doch zum Testen wollte ich es erst einmal so probieren. Der Code wiederholt sich so eine ganze Weile und startet sobald ein Button geklickt wird. Soweit so gut, klicke ich den Button, blinkt die LED für Z und man hört auch dass da irgendwas schaltet (Relais). Trotzdem bewegt sich der Motor nicht, aber ich bin mir sicher dass er richtig angeschlossen ist. Manchmal merkt man auch, dass er einen kleinen Ruck macht, aber nur minimal und das macht er auch nicht immer....bin langsam echt am verzweifeln, vielleicht hat hier jemand ein paar Tipps für mich, da ich keine Fehlermeldungen bekomme und demnach das Prinzip ja stimmen müsste...