inerhalb LOOP/ENDLOOP von SPS.SUB und Submit lauft?
Beiträge von panic mode
-
-
wie gesagt... KXR Dataien sind sprachabhaengig gennant:
*.pl.kxr (fuer Polish)
*.de.kxr (fuer Deutsch)
*.en.kxr (fuer English)
usw.
und befinden sich unter C:\KRC\TP\<Techpaketname>
Beispiel: English fuer DiagnoseSafety und UserTech
-
natuerlich nicht.. Aber da Koordinatensysteme Parallel sind, konversion von CM auf Flange ist einfach (mit "parallel axis theorem")
Ixx=Lxx+M(Y^2+Z^2)
Iyy=Lyy+M(X^2+Z^2)
Izz=Lzz+M(X^2+Y^2)
wo Lxx, Lyy,Lzz ist inertia um Schwerepunkt
Ixx,Iyy,Izz is inertia X,Y,Z offset (Flange)
X,Y,Z ist CM offset
M is masse
aber da CAD lastdaten bereits auf Flange bezogen ist, keine offset-umrechnung ist notig (mit offset, inertia ist gosser und werte sind bereits drin). mann muss aber ohne CM distanzen (bereits drin)
; Schwerpunkt bezogen:
LOAD_DATA[n].M=M
LOAD_DATA[n].J.X=Lxx
LOAD_DATA[n].J.Y=Lyy
LOAD_DATA[n].J.Z=Lzz
LOAD_DATA[n].CM.X=X
LOAD_DATA[n].CM.Y=Y
LOAD_DATA[n].CM.Z=Z
LOAD_DATA[n].CM.A=Rz
LOAD_DATA[n].CM.B=Ry
LOAD_DATA[n].CM.C=Rx
; Flange bezogen:
LOAD_DATA[n].M=M
LOAD_DATA[n].J.X=Ixx ;Lxx
LOAD_DATA[n].J.Y=Iyy ;Lyy
LOAD_DATA[n].J.Z=Izz ;Lzz
LOAD_DATA[n].CM.X=0 ;X
LOAD_DATA[n].CM.Y=0 ;Y
LOAD_DATA[n].CM.Z=0 ;Z
LOAD_DATA[n].CM.A=Rz
LOAD_DATA[n].CM.B=Ry
LOAD_DATA[n].CM.C=Rx
-
Bin für alle Anregungen und Ideen dankbar.
Alle Anregungen?
EKI
OPC
durch SPS E/A
Datai mit CWRITE auslesen
DirectoryLoader
Eigene Applikation entwickeln (KVP/KVP C4/C3Bridge)
RSI
SPI
Morse code
usw.
Was wäre eurer Meinung nach die einfachste und günstigste Lösung?
Datai mit CWRITE auslesen ist einfach und günstig da auf allen KRC4/KRC5 schon bei. und TXT/CSV Datai mit program (oder per hand) erstellen ist kein Problem.
-
Zeile 8, fehlt Anfuhrungzeichen am Ende. Also RawData ist nur 63 Character lang, nicht 850.
Zeile 9, nein, so geht es nicht... arrays mit einer Schleife kopieren - oder auch StrCopy() fuer CHAR arrays.
Zeile 11, nein, Zeichenkette ist in RawData[]
Code
Alles anzeigen; string laenge slen=STRLEN(RawData[])) ; maximal 80 if slen>80 then slen=80 endif ; Data kopieren/saubern/zaubern FOR i=1 to slen if RawData[i]=="," then src[i]=" " else src[i]=RawData[i] endif ENDFOR
oder liber so, da Queldata format mehrere Trennzeichen hat:
-
Gibt es eine Möglichkeit, LIST-Elemente mit SHOWVAR zu aktualisieren? Ziel ist es, einige benutzerdefinierte Inline-Formulare zu erstellen und eine benutzerfreundliche Werkzeug- und Basisauswahl zu ermöglichen. Liste sollte Namen statt Nummern zeigen - auch wenn Namen geändert wurden.
CodeDECL PARAM ToolList = {VALUE {LIST : ... }} SHOWVAR(FULLPATH[] "TOOL_NAME[,]", PARAM ToolList ) ;oder einzeln..? SHOWVAR(FULLPATH[] "TOOL_NAME[3,]", PARAM ToolList[3] ) SHOWVAR(FULLPATH[] "TOOL_NAME[3,]", PARAM ToolList.Item[3] ) SHOWVAR(FULLPATH[] "TOOL_NAME[3,]", PARAM ToolList.Item[3].Value ) SHOWVAR(FULLPATH[] "TOOL_NAME[3,]", PARAM ToolList.Item[3].Value[] )
-
example showed StatusKey using two scripts - to both set and reset output. programmer can control what is or isn't in those scripts. for example one could not change output state when StatusKey is released
it should be possible but exact robot position would need many outputs (6 axis * 32 bit/axis = 192 bits). it is recommended to read UserTech description about intended use.
reboot is not needed unless changes are in the menu (*.config file)
nobody knows what is inside the program that is not shared
-
Von wie vielen Robotern reden wir? kuka-Optionen kosten Geld und müssen an jedem Roboter installiert werden. Wenn die Maschinen bereits mit der SPS verbunden sind, warum nicht einfach mit der SPS kommunizieren?
-
leider im Vergleich mit SWRITE, SREAD ist verkrüppelt und funktioniert nicht mit irgendwelche Trennzeichen. deshalb zuerst mit einer Schleife alle Kommas durch Leerzeichen tauschen und dann mit SREAD bearbeiten
Code
Alles anzeigenDEF sread_test( ) decl state_t s decl int i, ofs, slen decl char fmt[20] decl char src[80] DECL REAL f1, f2, f3 ; input data in CSV format src[]="123.456,7.890,3.13" ; check actual string length slen=StrLen(src[]) ; replace commas with space since SREAD cannot use other delimiter for i=1 to slen if src[i]=="," then src[i]=" " endif endfor ; define format fmt[]="%f %f %f" ; parse source data ofs=0 SREAD( SRC[],s,ofs,fmt[],f1,f2,f3) ; observe result in variable monitor (f1-f3) halt END
-
Ich immer definire alles und setze wehn gebraucht. Es hilft eine Attrappe Taste definieren, die nicht aktiviert ist. Danach als Platzhalter verwendet werden um nicht benutzte tasten deaktivieren...
-
Ehrlich gesagt habe ich keine Lust, Code ohne Formatierung und Zeilennummern zu lesen ...
Der Code sollte in das Quellcode-Tag eingeschlossen werden:
Möglich mache ich mit kdfx Datei was falsch?
genau...
KeyBar ist definiert und Tasten zugewiesen, aber die Tasten 1-4 sind nicht definiert. alle abhängigen Objekte müssen definiert werden
Code<StatkeyBar Name="BeispielKeyBar"> <SK Name="Key1" Pos="1" /> <SK Name="Key2" Pos="2" /> <SK Name="Key3" Pos="3" /> <SK Name="Key4" Pos="4" /> </StatkeyBar>
Also jede Taste braucht sowas :
Code<StatKey Name="Key1" Style="#SWITCH" Next="" Enable="TRUE" UserMode=""> <Picture Default="C:\KRC\TP\UserTech\TEMPLATE\Bild1.ico" KeyDown="C:\KRC\TP\UserTech\TEMPLATE\Bild2.ico" KeyDownMinus="" /> <Text Top="" Center="" Bottom="Key1" /> <Needs SafetySwitch="TRUE" DrivesOk="TRUE" Prostate0="Free|Stop|Reset|End|Active" Prostate="Free|Stop|Reset|End" ModeOp="T1|T2" /> <Scripts OnKeyDown="Key1_Down" OnKeyUp="Key1_Up" OnKeyShow="" OnKeyDownMinus="" OnKeyUpMinus="" OnKeyRepeat="" OnKeyRepeatMinus="" /> </StatKey>
Dasselbe gilt für Skripte. jeder Aufruf benötigt eine Deklaration, und Taste ruft zwei Skripte
" <Scripts OnKeyDown="Key1_Down" OnKeyUp="Key1_Up" OnKeyShow="" OnKeyDownMinus="" OnKeyUpMinus="" OnKeyRepeat="" OnKeyRepeatMinus="" />"
Deshalb:
-
KRL Variablen mussen als Global deklariert sein.
KRL Variablen mussen in DAT als Global deklariert sein. Nur dann UserTech scripts koennen Zugrif auf solche Variablen haben.
in Buch steht:.
Variablen und Datenobjekte gelten lokal, d. h. in einer definierten Techno-
logie, wenn sie zwischen der Anweisung <Application> … </Application>
deklariert sind.
wieso müssen Global sein?
Nicht daselbe... Buch beschreibt UserTech Variablen und Objekten - nicht KRL Variablen...!
in KRL Ausgang ist zB $OUT[1]
Dass ist eine globale Variable.
UserTech had damit keine Probleme
-
um alle Eintraege ins Menu einbinden
BeispielAppXYZ.BeispielKeyBar
BeispielAppXYZ.GreiferKeyBar
BeispielAppXYZ.ZangeKeyBar
config Datai soll etwa so ausehen:
-
wie gesagt, XML syntax ist pingelig... struktur ist wichtig. achtung ist noetig bei vershactelung...
zB
und
verschachtelt
oder
oder
Code<KukaTechDescription> <Application> <Param>...</Param> <Param>...</Param> <Param>...</Param> <Param>...</Param> <InlineForm>...</InlineForm> <Set>...</Set> </Application> </KukaTechDescription>
usw.
Und wie gezeigt, Technologie (oder Application) kann mehrere Teile haben.
zB.
Code
Alles anzeigen<KukaTechDescription> <Application Name="BeispielAppXYZ"> <Param>...</Param> <Param>...</Param> <Param>...</Param> <Param>...</Param> <Script>...</Script> <Script>...</Script> <InlineForm>...</InlineForm> <InlineForm>...</InlineForm> <InlineForm>...</InlineForm> <StatkeyBar Name="BeispielKeyBar">...</StatkeyBar> <StatkeyBar Name="GreiferKeyBar>...</StatkeyBar> <StatkeyBar Name="ZangeKeyBar>...</StatkeyBar> <Set>...</Set> </Application> </KukaTechDescription>
was bereitstellt:
BeispielAppXYZ.BeispielKeyBar
BeispielAppXYZ.GreiferKeyBar
BeispielAppXYZ.ZangeKeyBar
und Menu soll entsprechend angepast, sonst gibts:
-
Dateien mussen aufeinander angepast sein.
XML syntax ist pingelig - alle Namen und Strukturen mussen stimmen... (Anfang un Ende)
KRL Variablen mussen als Global deklariert sein.
usw.
Was mache ich falsch?
Eine Menge:
Quellcode nicht in Quellcode block </>
Code nicht komplet, nur KFDX Teile
Falsche Syntax,
Dopplet deklarierte Applikation, usw.
zB.
"Fals" ist falsch, sollte "FALSE" sein
"<Scripts..." ist falsch, sollte "<Script ..." sein
Script soll nicht innerhalb Set definiert sein..
-
wehn menu fehlerhaft ist, rote notiz-fenster ist gezeigt (Unhandled Error), BOF startet nicht und muss runtergefahren (stuertzt ab).
wehn KFD/KFDX fehlerhaft ist, BOF startet aber fehlerhafte UserTech functionen sind nicht da und weitere Meldungen zu erwarten sind.
Beispiel:
-
Tipp:
Kaltstart ist nur bei Änderungen in CONFIG erforderlich.
KFD/KFDX Änderungen erfordern keinen Neustart:
Geändertes KFD (vor UserTech 4.x) kann nach UderTech-Neuinitialisierung schnell ausprobiert werden. (menu Configuration>Miscellaneous>Reinitialize UserTech)
Mit KFDX (UserTech4.x) gibt es so etwas nicht mehr und Änderungen sind meist sofort nutzbar.
Wenn sich Änderungen auf die KeyBar auswirken, sollte KeyBar einfach wieder ausgewählt werden...
(menu Sonfiguration>StausKeys>...)
-
genau...
KFD,KFDX und CONFIG sind alle nur text Dateien.
-
Neulich (KSS8.6 und KSS8.7) UserTech nutzt KFDX Dataien (XML Struktur). Vorher Dataien waren in KFD format. Wehn KFD zur Hand ist, aber KRC mit neuer KSS/UserTech betrieben ist, KFD-> KFDX konversion ist hilfreich. Aber Beispiel ist bereits als KFDX vorbereitet, keine Wandlung ist noetig.
Weil KFD/KFDX Dateien sehr wichtig sind, nichts passierts ohne passende menu Datai (*.config).
So, danke für Geduld . Aber gehen wir von Anfang an :
1. ich schreibe Programm in Note ++
2.dann kopiere ich Programm auf usb und dann auf Steuerung C-KRC/TP/userTech/Templete
3.steuerun konvert das .
dass gleiche mache ich mit die Bilder was ich haben will?
nein....
lese...
wehn es von Anfang gehts:
1. schreibe Program in Notepad++ . das kann entweder KFD order KFDX sein. KFDX ist nur auf KSS8.6/8.7 nutzbar (UserTech 4.x+).
2. kopiere KFD/KFDX samt Bilder auf KRC (C:\KRC\TP\UserTech\Template)
3. schreibe passende Menu Datei (*.config)
4. Menu Datai nach KRC uebertragen (C:\KRC\SmartHMI\)
5. KaltStart mit "dateien neulesen" (English: 'Reload Files')
6. status key bar anwaehlen (menu Configuration>Status Keys>Beispiel)
-
UserTech komt mit Program um KFD auf KFDX wandel. Also, alles gebraucht ist in Handbuch...
hab schnell ein Beispiel gebastelt aber nicht getested... solte etwa so ausehen und wahrscheinlich funzt.. viel Spass...
C:\KRC\SmartHMI\smarthmi.exe.Beispiel.config
XML
Alles anzeigen<?xml version="1.0"?> <configuration> <configSections> <section name="Ade.AdeComponentFramework.Components" type="Ade.Internal.ConfigurationSectionHandler, Ade.ComponentsImpl" allowExeDefinition="MachineToLocalUser" /> <section name="KukaRoboter.SmartHMI.Menu" type="Ade.Internal.ConfigurationSectionHandler, Ade.ComponentsImpl" allowExeDefinition="MachineToLocalUser" /> </configSections> <Ade.AdeComponentFramework.Components type="Ade.Components.ComponentReferenceConfiguration, Ade.Components"> <Component Type="KukaRoboter.UserTech.StatKeys.ViewModels.UserkeyBarRepository, KukaRoboter.UserTech.StatKeys" /> </Ade.AdeComponentFramework.Components> <KukaRoboter.SmartHMI.Menu type="KukaRoboter.SmartHMI.UIFramework.Menu.MenuRootImpl, SmartHMI"> <MenuRoot SystemName="MainMenu"> <MenuFolder SystemName="Config"> <MenuFolder SystemName="ConfigStatKeys"> <MenuItem DisplayName="Beispiel Tasten" MergeOrder="200"> <CommandCall Target="UserkeyBarManager.OpenUserkeyBar" Right="OperationTP"> <Argument Name="UserkeyBarRepository">KukaRoboter.UserTech.StatKeys.ViewModels.UserkeyBarRepository</Argument> <Argument Name="UserkeyBarID">Beispiel.BeispielKeyBar</Argument> </CommandCall> </MenuItem> </MenuFolder> </MenuFolder> </MenuRoot> </KukaRoboter.SmartHMI.Menu> </configuration>
C:\KRC\TP\UserTech\TEMPLATE\Beispiel.kfdx
XML
Alles anzeigen<?xml version="1.0" encoding="utf-8"?> <KukaTechDescription xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Application Name="Beispiel" SOT="TRUE" SOC="TRUE"> <StatKey Name="Key1" Style="#SWITCH" Next="" Enable="TRUE" UserMode=""> <Picture Default="C:\KRC\TP\UserTech\TEMPLATE\Bild1.ico" KeyDown="C:\KRC\TP\UserTech\TEMPLATE\Bild2.ico" KeyDownMinus="" /> <Text Top="" Center="" Bottom="Key1" /> <Needs SafetySwitch="TRUE" DrivesOk="TRUE" Prostate0="Free|Stop|Reset|End|Active" Prostate="Free|Stop|Reset|End" ModeOp="T1|T2" /> <Scripts OnKeyDown="Key1_Down" OnKeyUp="Key1_Up" OnKeyShow="" OnKeyDownMinus="" OnKeyUpMinus="" OnKeyRepeat="" OnKeyRepeatMinus="" /> </StatKey> <StatKey Name="Key2" Style="#SWITCH" Next="" Enable="TRUE" UserMode=""> <Picture Default="C:\KRC\TP\UserTech\TEMPLATE\Bild22.ico" KeyDown="C:\KRC\TP\UserTech\TEMPLATE\Bild21.ico" KeyDownMinus="" /> <Text Top="" Center="" Bottom="Key2" /> <Needs SafetySwitch="TRUE" DrivesOk="TRUE" Prostate0="Free|Stop|Reset|End|Active" Prostate="Free|Stop|Reset|End" ModeOp="T1|T2" /> <Scripts OnKeyDown="Key2_Down" OnKeyUp="Key2_Up" OnKeyShow="" OnKeyDownMinus="" OnKeyUpMinus="" OnKeyRepeat="" OnKeyRepeatMinus="" /> </StatKey> <StatKey Name="Key3" Style="#SWITCH" Next="" Enable="TRUE" UserMode=""> <Picture Default="C:\KRC\TP\UserTech\TEMPLATE\Bild31.ico" KeyDown="" KeyDownMinus="" /> <Text Top="" Center="" Bottom="Key3" /> <Needs SafetySwitch="TRUE" DrivesOk="TRUE" Prostate0="Free|Stop|Reset|End|Active" Prostate="Free|Stop|Reset|End" ModeOp="T1|T2" /> <Scripts OnKeyDown="Key3_Down" OnKeyUp="Key3_Up" OnKeyShow="" OnKeyDownMinus="" OnKeyUpMinus="" OnKeyRepeat="" OnKeyRepeatMinus="" /> </StatKey> <StatKey Name="Key4" Style="#SWITCH" Next="" Enable="TRUE" UserMode=""> <Picture Default="C:\KRC\TP\UserTech\TEMPLATE\Bild32.ico" KeyDown="" KeyDownMinus="" /> <Text Top="" Center="" Bottom="Key4" /> <<Needs SafetySwitch="TRUE" DrivesOk="TRUE" Prostate0="Free|Stop|Reset|End|Active" Prostate="Free|Stop|Reset|End" ModeOp="T1|T2" /> <Scripts OnKeyDown="Key4_Down" OnKeyUp="Key4_Up" OnKeyShow="" OnKeyDownMinus="" OnKeyUpMinus="" OnKeyRepeat="" OnKeyRepeatMinus="" /> </StatKey> <Script Name="Key1_Down"> < Message Text="Taste #1 gedrueckt..." /> <SetVar Fullpath="$OUT[1]" Value="TRUE" /> </Script> <Script Name="Key1_Up"> < Message Text="Taste #1 gelassen..." /> <SetVar Fullpath="$OUT[1]" Value="FALSE" /> </Script> <Script Name="Key2_Down"> <Message Text="Key2_Down" /> <SetVar Fullpath="$OUT[2]" Value="TRUE" /> </Script> <Script Name="Key2_Up"> <Message Text="Key2_Up" /> <SetVar Fullpath="$OUT[2]" Value="FALSE" /> </Script> <Script Name="Key3_Down"> <SetVar Fullpath="$OUT[3]" Value="TRUE" /> <Message Text="Key3_Down" /> </Script> <Script Name="Key3_Up"> <Message Text="Key3_Up" /> <SetVar Fullpath="$OUT[3]" Value="FALSE" /> </Script> <Script Name="Key4_Down"> <SetVar Fullpath="$OUT[4]" Value="TRUE" /> <Message Text="Key4_Down" /> </Script> <Script Name="Key4_Up"> <Message Text="Key4Up" /> <SetVar Fullpath="$OUT[4]" Value="FALSE" /> </Script> <StatkeyBar Name="BeispielKeyBar"> <SK Name="Key1" Pos="1" /> <SK Name="Key2" Pos="2" /> <SK Name="Key3" Pos="3" /> <SK Name="Key4" Pos="4" /> </StatkeyBar> <!-- <Set Name="BeispielKeyBar" Enable="TRUE" UserMode="" Style="" Next=""> <SK Name="Key1" Pos="1" /> <SK Name="Key2" Pos="2" /> <SK Name="Key3" Pos="3" /> <SK Name="Key4" Pos="4" /> </Set> --> </Application> </KukaTechDescription>