B&R Tastendrücke

Hannes

Level-1
Beiträge
67
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich möchte mit einem PP41 die Tasten über TCPIP virtuell drücken. Dazu habe ich den Speicher gescannt und auch schon die Stelle gefunden, wo die Tastendrücke gespeichert werden. Auch eine andere Stelle im Speicher hab ich entdeckt, wo bei einem Tastendruck um +6 hinaufgezählt wird und beim Loslassen ebenfalls wieder um 6 hinaufgezählt wird.
Ich kann das aber leider mit einem C- Programm auf der SPS nicht simulieren, bzw. ich kann dem Speicherbereich nicht 6 hinzuzählen.

Hat damit vielleicht jemand erfahrung oder eine Idee und wie kann ich bei der B&R Steuerung direkt auf den Speicherbereich zugreifen - der dereferenzierer * wird ja, so weit ich weiß, nicht unterstützt.

Vielen DANK und lg
Hannes
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Warum legst du die Tasten nicht auf Merker und veroderst das ganze???
Dem kann ich nur zustimmen.
Bei einem PP41 (das soweit ich weiß ja noch mit VC SG3 programmiert wird) ist es möglich, das gesamte Tastenabbild auf eine Datenstruktur (USINT []) abzulegen. Die genaue Belegung des Arrays findest Du übrigens in der AS-Hilfe.

Anschließend wäre es am einfachsten, die Abfrage der Tasten im SPS-Programm auf dieses Array umzuändern; zusätzlich definierst Du Merker, welche Du über TCPIP (ich schätze mal eine Visu oder eine Simulation) beschreibst. Anschließend verknüpfst Du die Signalöe mit ODER.

ch möchte mit einem PP41 die Tasten über TCPIP virtuell drücken. Dazu habe ich den Speicher gescannt und auch schon die Stelle gefunden, wo die Tastendrücke gespeichert werden. Auch eine andere Stelle im Speicher hab ich entdeckt, wo bei einem Tastendruck um +6 hinaufgezählt wird und beim Loslassen ebenfalls wieder um 6 hinaufgezählt wird.
Ich kann das aber leider mit einem C- Programm auf der SPS nicht simulieren, bzw. ich kann dem Speicherbereich nicht 6 hinzuzählen.

Hat damit vielleicht jemand erfahrung oder eine Idee und wie kann ich bei der B&R Steuerung direkt auf den Speicherbereich zugreifen - der dereferenzierer * wird ja, so weit ich weiß, nicht unterstützt.
Also zuallererst musst Du wissen, welcher Datentyp da hinaufgezählt wird (INT/UINT/DINT/UDINT). Anschließend definierst Du im C-Task eine dynamische Variable (Zeiger) vom selben Typ und verbindest diesen mit der echten Variable (weiß nicht wie das in C geht - verwende nur Automation Basic). Über die Zeigervariable solltest Du den Wert nun beliebig verändern können.

mfg
Maxl

PS: alternativ kannst mir auch einen Prog-Ausschnitt senden, und ich seh mir das an.
 
Hallo,

Wie kann ich das machen, dass ich die ganzen Tasten in einer Struktur ablege und wo steht die genaue Belegung in der Hilfe? ISt es mit dieser Struktur möglich, dass ich eben eine Variable dieser Struktur auf 1 setze und dadurch sich eben auf dem Display was ändert. Wird durch das Verändern der Strukturvariable auch der dazugehörige Eintrag in der Keymatrix, welche ich in der Visualisierung angehängt habe, auf 1 gesetzt oder wie könnte ich das ausprobieren?
Das mit dem Merker ist mir auch nicht ganz klar, Wie kann ich den Oder- Verknüpfen bzw. mit was oder- Verknüpfen (mit der Key- Matrix)?.
Ich weiß - Fragen über Fragen aber ich würde das dringend benötigen.
Vielleicht könnt Ihr mir noch ein paar Tipps geben.
Vielen herzlichen DANK für EURE Antworten!!!

lg
Hannes
 
Es gibt da die Visapi-Bibliothek, und in dieser gibt es die Funktion VA_GetKeyMatix und damit kannst du die Matrix auslesen.

Lies dir doch einfach mal die Hilfe durch, die is bei B&R wirklich besser als bei vielen anderen Herstellern. Dort sind alle Bibliotheksfunktionen beschrieben.

MFG

Markus
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Ja das hab ich schon gelesen nur mir ist nicht ganz klar, wie ich dann eine Variable so setzt, sodass es die gleiche Auswirkung hat, als ob ich direkt auf dem PP41 eine Taste drücke? VA_GetKeyMatrix liefert ja nur zurück, welche Taste auf dem Target gedrückt ist, oder?
Könntest du mir da noch einen Tip geben
 
Du nimmst einfach die Daten die dir die Funktion zurückgibt, und veroderst sie mit daten die du über das Ethernet oder von der Steuerung empfängst und gibst sie wieder auf Datenpunkte die du mit deiner Visualisierung verknüpfst. Du kannst doch im VC sagen, ob du eine aktion von einer Taste abhängig machen willst, oder von einem Datenpunkt.

MFG

Markus
 
Wie kann ich das in VC einstellen -> Datenpunkt oder Taste?
Dann kann ich aber die SPS nicht mehr direkt mit den Tasten steuern, wenn ich Datenpunkt einstelle, oder? Ich würde nämlich beides benötigen.

lg und vielen DANK!!

Hannes
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Man braucht doch keine Visapi für die Tasten.

Wenn man das Panel im Hardwarebaum markiert, erscheinen rechts die Parameter mit Startbild usw.

Dort gibt es auch ein Feld mit Tastaturabbild oder so übertragen. Dort die USINT[] eintragen (vorher im AS deklarieren)

Die Bit´s laufen von oben links nach unten rechts, also F1 ist 0, die F2 ist 1 usw.

Gruß, pt
 
Ja das ist mir alles klar aber was ich benötige ist nochmal folgendes:

Ich habe mir ein VNC in C++ Programmiert mit einem Bild vom PP41, wenn ich jetzt auf eine Taste in meinem VNC drücke, dann sende ich über TCPIP eine Zahl (z.B. 2 für 2 Taste gedrückt -> also auf dem PP41 F3) und diese Taste soll am realen PP41 auch solange auf 1 gesetzt sein bis ich die Maus auf dem VNC wieder auslasse.
Also ich würd was brauchen auf der SPS, mit welchem ich in den Speicher z.B. eine 1 schreibe, damit ich einen Tastendruck simuliere.
Ich hoffe es ist jetzt verständlicher.
Vielen DANK!! für Eure Antworten und Anregungen!!

lg
Hannes
 
Ich habe mit VNc noch nichts gemacht, aber auch das wird ja auf eine Varialbe kommen.

Dann kannst du doch im Programm die 2 Var verodern.

Code:
IF Panel_Taste_F3 OR (VNC_Wert=2) THEN
inc(Wert)
ENDIF

Direkt auf die Taste würde ich nicht schreiben.

Code:
IF edgepos((VNC_Wert=2)) THEN
Panel_Taste_F3 = TRUE
ELSEIF edgeneg((VNC_Wert=2)) THEN
Panel_Taste_F3 = FALSE
ENDIF

Das ist aber eine Doppelzuweisung und würde ich nur im allergrößten Notfall so probieren, ich weiß auch nicht, wann das Tastenabbild gelesen wird, also das letzte könnte auch sehr Prozessunsicher sein.

pt
 
Und was ist Panel_Taste3 -> um das würds mir gehen, ist das die KeyMatrix, welche ich an im VC übertrage?

lg und vielen DANK

Hannes

Ja, du deklarierst ein Feld USINT[], Größe kann ich im Augenblick nicht sagen, im AS. In den VC kannst du dieses dann wie oben beschrieben auswählen, glaube wenn du auf dem VC-Parameterbild bist, F1 und dort steht das Format des Feldes.

Dann läufts.

pt
 
Ja aber ich kann nur die Funktionstasten direkt über eine Variable ansprechen und setzen, bei den anderen Tasten ist es nicht möglich, eine Variable anzuhängen, und wenn ich eine KeyMatrix übertrage und dort einen Eintrag ändere tut sich überhaupt nichts.
Vielleicht kanns tdu mir da noch einen Tip geben!1

Vielen DANK auf jeden Fall für Eure Mühe!!

lg
Hannes
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja aber ich kann nur die Funktionstasten direkt über eine Variable ansprechen und setzen, bei den anderen Tasten ist es nicht möglich, eine Variable anzuhängen, und wenn ich eine KeyMatrix übertrage und dort einen Eintrag ändere tut sich überhaupt nichts.
Vielleicht kanns tdu mir da noch einen Tip geben!1

Vielen DANK auf jeden Fall für Eure Mühe!!

lg
Hannes

Was heißt das? Von wo nach wo und wo wird geändert?

pt
 
Ich möchte eben eine Variable setzen (den Zustand bekomme ich über TCPIP) und dann ändert sich am Display was. Ich kann beim PP41 direkt im VC bei den Funktionstasten mit der rechten Maustaste eine Varibale anhängen,
GENAU das würd ich auch bei den anderen Tasten des PP41 brauchen.

Das PP41 hat 40 Tasten. Überträgt man dieses USINT- Array und drückt eine oder mehrere Tasten, so sind die entsprechenden Einträge 1.
Ich würd genau das umgekehrte brauchen.
Ich setzte im Speicher einen Speicherbereich auf 1 und in der Keymatrix, welche ich übertragen habe, erscheint eine 1 je nach dem, welches Bit im Speicherbereich ich gesetzt habe.
Genau das ist emin Problem, ich kann im Speicherbereich das Bit setzen aber es tut sich nichts -> weder am Display noch in der übertragenen Keymatrix!!

Vielen herzlichen Dank
lg
Hannes
 
:!: Jetzt weiß ich was du meinst :rolleyes:

Das geht nicht. Macht auch keinen Sinn. Mit der F3 zählst du Variable xy hoch. Die muss doch auch im Programm zu finden sein, oder bin ich auf dem Holzweg?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Doch,

ich brauch F3 nicht unbedingt im Programm, ich müsste die Tasten nur im Speicher irgendwie setzen können.
Ich hab jetzt herausgefunden, das es zwei Speicherbereiche gibt, wo sich etwas tut, wenn ich eine Taste drücke, wahrscheinlich ist das gedrücktAlt und gedrücktNeu oder sowas.
Vielleicht hat ja noch jemand eine Idee wie ich das realisieren könnte.

lg
Hannes
 
re:

Hallo Hannes,

also was der da_kine schreibt ist schon sehr gut. Den Funktionstasten weisst Du ja eh variablen zu, und in Deiner Software fragst Du ab auf:
effekt := pp41_taste oder tcpip_taste; Einfacher gehts kaum.

Zu Maxl:
Genau das mit dem array ist auch sehr gut. Einfach alle variablen die Du von VisualComponents zuweisst mit dem array verbinden. F1 = array[0], F2 = array[2], u.s.w. und in Deiner Software das gleiche mit TCPIP data. Ein einfacher Loop uber das ganze und schon ist die Suppe klar.

Aehem Maxl, warum arbeitest Du nicht schon lange bei uns? ;-)

Gruss,
Mike
 
Zurück
Oben