/// <summary> /// Indexierter Zugriff auf die einzelnen Bits des Properties Data. /// </summary> /// /// <param name="bit">das gewünschte Bit [0..3]</param> /// <returns>den aktuellen Zustand des Bits</returns> public virtual bool this[int bit] { get { int data = IOPort.Read(this.Port); int mask = (1 << bit); return((mask & data) == mask); } set { int newData = Data; if (value) { int mask = (1 << bit); newData |= mask; } else { int mask = ~(1 << bit); newData &= mask; } IOPort.Write(this.Port, newData); this.Data = newData; } }
/// <summary> /// Setzt die beiden Motorencontroller (LM629) zurück, /// indem kurz die Reset-Leitung aktiviert wird. /// </summary> public void Reset() { IOPort.Write(ioAddress, 0x00); Thread.Sleep(5); IOPort.Write(ioAddress, 0x80); Thread.Sleep(50); IOPort.Write(ioAddress, 0x00); Thread.Sleep(5); }
/// <summary> /// Setzt die beiden Motorencontroller (LM629) zurück, /// indem kurz die Reset-Leitung aktiviert wird. /// </summary> public void Reset() { // ToDo IOPort.Write(Constants.IODriveCtrl, 0x00); Thread.Sleep(5); IOPort.Write(Constants.IODriveCtrl, 0x80); Thread.Sleep(5); IOPort.Write(Constants.IODriveCtrl, 0x00); Thread.Sleep(5); }
/// <summary> /// Bietet Zugriff auf die einzelnen Eingänge per Index /// </summary> /// <param name="bit">das gewünschte Bit [0..3]</param> /// <returns>den Zustand des entsprechenden Input-Bits.</returns> public virtual bool this[int bit] { get { int mask = 1 << bit; return((this.Data & mask) == mask); } set { IOPort.Write(this.Port, value ? this.Data | (1 << bit) : this.Data & ~(1 << bit)); } }
/// <summary> /// Setzt die beiden Motorencontroller (LM629) zurück, /// indem kurz die Reset-Leitung aktiviert wird. /// </summary> public void Reset() { //DriveState = 0x00; //Thread.Sleep(5); //DriveState = 0x80; //Thread.Sleep(5); //DriveState = 0x00; //Thread.Sleep(5); IOPort.Write(ioAddress, 0x00); Thread.Sleep(5); IOPort.Write(ioAddress, 0x80); // Define Home Thread.Sleep(50); IOPort.Write(ioAddress, 0x00); Thread.Sleep(5); // }
/// <summary> /// Setzt den Motorencontroller zurück /// </summary> public void Reset() { lock (syncObj) { Thread.Sleep(20); IOPort.Write(ioAddress, RESET); Thread.Sleep(20); IOPort.Write(ioAddress, DEFINE_HOME); // Define Home Thread.Sleep(50); SetPID(100, 20, 1000, 1000, 1); //SetPID(200, 40, 2000, 2000, 1); //SetPID(1500, 200, 8000, 1000, 1); //SetPID(1000, 100, 4000, 1000, 1); //SetPID(int proportional, int integral, int derivative, int integralLimit, int derivativeInterval) WriteCmd(DEFINE_HOME); // Reset Tick-Counter } }
/// <summary> /// Sendet eine 16 Bit Zahl als Daten an den LM629 /// </summary> /// <param name="val"></param> private void WriteShort(int val) { WaitReady(); IOPort.Write(ioAddress + 1, (val >> 8) & 0xFF); IOPort.Write(ioAddress + 1, val & 0xFF); }
/// <summary> /// Sendet einen Befehl an den LM629 /// </summary> /// <param name="cmd"></param> private void WriteCmd(byte cmd) { WaitReady(); IOPort.Write(ioAddress, cmd); }
/// <summary> /// Initialisiert die Ausgänge auf 0 und schreibt diese Information auch zum Roboter /// </summary> /// /// <param name="port">der IO-Port für den Zugriff auf die Ausgänge</param> public DigitalOut(int port) { Port = port; IOPort.Write(Port, 0); data = 0; }