• 25.04.2024, 09:26
  • Registrieren
  • Anmelden
  • Sie sind nicht angemeldet.

 

Re: Hilfe zur Scriptprogrammierung

Dienstag, 10. Juli 2007, 23:19

Dazu musst Du einfach die Transfers in einer Funktion entsprechend auswerten. USB-Geräte können selbst nicht einen Transfer erzwingen sondern werden vom Host(PC) abgefragt und dieser wertet dann die Daten aus.

yeli

Junior Member

Re: Hilfe zur Scriptprogrammierung

Dienstag, 10. Juli 2007, 23:26

Danke,

Alles klar. Ich werd's versuchen.

yeli

Junior Member

Re: Hilfe zur Scriptprogrammierung

Donnerstag, 12. Juli 2007, 22:07

Hallo,

ich komm immer weiter mit der Programmierung.

Aber ich stoße immer wieder an Grenzen.
So hab ich folgendes versucht :

Quellcode

1
2
3
4
Dim WriteData As String
multiswitch.LEDStatus = 2 ^ 0
WriteData = Data.CreateStringFromStructure(AquaComputer.TranslationClasses.multiswitch_Rev141.TransferTypeRegister.LEDOUT)
UsbHid.HidWriteToDevice(UsbIndex, WriteData)

Das LEDOUT sollte bewirken, dass nur das LEDStatus-Flag zum Multiswitch übertragen wird. (so war meine Vermutung)
Aber : Pustekuchen, es passiert einfach gar nichts.
Verwende ich OUTPUT statt LEDOUT, funktioniert es zwar, aber das Flag AMPStatus wird ebenfalls mit übertragen, und das darf bei meiner Verwendung nicht sein.

Was muß ich tun, um nur den LEDStatus an den Multiswitch zu übertragen?

Gruß
Yeli

Re: Hilfe zur Scriptprogrammierung

Freitag, 13. Juli 2007, 01:14

hi yeli,
vlt hilft dir das und das weiter.

messi

yeli

Junior Member

Re: Hilfe zur Scriptprogrammierung

Freitag, 13. Juli 2007, 09:43

Hi Messi,

danke für die Antwort, aber leider hilft mir beides in diesem Fall nicht weiter.
Beides funktioniert nicht, wenn PWM am Multiswitch ausgeschaltet ist (wie übrigens auch alle Beispiele, die ich bisher sah).

Es ist übrigens nicht so, dass ich meine LED's nicht zum blinken bringe (auch nen Nightrider hab ich schon fertig). Das ist nicht (mehr) das Problem. Mein Problem ist folgendes:

Ich schreibe alle 1sek. den veränderten LEDStatus zum Multiswitch zurück. Das funktioniert auch. Nur wird damit der (beim Programmstart ausgelesene) AmpStatus auch wieder zurückgeschrieben. Damit läßt sich natürlich an den Hardwaretasten des Multiswitch nichts mehr schalten, weil mein Programm ja den Status wieder zurücksetzt.
Und mein Versuch, den Status vor jedem Schreiben erstmal auszulesen, hat den Multiswitch völlig durcheinandergebracht.

Daher ja meine Frage: Wie kann ich NUR den LEDStatus an den Multiswitch schicken?

Ich hab mir inzwischen auch schon mal das myTranslationclasses-Projekt aus dem SDK angeschaut, Und ich denke, dass darin schon der Fehler liegt. Dort ist in der multiswitch_Rev141.cs klar zu erkennen, dass beim Transferstatus=LEDOUT nur die PWM-Werte der LEDs übertragen werden. Aber das hilft mir ja bekanntlich nicht weiter.

Könnte man vielleicht die myTranslationClasses so erweitern, dass bei Transferstatus=LEDOUT auch das LEDStatus-Flag zum Multiswitch übertragen wird?

Gruß
Yeli

PS: um dem Thema dieses Threads gerecht zu werden, werde ich mein kleines Projekt hier zur Verfügung stellen, aber erst, wenn es fertig ist, und funktioniert.

Re: Hilfe zur Scriptprogrammierung

Freitag, 13. Juli 2007, 11:35

okay, hab verstanden wieso mein programm dir da nicht helfen kann.
hab mir jetz den thread nochmal ganz genau durchgelesen, und auch nochmal im sdk geschnuppert.
wenn ich das richtig verstehe willst du die leds ohne pwn anschalten/ausschalten aber nicht die amp sachen?

um das ganze mal schrittweise anzugehen:
erstmal der betreffende ausschnitt aus dem sdk:

Zitat


/// <summary>
/// Wenn die LED Ausgnäge nicht mit PWM betrieben werden, gibt jedes Bit den Status der entsprechenden LED an.
/// </summary>
public byte LEDStatus
{
get{ return m_LEDStatus; }
set{ m_LEDStatus = value; }
}

ich hatte bis nun das ganze falsch verstanden, dachte man könnte damit den status (an/aus) nur auslesen, aber man kann ihn ja auch schreiben (ein weiterer todo punkt für mein skriptgen .. ;) ).
sebastian hat dir ja auch schon erklärt, wie du die teile da ankriegen kannst, indem du einfach die hexwerte von den bits 0 bis 7 berechnest. (die zählweise bei 8 leds ist nämlich nicht 1-8 sondern 0-7).
soweit so gut, ansich sollten ja AMPstatus und LEDstatus völlig unabhängig von einander sein..
ich denke daher, das es eher daran liegt dass dein skript aufbau fehlerhaft (tschuldigung...) ist.
ich würde es so machen, dass ich anfangs ne initialisation mache, wo ich sämtliche eingänge auf 0 stelle und dann erst damit arbeite..
hier mal das bsp script von ac völlig jungfräulich:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
public AquaComputer.TranslationClasses.multiswitch_Rev141 MultiswitchData;

public string StartScript(AquaComputer.TranslationClasses.multiswitch_Rev141 WriteData,
             ref AquaComputer.TranslationClasses.multiswitch_Rev141 ReadData, 
            AquaComputer.UsbHid.HidControl Usb,
            int UsbAdress)
{
    ScriptFunctions Obj = new ScriptFunctions(Usb, UsbAdress);
      MultiswitchData = WriteData;
      ReadData.ReadLock = true;
      Obj.Blink(WriteData);
      ReadData.ReadLock = false;
    return("");
}


public class ScriptFunctions
{
      private AquaComputer.UsbHid.HidControl HIDControl;
      private int HIDDeviceNumber = -1;
      private bool Success = false;

      public ScriptFunctions(AquaComputer.UsbHid.HidControl Usb, int UsbAdress)
    {
        HIDControl = Usb;
        HIDDeviceNumber = UsbAdress;
    }

      private void WriteToDevice(
            AquaComputer.TranslationClasses.multiswitch_Rev141 Data, 
            AquaComputer.TranslationClasses.multiswitch_Rev141.TransferTypeRegister TransferType)
      {
            string MultiswitchWriteString = Data.CreateStringFromStructure(TransferType);
            if (HIDControl.ControlBusy == false)
            {
                  HIDControl.HidWriteToDevice(HIDDeviceNumber, MultiswitchWriteString);
            }
      }

      public void Blink(AquaComputer.TranslationClasses.multiswitch_Rev141 Data)
    {
        *BODY*
    }

}//end class


der teil wo *BODY* steht ist variabel, da sollte dann natürlich das eigentliche skript platzfinden.

anstatt des *BODY* würde ich jetz an deiner stelle mal folgendes reinsetzen:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
Data.AMPStatus = 0x00; //alle amps null
Data.LEDStatus = 0x00; //alle leds null
WriteToDevice(Data, AquaComputer.TranslationClasses.multiswitch_Rev141.TransferTypeRegister.OUTPUT); //zum ms senden bzw. schreiben

Data.LEDStatus = 0x01; //led1 anmachen
Data.AMPStatus = 0x00; //alle amps null
WriteToDevice(Data, AquaComputer.TranslationClasses.multiswitch_Rev141.TransferTypeRegister.OUTPUT); //zum ms senden bzw. schreiben
System.Threading.Thread.Sleep(1000); //1sek warten

Data.LEDStatus = 0x01 + 0x80; //led1 und led8 anmachen
Data.AMPStatus = 0x00; //alle amps null
WriteToDevice(Data, AquaComputer.TranslationClasses.multiswitch_Rev141.TransferTypeRegister.OUTPUT); //zum ms senden bzw. schreiben
System.Threading.Thread.Sleep(1000); //1sek warten

kann dir nicht garantieren dass das überhaupt geht, hab nämlich selbst noch kein MS ;)
was ich jedoch gelernt hab ist, dass dieses WriteToDevice doch recht wichtig ist, und im grunde nach jeder aktion, die die leds verändert ausgeführt werden muss, damit das ms von deinem skript überhaupt was mitbekommt.

vlt hilft dir das hier geschriebene weiter, oder auch nicht ;)
bin jetzt erstmal noch ne woche im urlaub; danach schau ich hier nochmal rein.

messi

yeli

Junior Member

Re: Hilfe zur Scriptprogrammierung

Freitag, 13. Juli 2007, 11:42

Hi Messi,

also auf den ersten Blick würde ich sagen, das funktioniert.
ABER:

Ich kann leider den AmpStatus nicht auf 0 setzen, da schon am ersten Port mein Monitor hängt (selbstverst. über ein Relais).
Du siehst, mein Problem ist eher, dass der AmpStatus völlig unverändert bleiben muss.

Deshalb suche ich ja auch nach einer Lösung, NUR das LEDStatus-Flag an den MS zu übertragen.

Gruß
Yeli

Re: Hilfe zur Scriptprogrammierung

Freitag, 13. Juli 2007, 12:00

ahso, und wenn du jetz einfach alle AMPstatus zeilen streichst gehts nicht?

edit: ok, jetz wird mir langsam klar"er" was dein problem ist. ich kann dazu eigtl nur sagen, dass wenn man den AMPstatus im skript nicht anpasst, dann dürfte dieser auch nicht geändert werden..
bist du sicher das in deinem skript nirgends AMPstatus drinsteht?

yeli

Junior Member

Re: Hilfe zur Scriptprogrammierung

Freitag, 13. Juli 2007, 12:06

Doch, na klar.
Dann überträgt er den AmpStatus, den ich beim ersten Auslesen ermittelt hab. Und damit wird z.B. ein per HardwareKey inzwischen eingeschalteter Verbraucher wieder ausgeschaltet.
Und es ist extrem lästig (und sicher auch schädlich), wenn mein Monitor (oder auch ein Drucker) immer nur eine Sekunde an ist. ;)

Gruß
Yeli

Re: Hilfe zur Scriptprogrammierung

Freitag, 13. Juli 2007, 12:09

also, im klartext: du willst endgeräte via den amp eingängen an/ausschalten können?

wieso musst du dann zu anfang die werte des amps auslesen, wenns dir eh nur darum geht die geräte an/aus zu schalten?

trotzdem bleib ich dabei, wenn du den ampstatus nur ausliest, dann kann er gar ned geändert werden. das hat sebastian mit get/set ja auch vernünftig gelöst.

messi

yeli

Junior Member

Re: Hilfe zur Scriptprogrammierung

Freitag, 13. Juli 2007, 12:24

Du meinst also,

wenn ich beim Programmstart gar nichts auslese, und nur den LEDStatus setze und schreibe, wird der AmpStatus nicht gesetzt?

Nu, das probier ich doch heute Nachmittag gleich mal aus.
Obwohl ich das bezweifle ... wir werden sehen.

.... Ich berichte ...

Gruß
Yeli

yeli

Junior Member

Re: Hilfe zur Scriptprogrammierung

Freitag, 13. Juli 2007, 12:34

Korrektur:

Ich hab grad die vorherige Antwort nochmal gelesen, und:

Ja, das ist schon richtig, was du da sagst. Der AmpStatus (im Programm) ändert sich nicht, und wird jedesmal, wenn ich was am LEDStatus verändere so wie er ist zurück in den MS geschrieben. Was aber passiert?

- Ich starte Programm -> AmpStatus wird ausgelesen (Bsp. Port 3 ist aus).
- Programm schreib alle 1sek. diesen AmpStatus zurück
- Jetzt schalte ich mit nem HardwareKey direkt am MS den Port 3 an (so sollte jetzt der Port 3 an sein)
- wenn jetzt die nächste Sekunde abgelaufen ist, schreibt mein Programm den (noch vom Programmstart
bekannten AmpStatus (zur Erinnerung: da war Port3 noch aus)) zurück in den MS.
-> Ergebnis : Der Port 3 war bestenfalls mal für eine Sekunde an!

Also:
Mein Programm soll ausschließlich die LED's bedienen. Die Amp-Ports werden per Hardware-Tasten direkt am MS bedient.

Ich hoffe, jetzt ist mein Anliegen etwas klarer geworden.

Gruß
Yeli

Re: Hilfe zur Scriptprogrammierung

Freitag, 13. Juli 2007, 12:41

Zitat von »yeli«


Ja, das ist schon richtig, was du da sagst. Der AmpStatus (im Programm) ändert sich nicht, und wird jedesmal, wenn ich was am LEDStatus verändere so wie er ist zurück in den MS geschrieben.

wenn du den ledstatus veränderst wird der ampstatus nicht so wie er ist zurück ins ms geschrieben...
wenn du einmal den amp status setzt bleibt er solange im MS gesetzt, bis du ihn wieder änderst, das bedeutet also, wenn du ihn einmal an machst reicht das, danach musst du den nicht immer und immer wieder schreiben, wenn ich das von dir wenigstens richtig verstehe..

Zitat von »yeli«


- Programm schreib alle 1sek. diesen AmpStatus zurück

siehe oben, meiner meinung nach nicht die korrekte vorgehensweise.

Zitat von »yeli«


- Jetzt schalte ich mit nem HardwareKey direkt am MS den Port 3 an (so sollte jetzt der Port 3 an sein)
- wenn jetzt die nächste Sekunde abgelaufen ist, schreibt mein Programm den (noch vom Programmstart
bekannten AmpStatus (zur Erinnerung: da war Port3 noch aus)) zurück in den MS.
-> Ergebnis : Der Port 3 war bestenfalls mal für eine Sekunde an!

dann vermute ich eher, dass das auslesen des keypress kommandos fehlerhaft ist..

Zitat von »yeli«


Mein Programm soll ausschließlich die LED's bedienen. Die Amp-Ports werden per Hardware-Tasten direkt am MS bedient.

und das sollte eigtl so gehen, wie ich auf s.2 beschrieben habe, natürlich wenn du alle ampstatus dinger rauslässt.

messi

yeli

Junior Member

Re: Hilfe zur Scriptprogrammierung

Freitag, 13. Juli 2007, 12:54

Zitat von »messi«

wenn du den ledstatus veränderst wird der ampstatus nicht so wie er ist zurück ins ms geschrieben...
wenn du einmal den amp status setzt bleibt er solange im MS gesetzt, bis du ihn wieder änderst, das bedeutet also, wenn du ihn einmal an machst reicht das, danach musst du den nicht immer und immer wieder schreiben, wenn ich das von dir wenigstens richtig verstehe..


Schön wärs! aber ich hab ja gar keine Wahl als die gesamte Multiswitch-Struktur zurückzuschreiben. Diese Variable Data aus deinem Beispiel beinhaltet immer alle Daten. Ob ich jetzt Data.Ampstatus = xxx mache, oder nicht, der AmpStatus ist da immer mit drin. Und mit ... TransferTypeRegister.OUTPUT wird er auch in den Multiswitch übertragen. DAS ist das eigentliche Problem!

Zitat von »messi«

dann vermute ich eher, dass das auslesen des keypress kommandos fehlerhaft ist..


Ich lese das Ereigniss gar nicht aus, sonder hab beim MS eingestellt, dass die Hardwaretasten die Ausgänge direkt schalten.

Gruß
Yeli

Re: Hilfe zur Scriptprogrammierung

Freitag, 13. Juli 2007, 13:37

Zitat von »yeli«


Schön wärs! aber ich hab ja gar keine Wahl als die gesamte Multiswitch-Struktur zurückzuschreiben. Diese Variable Data aus deinem Beispiel beinhaltet immer alle Daten. Ob ich jetzt Data.Ampstatus = xxx mache, oder nicht, der AmpStatus ist da immer mit drin. Und mit ... TransferTypeRegister.OUTPUT wird er auch in den Multiswitch übertragen. DAS ist das eigentliche Problem!

bist du dir da sicher? bei meinem skript gen läufts ja auch eigtl richtig..

yeli

Junior Member

Re: Hilfe zur Scriptprogrammierung

Freitag, 13. Juli 2007, 15:11

Zitat von »messi«

bist du dir da sicher? bei meinem skript gen läufts ja auch eigtl richtig..


Ja, eigentlich bin ich mir da ziemlich sicher, da ich bereits mehrere Stunden mit diversen Varianten experimentiert hab.
Ich denke mal, mein klitzekleine Projekt ist ja nicht so kompliziert, und auch direkt dem SDK-Beispiel nachempfunden.

Du könntest ja deinen Scriptgen mal "NO-PWM" kompatibel machen. Falls du Zeit hast. Dann würde ich das gerne mal testen.

Gruß
Yeli

Re: Hilfe zur Scriptprogrammierung

Samstag, 21. Juli 2007, 21:01

BAHNHOF ;D

yeli

Junior Member

Re: Hilfe zur Scriptprogrammierung

Samstag, 21. Juli 2007, 21:21

Hallo,

@molelightn

ok, ich gebe zu, wir sind hier etwas(!) ins fachchinesisch abgedriftet. Aber deine Frage (falls es eine sein soll) ist dann doch etwas unkonkret. ;D
Was möchtest du denn wissen?

Gruß
Yeli

Re: Hilfe zur Scriptprogrammierung

Samstag, 21. Juli 2007, 21:41

und wieder zurück ausm urlaub :)

Zitat von »yeli«


Du könntest ja deinen Scriptgen mal "NO-PWM" kompatibel machen. Falls du Zeit hast. Dann würde ich das gerne mal testen.


steht auf jedenfall auf der todo liste.