Aber das Include wird definitif aufgerufen. Hatte zum Test noch mal ne MSGBox eingebaut...
thx Chrischn
Aber das Include wird definitif aufgerufen. Hatte zum Test noch mal ne MSGBox eingebaut...
thx Chrischn
KLOTZ
"OCRArrayLevel2.au3"
$OCR[0][0] = 194
$OCR[0][1] = "a"
$OCR[1][0] = 281
$OCR[1][1] = "b"
$OCR[2][0] = 183
$OCR[2][1] = "c"
$OCR[3][0] = 240
$OCR[3][1] = "d"
$OCR[4][0] = 220
$OCR[4][1] = "e"
$OCR[5][0] = 167
$OCR[5][1] = "f"
$OCR[6][0] = 208
$OCR[6][1] = "g"
$OCR[7][0] = 204
$OCR[7][1] = "h"
$OCR[8][0] = 96
$OCR[8][1] = "i"
$OCR[9][0] = 121
$OCR[9][1] = "j"
$OCR[10][0] = 226
$OCR[10][1] = "k"
$OCR[11][0] = 122
$OCR[11][1] = "l"
$OCR[12][0] = 263
$OCR[12][1] = "m"
$OCR[13][0] = 271
$OCR[13][1] = "n"
$OCR[14][0] = 216
$OCR[14][1] = "o"
$OCR[15][0] = 202
$OCR[15][1] = "p"
$OCR[16][0] = 237
$OCR[16][1] = "q"
$OCR[17][0] = 248
$OCR[17][1] = "r"
$OCR[18][0] = 199
$OCR[18][1] = "s"
$OCR[19][0] = 130
$OCR[19][1] = "t"
$OCR[20][0] = 190
$OCR[20][1] = "u"
"Hauptscript.au3"
[autoit][/autoit][autoit][/autoit][autoit]Global $OCR[1000][2]
[/autoit][autoit][/autoit][autoit]While 1
Include(2)
Sleep(2000)
WEnd
Func Include($L)
If $L = 1 Then
#Include <OcrArrayLevel1.au3>
EndIf
If $L = 2 Then
#Include <OcrArrayLevel2.au3>
EndIf
_ArrayDisplay($OCR)
EndFunc
Problem: Verändere ich wärend das Script läuft die "OCRArrayLevel2.au3" , so wirkt sich das nicht auf das Script aus.( Keine Änderungen im ArrayDisplay.....
ja danke ,,, dad versteh ich wohl... aber ich kann die Ursache für mein Problem noch immer nicht finden...
werde gleich mal nen Klotz Skript posten...
reduziere doch einfach den aktualisierungsintervall von adlibenable auf 2 sek (zeit erhöhen)...
weil, wie schon gesagt, das script aus der AdLibENable nicht mehr rauskommt. Denn sobald die Funktion, die AdLibEnable aufruft zuende ist, sind die 100ms bereits wieder abgelaufen und AdlibEnable startet sofort wieder..
Es kommt also gar nicht mehr zum Hauptscript.
(Alles abhängig davon, was so im Temp alles rumliegt...)
hoffe, das war verständlich...
...keiner mehr ne idee??
Hi,
kannst du nicht den String suchen und dann diesen + die nächsten 10-20 Zeichen mitnehmen?
und danach eben die 10-Stellige(?) Art.Nr. rausfiltern....
Gruß
Chrischn
Hi, ich denke, das Problem ist:
Die Datei wird erstellt - es sind aber noch daten drin. Diese werden erst noch geschrieben.
Mach doch vor dem löschen einfach noch ein Sleep(1000) rein..
oder prüfe per processexists, ob das umwandeln abgeschlossen ist...
Gruß
Chrischn
ich mach´s genau andersrum:
Im Hauptskript wird deklariert und mit dem Array gearbeitet und im zu Includenen Skript werden die Werte zugewiesen.
ohh ja.. natürlich.. ist auch mit " $ "
.. ich kann also nur Func´s includen ???
dann ist´s aber komisch, dass es beim ersten Aufruf immer funktioniert...
? ? ?
Moin moin!
Hab ein Skript in dem ein 2D-Array deklariert wird.
Beisp.:
Global ABC[1000][2]
Per #include werden aus einem 2ten Skript die Werte in selbiges Array reingeschrieben.
Beisp.:
[autoit]
$ABC[0][0] = 123
$ABC[0][1] = "blablub"
$ABC[1][0] = 999
$ABC[1][1] = "werdasliestistdoof"
$ABC[2][0] = 232
$ABC[2][1] = "inhalt"
Nun wird letztere Datei gelegentlich erweitert und ein weiteres Mal #Include ´d.
Jedoch landen die Werte/Strings nicht im Array. ![]()
Ich habe zum Test auch bereits mal ne msgbox mit eingebaut - DIE wird ausgegeben...
Hat jemand ne Idee, warum das #Include nur 1x Vollständig passiert?
Moin moin!
Ich möchte eine .au3 datei mehrfach includen, weil sie aktualisiert wurde.
Aber ich habe das gefühl, dass dies nur 1 mal pro script-start passiert.
Das sollte doch eigentlich nur bei #Include-Once so sein...
Hat jemand ne idee, wie ich das lösen kann?
-> Problem gefunden -- >> Fehler war zwischen den Ohren -->> AutoIt hat alles so gemacht, wie´s sich gehört...
Ihr seid doch alle Muh-Kühe.. das war eines meiner ertsen ![]()
wollte nur zeigen, was ich tolles kann.
aber danke für den Hinweis...
Danke Jungs!
Das war mal informativ!
Gruß
der Almjodler
Hallo Leutz!
Ich möchte per Run(blablablub) ein weiteres Script starten und diesem gleich eine Variable mit auf den Weg geben.
Also quasi so, wie bei einem Funktionsaufruf....
Is it possible?
greets
Danke für die zahlreichen Hilfen ersmaaa!!!
Wie wende ich denn das $WM_COPYDATA an ???
kannste dazu ein Beispiel machen?
Danke für die zahlreichen Hilfen!!!
dad is mir ja wohl zu hoch ... ich mach morgen weiter... versuchs dann mit dem control dingsbums und dem wm_copy_blablub
Wäre NamedPipes eine Option?
Versuche mich da grad einzulesen und mache ein paar Tests.. aber das is nix für noobs...;-)
AutoItWinSetTitle
Das heisst, ich soll für den Benutzer sichtbar Daten in eine Editbox schreiben lassen?
Stelle ich mir sehr unansehnlich vor. Ausserdem muss das "Client"-Script dann immer nen GUICtrlRead machen...
Alles anzeigenDirekt kommunizieren können sie wahrscheinlich nicht.
Nur mit der Variante von Depreed.
Damit würde es funktionieren.
Aber ich frage mich, ob per FileWrite nicht doch schneller ist.
Wenn die Schleife unentwegt Daten schreibt, kannst du sie genau so schnell auslesen..
EDIT:
Kannst du die Skripte mal posten?
Ich bekomm die bestimmt in 1 zusammengebastelt
OK, gern. Du hast es ja nichtz anders gewollt:
Ist im Moment wegen dem Primärproblem noch 1 Script, aber die Func "ReadLPTPortPins" würde ich gern outsourcen.
#cs ----------------------------------------------------------------------------
[/autoit][autoit][/autoit][autoit]AutoIt Version: 3.3.0.0
Author: Christian Birkmann
Script Function: M&B TS4
#ce ----------------------------------------------------------------------------
[/autoit][autoit][/autoit][autoit]#Region Konstanten und Variablen
#include <Array.au3>
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
#RequireAdmin
Opt('MustDeclareVars', 1)
Global $RegSchluessel = "HKey_Local_Machine\Software\Schröder\TS4", $AktuelleMotorStellung = 0, $ReferenzierenAbgeschlossen = 0
Global $AktuellesMass = 0, $Zielmass = 0, $LaengstischOption, $AnzahlSchnitte, $Beschleunigung
Global $ParallelPort, $Pause, $PausenTaste
Global $ReferenzMass, $Gewindesteigung, $SchritteProUmdrehung, $AchsUmkehrSpiel, $Systempasswort ,$Laengstisch, $Slider, $AnzahlSchnitteInput
Global $AktuelleEndstufen, $SchnittAbstandInput, $SchnittBreiteInput, $StartPositionInput, $AktuellesMassLabel, $Fortschrittsbalken, $Status
Global $Start, $Referenzieren, $Grundeinstellungen_Aendern, $msg, $Speichern, $Regfehler, $GES, $RM, $GS, $SPU, $AUS, $SP, $Laufzeit, $Speed
Global $SchnitteAbsolviert, $SchnittAbstand, $SchnittAbstandInput, $SchnittBreite, $StartPosition, $BCD[2], $In[8],$del, $Exit,$MoveStart, $PP, $ParallelPort
Global $EndschalterLinks, $EndschalterRechts, $EndschalterOben, $EndschalterUnten, $EndschalterHinten, $EndschalterVorn, $Aus = "0xff4040", $An = "0x00FF00"
Global $Out0 = 0;MotorEndstufenkanal 1
Global $Out1 = 0;MotorEndstufenkanal 2
Global $Out2 = 0;Wippe Hoch
Global $Out3 = 0;Wippe Runter
Global $Out4 = 0;Tisch Nach Vorn
Global $Out5 = 0;Tisch Nach Hinten
Global $Out6 = 0;Hydraulik Ein
Global $Out7 = 0;Werkzeug Ein
Global $In0 ;Not-Aus
Global $In1 ;Endschalter Oben
Global $In2 ;Endschalter Unten
Global $In3 ;Endschalter Hinten
Global $In4 ;Endschalter Vorn
Global $In5 ;Endschalter Links
Global $In6 ;Endschalter Rechts
Global $In7 ;--frei--
Global $Dll = DLLOpen(@ScriptDir & "/inpout32.dll")
HotKeySet("{ESC}","_Exit")
HotKeySet("{PAUSE}", "Pause")
#EndRegion Konstanten und Variablen
#Region GUI
GUICreate("Meyer & Burger - TS4 Control-Center",1024,768,0,0,1)
GUISetState(@sw_show)
GUICtrlCreateGroup("Programmeinstellungen", 10, 10)
$Laengstisch = GUICtrlCreateCheckbox("Programm mit Längstisch",20,30)
GUICtrlCreateLabel("Vorschub Quertisch 1 - 100%",20,80)
$Slider = GUICtrlCreateSlider(20,100,150)
GUICtrlSetLimit($Slider, 100 , 1 )
GUICtrlSetData($Slider,100)
GUICtrlCreateGroup("Bearbeitungsdaten", 300, 10,200,300)
GUICtrlCreateLabel("Anzahl Schnitte",310,30)
$AnzahlSchnitteInput = GUICtrlCreateInput("1",310,50)
GUICtrlCreateLabel("Schnittabstand",310,80)
$SchnittAbstandInput = GUICtrlCreateInput("1",310,100)
GUICtrlCreateLabel("Schnittbreite",310,130)
$SchnittBreiteInput = GUICtrlCreateInput("1",310,150)
GUICtrlCreateLabel("Startposition",310,180)
$StartPositionInput = GUICtrlCreateInput("1",310,200)
$Start = GUICtrlCreateButton("Programm Start",300,320,200,50)
$PausenTaste = GUICtrlCreateButton("Programm Pause <Pause>",300,380,200,50)
GUICtrlCreateGroup("StatusDaten", 600,10,300,450)
GUICtrlCreateLabel("Aktuelles Maß Quertisch: ",610,30)
$AktuellesMassLabel = GUICtrlCreateLabel(Round($AktuellesMass,4)& " mm",750,30,100)
GUICtrlCreateLabel("Programmfortschritt",610,80)
$Fortschrittsbalken = GUICtrlCreateProgress(610,105,270,20)
$Status = GUICtrlCreateLabel("Grundeinstellungen werden geladen...",610,130,280,60)
GUICtrlCreateLabel("Endschalter Links",610,200)
$EndschalterLinks = GUICtrlCreateLabel(" ",750,200,15,15)
GUICtrlSetBkColor ($EndschalterLinks, 0xff4040 )
GUICtrlCreateLabel("Endschalter Rechts",610,230)
$EndschalterRechts = GUICtrlCreateLabel(" ",750,230,15,15)
GUICtrlSetBkColor ($EndschalterRechts, 0xff4040 )
GUICtrlCreateLabel("Endschalter Oben",610,260)
$EndschalterOben = GUICtrlCreateLabel(" ",750,260,15,15)
GUICtrlSetBkColor ($EndschalterOben, 0xff4040 )
GUICtrlCreateLabel("Endschalter Unten",610,290)
$EndschalterUnten = GUICtrlCreateLabel(" ",750,290,15,15)
GUICtrlSetBkColor ($EndschalterUnten, 0xff4040 )
GUICtrlCreateLabel("Endschalter Vorn",610,320)
$EndschalterVorn = GUICtrlCreateLabel(" ",750,320,15,15)
GUICtrlSetBkColor ($EndschalterVorn, 0xff4040 )
GUICtrlCreateLabel("Endschalter Hinten",610,350)
$EndschalterHinten = GUICtrlCreateLabel(" ",750,350,15,15)
GUICtrlSetBkColor ($EndschalterHinten, 0xff4040 )
$Exit = GUICtrlCreateButton("Maschine ausschalten <ESC>",50,590,200,20)
$Referenzieren = GUICtrlCreateButton("Referenzieren",50,620,200,20)
$Grundeinstellungen_Aendern = GUICtrlCreateButton("Grundeinstellungen ändern",50,650,200,20)
#EndRegion GUI
Grundeinstellungen_Lesen()
[/autoit][autoit][/autoit][autoit]Sleep(1000)
[/autoit][autoit][/autoit][autoit]#Region Hauptprogramm
While 1
GUICtrlSetData($Status,"Referenzpunkt nicht angefahren")
ReadLPTPortPins()
While 1
ReadLPTPortPins()
If $In0 = 0 Then ExitLoop ;Notaus
Sleep(10)
$msg = GUIGetMsg()
Select
Case $msg = $Grundeinstellungen_Aendern
If InputBox("Grundeinstellungen","Bitte Kennwort eingeben","","*") = $Systempasswort Then Grundeinstellungen_Aendern()
Case $msg = $Start
Start()
Case $msg = $Referenzieren
Referenzieren()
case $msg = $Exit
_Exit()
Case $msg = $PausenTaste
Pause()
EndSelect
WEnd
;Im Not-Aus-Fall - Alles abschalten und Meldung erzeugen
$Out2 = 0
$Out3 = 0
$Out4 = 0
$Out5 = 0
$Out6 = 0
$Out7 = 0
SetLPTPortPins()
GUICtrlSetData($Status,"Not-Aus durch Überwachungsrelais oder Bediener"& @lf &"Bitte Not-Aus aufheben und OK drücken")
MSGBox(16,"Fehler","Not-Aus durch Überwachungsrelais oder Bediener"& @lf &"Bitte Not-Aus aufheben und OK drücken")
Sleep(500)
WEnd
#EndRegion Hauptprogramm
Func Grundeinstellungen_Lesen()
$Regfehler = 0
$ParallelPort = RegRead($RegSchluessel,"ParallelPort")
If @error <>0 Then $Regfehler = 1
$ReferenzMass = RegRead($RegSchluessel,"Referenzmass")
If @error <>0 Then $Regfehler = 1
$Gewindesteigung = RegRead($RegSchluessel,"Gewindesteigung")
If @error <>0 Then $Regfehler = 1
$SchritteProUmdrehung = RegRead($RegSchluessel,"SchritteProUmdrehung")
If @error <>0 Then $Regfehler = 1
$AchsUmkehrSpiel = RegRead($RegSchluessel,"AchsUmkehrSpiel")
If @error <>0 Then $Regfehler = 1
$Systempasswort = RegRead($RegSchluessel,"Systempasswort")
If @error <>0 Then $Regfehler = 1
;If $Regfehler = 0 Then MSGBox(0,"Bestätigung","Einstellungen gelesen",3)
If $Regfehler = 1 Then MSGBox(16,"System-Fehler","Fehler beim Lesen aus Windows Registrierung-DB")
EndFunc
Func Grundeinstellungen_Aendern()
$GES = GUICtrlCreateGroup("Grundeinstellungen",10,250,250,250)
GUICtrlCreateLabel("Par.-Port-Adresse.:",20,290,150)
$PP = GUICtrlCreateInput($ParallelPort,150,290,80)
GUICtrlCreateLabel("Ref.-Mass:",20,320,150)
$RM = GUICtrlCreateInput($ReferenzMass,150,320,80)
GUICtrlCreateLabel("Gewindesteigung:",20,350,150)
$GS = GUICtrlCreateInput($Gewindesteigung,150,350,80)
GUICtrlCreateLabel("Schritte pro Umdrehung:",20,380,150)
$SPU = GUICtrlCreateInput($SchritteProUmdrehung,150,380,80)
GUICtrlCreateLabel("Achsumkehrspiel",20,410,150)
$AUS = GUICtrlCreateInput($AchsUmkehrSpiel,150,410,80)
GUICtrlCreateLabel("Systempasswort",20,440,150)
$SP = GUICtrlCreateInput($Systempasswort,150,440,80)
$Speichern = GUICtrlCreateButton("Einstellungen speichern",20,470,230)
While 1
Sleep(10)
$msg = GUIGetMsg()
Select
Case $msg = $Speichern
Grundeinstellungen_Speichern()
ExitLoop
Case $msg = $Grundeinstellungen_Aendern Or $msg = $Start Or $msg = $Referenzieren
MSGBox(0,"Fehler","Bitte erst Speichern",3)
EndSelect
WEnd
EndFunc
Func Grundeinstellungen_Speichern()
$Regfehler = 0
$ParallelPort = GUICtrlRead($PP)
If @error <>0 Then $Regfehler = 1
$ReferenzMass = GUICtrlRead($RM)
If @error <>0 Then $Regfehler = 1
$Gewindesteigung = GUICtrlRead($GS)
If @error <>0 Then $Regfehler = 1
$SchritteProUmdrehung = GUICtrlRead($SPU)
If @error <>0 Then $Regfehler = 1
$AchsUmkehrSpiel = GUICtrlRead($AUS)
If @error <>0 Then $Regfehler = 1
$Systempasswort = GUICtrlRead($SP)
If @error <>0 Then $Regfehler = 1
RegWrite($RegSchluessel,"ParallelPort","REG_SZ",$ParallelPort)
If @error <>0 Then $Regfehler = 1
RegWrite($RegSchluessel,"Referenzmass","REG_SZ",$Referenzmass)
If @error <>0 Then $Regfehler = 1
RegWrite($RegSchluessel,"Gewindesteigung","REG_SZ",$Gewindesteigung)
If @error <>0 Then $Regfehler = 1
RegWrite($RegSchluessel,"SchritteProUmdrehung","REG_SZ",$SchritteProUmdrehung)
If @error <>0 Then $Regfehler = 1
RegWrite($RegSchluessel,"AchsUmkehrSpiel","REG_SZ",$AchsUmkehrSpiel)
If @error <>0 Then $Regfehler = 1
RegWrite($RegSchluessel,"Systempasswort","REG_SZ",$Systempasswort)
If @error <>0 Then $Regfehler = 1
If $Regfehler = 0 Then
$del = $GES
Do ;Group Grundeinstellungen wieder entfernen
GUICtrlDelete($del)
$del = $del + 1
Until $del = $Speichern+1
MSGBox(0,"Bestätigung","Einstellungen gespeichert",3)
EndIf
If $Regfehler = 1 Then MSGBox(16,"System-Fehler","Fehler beim Schreiben in Windows Registrierung-DB")
EndFunc
[/autoit][autoit][/autoit][autoit]Func Start()
If Not $ReferenzierenAbgeschlossen Then
MSGBox(16,"Fehler","Referenzpunkt nicht angefahren!")
Else
$Laufzeit = TimerInit()
GUICtrlSetData($Fortschrittsbalken,0)
$Speed = GUICtrlRead($Slider)
$LaengstischOption = GUICtrlRead($Laengstisch)
$AnzahlSchnitte = GUICtrlRead($AnzahlSchnitteInput)
$SchnitteAbsolviert = 0
$SchnittAbstand = GUICtrlRead($SchnittAbstandInput)
$SchnittBreite = GUICtrlRead($SchnittBreiteInput)
$StartPosition = GUICtrlRead($StartPositionInput)
GUICtrlSetData($Status,"Startposition wird angefahren...")
If $StartPosition < $AktuellesMass Then
FahreNachLinks($StartPosition)
Else
FahreNachRechts($StartPosition)
EndIf
Do
If $In0 = 0 Then ExitLoop ;Notaus
GUICtrlSetData($Status,"Bearbeite Schnitt " & " " & $SchnitteAbsolviert + 1 & " " & "von" & " " & $AnzahlSchnitte & "...")
$Out7 = 1 ;Werkzeug Ein
SetLPTPortPins()
Do
If $In0 = 0 Then ExitLoop ;Notaus
$Out2 = 1 ;Wippe Hoch 1
SetLPTPortPins()
Sleep(500)
ReadLPTPortPins()
Until $In1 = 1 ;Endschalter Oben
If $LaengstischOption = 1 Then
Do
If $In0 = 0 Then ExitLoop ;Notaus
$Out2 = 0 ;Wippe Hoch 0
$Out4 = 1 ;Tisch Nach Vorn 1
SetLPTPortPins()
Sleep(500)
ReadLPTPortPins()
Until $In4 = 1 ;Endschalter Vorn
EndIf
Do
If $In0 = 0 Then ExitLoop ;Notaus
$Out4 = 0 ;Tisch Nach Vorn 0
$Out3 = 1 ;Wippe Runter 1
SetLPTPortPins()
Sleep(500)
Until $In2 = 1 ;Endschalter Unten
If $LaengstischOption = 1 Then
Do
If $In0 = 0 Then ExitLoop ;Notaus
$Out3 = 0 ;Wippe Runter 0
$Out5 = 1 ;Tisch Nach Hinten 1
SetLPTPortPins()
Sleep(500)
Until $In3 = 1 ;Endschalter Hinten
EndIf
Do
If $In0 = 0 Then ExitLoop ;Notaus
$Out5 = 0 ;Tisch Nach Hinten 0
$Out2 = 1 ;Wippe Hoch 1
SetLPTPortPins()
Sleep(500)
ReadLPTPortPins()
Until $In1 = 1 ;Endschalter Oben
$StartPosition = $StartPosition + $Schnittabstand + $SchnittBreite
$SchnitteAbsolviert = $SchnitteAbsolviert + 1
If $SchnitteAbsolviert < $AnzahlSchnitte Then FahreNachRechts($StartPosition)
GUICtrlSetData($Fortschrittsbalken,($SchnitteAbsolviert/$AnzahlSchnitte*100))
If $In0 = 0 Then ExitLoop ;Notaus
Until $SchnitteAbsolviert = $AnzahlSchnitte
$Laufzeit = TimerDiff($Laufzeit)
GUICtrlSetData($Status,"Bearbeitung abgeschlossen!"& @lf & $AnzahlSchnitte & " Schnitte" &" in " & Round($Laufzeit/1000/60,0) & " Minuten" )
$Out2 = 0
$Out3 = 0
$Out4 = 0
$Out5 = 0
$Out6 = 0
$Out7 = 0
SetLPTPortPins()
EndIf
EndFunc
Func FahreNachLinks($Zielmass)
$MoveStart = $AktuellesMass
Do
ReadLPTPortPins()
If $In0 = 0 Then ExitLoop ;Notaus
MotorDrehenLinks()
If $Zielmass - $AktuellesMass < 1 Then $Beschleunigung = 3 / ($Zielmass-$AktuellesMass)
If $AktuellesMass - $MoveStart < 1 Then $Beschleunigung = 3 / ($Zielmass-$AktuellesMass)
If $Beschleunigung < 3 Then $Beschleunigung = 5
If $Beschleunigung > 200 Then $Beschleunigung = 100
Sleep($Beschleunigung)
Until $AktuellesMass <= $Zielmass - $AchsUmkehrSpiel/2
EndFunc
Func FahreNachRechts($Zielmass)
$MoveStart = $AktuellesMass
Do
ReadLPTPortPins()
If $In0 = 0 Then ExitLoop;Notaus
MotorDrehenRechts()
If $Zielmass - $AktuellesMass < 1 Then $Beschleunigung = 3 / ($Zielmass-$AktuellesMass)
If $AktuellesMass - $MoveStart < 1 Then $Beschleunigung = 3 / ($Zielmass-$AktuellesMass)
If $Beschleunigung < 3 Then $Beschleunigung = 5
If $Beschleunigung > 200 Then $Beschleunigung = 100
Sleep($Beschleunigung)
Until $AktuellesMass >= $Zielmass + $AchsUmkehrSpiel/2
EndFunc
Func MotorDrehenLinks()
$AktuelleMotorStellung = $AktuelleMotorStellung - 1
If $AktuelleMotorStellung <=0 Then $AktuelleMotorStellung = $SchritteProUmdrehung
$AktuellesMass = $AktuellesMass-($Gewindesteigung*(1/$SchritteProUmdrehung))
$AktuelleEndstufen = $AktuelleEndstufen -1
If $AktuelleEndstufen < 1 Then $AktuelleEndstufen = 4
Select
Case $AktuelleEndstufen = 1
$Out0 = 0
$Out1 = 0
Case $AktuelleEndstufen = 2
$Out0 = 1
$Out1 = 0
Case $AktuelleEndstufen = 3
$Out0 = 1
$Out1 = 1
Case $AktuelleEndstufen = 4
$Out0 = 0
$Out1 = 1
EndSelect
SetLPTPortPins()
GUICtrlSetData($AktuellesMassLabel,Round($AktuellesMass,4)& " mm")
EndFunc
Func MotorDrehenRechts()
$AktuelleMotorStellung = $AktuelleMotorStellung + 1
If $AktuelleMotorStellung >$SchritteProUmdrehung Then $AktuelleMotorStellung = 1
$AktuellesMass = $AktuellesMass+($Gewindesteigung*(1/$SchritteProUmdrehung))
$AktuelleEndstufen = $AktuelleEndstufen +1
If $AktuelleEndstufen > 4 Then $AktuelleEndstufen = 1
Select
Case $AktuelleEndstufen = 1
$Out0 = 0
$Out1 = 0
Case $AktuelleEndstufen = 2
$Out0 = 1
$Out1 = 0
Case $AktuelleEndstufen = 3
$Out0 = 1
$Out1 = 1
Case $AktuelleEndstufen = 4
$Out0 = 0
$Out1 = 1
EndSelect
SetLPTPortPins()
GUICtrlSetData($AktuellesMassLabel,Round($AktuellesMass,4)& " mm")
EndFunc
Func Referenzieren()
GUICtrlSetData($Status,"Referenzpunkt wird angefahren...")
While $In5=0 ;Endschalter Links
If $In0 = 0 Then ExitLoop ;Notaus
ReadLPTPortPins()
MotorDrehenLinks()
Sleep(50)
WEnd
While $In5=1 ;Endschalter Links
If $In0 = 0 Then ExitLoop ;Notaus
ReadLPTPortPins()
MotorDrehenRechts()
Sleep(50)
WEnd
While $In5=0 ;Endschalter Links
If $In0 = 0 Then ExitLoop ;Notaus
ReadLPTPortPins()
MotorDrehenLinks()
Sleep(50)
$AktuellesMass = $ReferenzMass
$ReferenzierenAbgeschlossen = 1
GUICtrlSetData($Status,"Referenzieren abgeschlossen!" & @lf & "Bereit zur Bearbeitung")
WEnd
If $In0=1 Then
$AktuellesMass = $ReferenzMass
$ReferenzierenAbgeschlossen = 1
GUICtrlSetData($Status,"Referenzieren abgeschlossen!" & @lf & "Bereit zur Bearbeitung")
EndIf
EndFunc
Func SetLPTPortPins()
;Convert bits to BCD
$BCD = 0
If $Out0 = 1 Then $BCD = $BCD + 1
If $Out1 = 1 Then $BCD = $BCD + 2
If $Out2 = 1 Then $BCD = $BCD + 4
If $Out3 = 1 Then $BCD = $BCD + 8
If $Out4 = 1 Then $BCD = $BCD + 16
If $Out5 = 1 Then $BCD = $BCD + 32
If $Out6 = 1 Then $BCD = $BCD + 64
If $Out7 = 1 Then $BCD = $BCD + 128
;pass the call to inpout32.dll
DllCall( $DLL, "int", "Out32", "int", $ParallelPort, "int", $BCD)
EndFunc
Func ReadLPTPortPins()
$BCD = DllCall( $DLL, "short", "Inp32", "short", $ParallelPort)
$In = _DezToBin($BCD[0])
$In0 = $In[0]
$In1 = $In[1]
$In2 = $In[2]
$In3 = $In[3]
$In4 = $In[4]
$In5 = $In[5]
$In6 = $In[6]
$In7 = $In[7]
If $In1 = 0 Then GUICtrlSetBkColor ($EndschalterOben, $Aus )
If $In1 = 1 Then GUICtrlSetBkColor ($EndschalterOben, $An )
If $In2 = 0 Then GUICtrlSetBkColor ($EndschalterUnten, $Aus )
If $In2 = 1 Then GUICtrlSetBkColor ($EndschalterUnten, $An )
If $In3 = 0 Then GUICtrlSetBkColor ($EndschalterHinten, $Aus )
If $In3 = 1 Then GUICtrlSetBkColor ($EndschalterHinten, $An )
If $In4 = 0 Then GUICtrlSetBkColor ($EndschalterVorn, $Aus )
If $In4 = 1 Then GUICtrlSetBkColor ($EndschalterVorn, $An )
If $In5 = 0 Then GUICtrlSetBkColor ($EndschalterLinks, $Aus )
If $In5 = 1 Then GUICtrlSetBkColor ($EndschalterLinks, $An )
If $In6 = 0 Then GUICtrlSetBkColor ($EndschalterRechts, $Aus )
If $In6 = 1 Then GUICtrlSetBkColor ($EndschalterRechts, $An )
;ToolTip($In[0]&$In[1]&$In[2]&$In[3]&$In[4]&$In[5]&$In[6]&$In[7])
;Überbrückungen
;$In0 = 1 ;Notaus
;$In1 = 1 ;Endschalter Oben
;$In2 = 1 ;Endschalter Unten
;$In3 = 1 ;Endschalter Hinten
;$In4 = 1 ;Endschalter Vorn
;$In5 = 1 ;Endschalter Links
;$In6 = 1 ;Endschalter Rechts
;$In7 = 1
EndFunc
Func _DezToBin($query)
DIM $return_array[8]
If $query - 128 > -1 Then
$return_array[7] = 1
$query = $query - 128
Else
$return_array[7] = 0
EndIf
If $query - 64 > -1 Then
$return_array[6] = 1
$query = $query - 64
Else
$return_array[6] = 0
EndIf
If $query - 32 > -1 Then
$return_array[5] = 1
$query = $query - 32
Else
$return_array[5] = 0
EndIf
If $query- 16 > -1 Then
$return_array[4] = 1
$query = $query - 16
Else
$return_array[4] = 0
EndIf
If $query - 8 > -1 Then
$return_array[3] = 1
$query = $query - 8
Else
$return_array[3]=0
EndIf
If $query - 4 > -1 Then
$return_array[2] = 1
$query = $query - 4
Else
$return_array[2] = 0
EndIf
If $query - 2 > -1 Then
$return_array[1] = 1
$query = $query - 2
Else
$return_array[1] = 0
EndIf
If $query - 1 > -1 Then
$return_array[0] = 1
$query = $query - 1
Else
$return_array[0] = 0
EndIf
Return $return_array
EndFunc
Func _Exit()
DllClose($DLL)
If MsgBox(4,"Programm wird geschlossen","Soll der Rechner heruntergefahren werden?",10) = 6 Then Run('shutdown -s -t 5 -c "Maschine wird ausgeschaltet"')
Exit
EndFunc
Func Pause()
$Pause = NOT $Pause
While $Pause
sleep(100)
WEnd
ToolTip("")
EndFunc
Lies mal das: http://www.codeproject.com/KB/vb/PortAccess.aspx?msg=2233623
Du kannst aber nur die 8 Pins aus dem Datenregister und die 4 Pins aus dem Control Register verwenden. Die 5 aus dem Status Register kannst du nicht schalten, sondern nur auslesen. (Hab ich jedenfalls so verstanden)
Wenn dein Datenreigster die Adresse 0x378 hat, müsste das Controlregister die Adresse 0x27A sein.
I thank you soo much!!!
Das war denke ich 100% die Antwort auf meine Fragen..
Danke!!