software doet raar na toevoegen programma selectie.

Goedendag,

Ik heb de volgende software zelfstandig werkend.
Nu wil ik met portb.6 selectie maken tussen 2 programmas om uit te voeren.

Echter onderstaand wilt niet lukken de pic gaat rare dingen uitvoeren.


'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : Alwin Winius                                      *
'*  Notice  : Copyright (c) 2011 Wetronic NL                    *
'*          : All Rights Reserved                               *
'*  Date    : 8-11-2011                                         *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
Device 16F690                ;We gebruiken een 16F628A type
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, MCLRE_OFF, CP_OFF, CPD_OFF, BOR_OFF, IESO_OFF, FCMEN_OFF

All_Digital TRUE              ;Alle ingangen digitaal
         ;76543210
ADCON0 = %00000000
ANSEL =  %00000000
ANSELH = %00000000
WPUA =   %00000000
IOCA =   %00000000

        ;76543210
TRISA = %00000111
TRISB = %01010000
TRISC = %00000111

Dim Status1 As Byte
Dim Status2 As Byte
Dim Status3 As Byte
Dim Status4 As Byte
Dim Status5 As Byte
Dim Status6 As Byte
Dim Status7 As Byte
Dim Status8 As Byte
Dim Status9 As Byte
Dim Status10 As Byte

Dim Vertraging1 As Byte


Status1 = 0
Status2 = 0
Status3 = 0
Status4 = 0
Status5 = 0
Status6 = 0
Status7 = 0
Status8 = 0
Status9 = 0
Status10 = 0

Vertraging1 = 50


While 1 = 1
;/////////////////////////PROGRAM MAIN//////////////////////////////////////////
Programmain:
    If PORTB.6 = 1 Then
        GoTo Programladen
    Else
        GoTo Programlossen
    EndIf
    
    


;/////////////////////////PROGRAM LADEN/////////////////////////////////////////
Programladen:

  ;Inladen pallets
  
  If PORTA.0 = 1 And PORTA.2 = 0 Then        ;Inladen starten
    Low PORTA.4
    DelayMS Vertraging1
    Status3 = 0   
       
  ;stoppen pallets bij rust positie na eerste lading.
  ElseIf PORTA.1 = 1 And Status1 = 0 Then    ;inladen stoppen bij rust positie
    High PORTA.4
    DelayMS Vertraging1
    Status1 = 1
    
  ;stoppen pallets nadat 1 pallet reeds geladen is.
  ElseIf PORTA.1 = 0 And Status1 = 1 And Status2 = 0 Then
    Status2 = 1
    DelayMS Vertraging1
  
  ElseIf PORTA.1 = 1 And Status2 = 1 Then
    Status2 = 0
    Status3 = Status3 + 1
    DelayMS Vertraging1
  
  ElseIf Status3 = 3 Then
    High PORTA.4
    Status3 = 0
    DelayMS Vertraging1
    
  ;stoppen lopende band bij band vol
  ElseIf PORTA.2 = 1 Then
    High PORTA.4
    DelayMS Vertraging1
  EndIf  
  
  ;Inladen pallets
  
  If PORTC.0 = 1 And PORTC.2 = 0 Then        ;Inladen starten
    Low PORTC.4
    DelayMS Vertraging1
    Status6 = 0   
       
  ;stoppen pallets bij rust positie na eerste lading.
  ElseIf PORTC.1 = 1 And Status4 = 0 Then    ;inladen stoppen bij rust positie
    High PORTC.4
    DelayMS Vertraging1
    Status4 = 1
    
  ;stoppen pallets nadat 1 pallet reeds geladen is.
  ElseIf PORTC.1 = 0 And Status4 = 1 And Status5 = 0 Then
    Status2 = 1
    DelayMS Vertraging1
  
  ElseIf PORTC.1 = 1 And Status5 = 1 Then
    Status5 = 0
    Status6 = Status6 + 1
    DelayMS Vertraging1
  
  ElseIf Status6 = 3 Then
    High PORTC.4
    Status6 = 0
    DelayMS Vertraging1
    
  ;stoppen lopende band bij band vol
  ElseIf PORTC.2 = 1 Then
    High PORTC.4
    DelayMS Vertraging1
  EndIf  

  If PORTB.6 = 0 Then
    GoTo Programlossen
  EndIf


;////////////////////////PROGRAM LOSSEN/////////////////////////////////////////


Programlossen:

If PORTA.0 = 0 And Status7 = 0 Then
  Low PORTA.5
  Status7 = 1
  DelayMS Vertraging1
  
ElseIf PORTA.0 = 1 And Status7 = 1 Then
  Status7 = 0
  Status8 = Status8 + 1
  DelayMS Vertraging1
  
ElseIf Status8 = 2 Then
  High PORTA.5
  DelayMS Vertraging1
  Status8 = 0
  
EndIf

If PORTC.0 = 0 And Status9 = 0 Then
  Low PORTC.5
  Status9 = 1
  DelayMS Vertraging1
  
ElseIf PORTC.0 = 1 And Status9 = 1 Then
  Status9 = 0
  Status10 = Status10 + 1
  DelayMS Vertraging1
  
ElseIf Status10 = 2 Then
  High PORTC.5
  DelayMS Vertraging1
  Status10 = 0
  
EndIf

If PORTB.6 = 1 Then
    GoTo Programladen
EndIf
  
 
Wend                           ;Einde programma

"De PIC gaat rare dingen uitvoeren" is nogal cryptisch.. WAT doet 'ie?
Test desnoods met hier en daar wat codedelen uit te commentarieren.
Er staan ook wat nuttelozen dingen in:


  If PORTB.6 = 0 Then
    GoTo Programlossen
  EndIf

kun je weglaten want heeft geen nut...

euhm ???
welke PIC is het nu?

Device 16F690                ;We gebruiken een 16F628A type

Op 15 januari 2012 18:36:58 schreef Meerweten:
euhm ???
welke PIC is het nu?

Device 16F690                ;We gebruiken een 16F628A type

16f690 idd vergeten commentaar aan te passen.

Op 15 januari 2012 18:34:33 schreef Arco:
"De PIC gaat rare dingen uitvoeren" is nogal cryptisch.. WAT doet 'ie?
Test desnoods met hier en daar wat codedelen uit te commentarieren.
Er staan ook wat nuttelozen dingen in:


  If PORTB.6 = 0 Then
    GoTo Programlossen
  EndIf

kun je weglaten want heeft geen nut...

hij voert het programma lossen uit. echter de sensoren welke die daarvoor gebruikt worden door mekaar heen gemixt. En zijn niet meer zoals het was toen het programma los gebruikt werd.

Als ik die regel weg laat dan blijft die toch altijd in die loop zitten?

Beiden programma's los hieronder werken zelfstandig.


 ;Programma laden
  If PORTA.0 = 1 And PORTA.2 = 0 Then        ;Inladen starten
    Low PORTA.4
    DelayMS Vertraging1
    Status3 = 0   
       
  ;stoppen pallets bij rust positie na eerste lading.
  ElseIf PORTA.1 = 1 And Status1 = 0 Then    ;inladen stoppen bij rust positie
    High PORTA.4
    DelayMS Vertraging1
    Status1 = 1
    
  ;stoppen pallets nadat 1 pallet reeds geladen is.
  ElseIf PORTA.1 = 0 And Status1 = 1 And Status2 = 0 Then
    Status2 = 1
    DelayMS Vertraging1
  
  ElseIf PORTA.1 = 1 And Status2 = 1 Then
    Status2 = 0
    Status3 = Status3 + 1
    DelayMS Vertraging1
  
  ElseIf Status3 = 3 Then
    High PORTA.4
    Status3 = 0
    DelayMS Vertraging1
    
  ;stoppen lopende band bij band vol
  ElseIf PORTA.2 = 1 Then
    High PORTA.4
    DelayMS Vertraging1
  EndIf  
  
  ;Inladen pallets
  
  If PORTC.0 = 1 And PORTC.2 = 0 Then        ;Inladen starten
    Low PORTC.4
    DelayMS Vertraging1
    Status6 = 0   
       
  ;stoppen pallets bij rust positie na eerste lading.
  ElseIf PORTC.1 = 1 And Status4 = 0 Then    ;inladen stoppen bij rust positie
    High PORTC.4
    DelayMS Vertraging1
    Status4 = 1
    
  ;stoppen pallets nadat 1 pallet reeds geladen is.
  ElseIf PORTC.1 = 0 And Status4 = 1 And Status5 = 0 Then
    Status2 = 1
    DelayMS Vertraging1
  
  ElseIf PORTC.1 = 1 And Status5 = 1 Then
    Status5 = 0
    Status6 = Status6 + 1
    DelayMS Vertraging1
  
  ElseIf Status6 = 3 Then
    High PORTC.4
    Status6 = 0
    DelayMS Vertraging1
    
  ;stoppen lopende band bij band vol
  ElseIf PORTC.2 = 1 Then
    High PORTC.4
    DelayMS Vertraging1
  EndIf 
 
   ;Programma Lossen
   If PORTA.0 = 0 And Status7 = 0 Then
      Low PORTA.5
      Status7 = 1
      DelayMS Vertraging1
      
    ElseIf PORTA.0 = 1 And Status7 = 1 Then
      Status7 = 0
      Status8 = Status8 + 1
      DelayMS Vertraging1
      
    ElseIf Status8 = 2 Then
      High PORTA.5
      DelayMS Vertraging1
      Status8 = 0
      
    EndIf
    
    If PORTC.0 = 0 And Status9 = 0 Then
      Low PORTC.5
      Status9 = 1
      DelayMS Vertraging1
      
    ElseIf PORTC.0 = 1 And Status9 = 1 Then
      Status9 = 0
      Status10 = Status10 + 1
      DelayMS Vertraging1
      
    ElseIf Status10 = 2 Then
      High PORTC.5
      DelayMS Vertraging1
      Status10 = 0
      
    EndIf

[Bericht gewijzigd door Henry S. op (86%)]

Als de routine laden wordt uitgevoerd, dan wordt lossen dat ook altijd, is dat de bedoeling?
Dit wordt ALTIJD uitgevoerd:


 If PORTB.6 = 0 Then
    GoTo Programlossen
  EndIf

;////////////////////////PROGRAM LOSSEN/////////////////////////////////////////

Programlossen:

[Bericht gewijzigd door Arco op (53%)]

Heb het programma wat aangepast.
Heb het met x if getracht op te lossen.
Zodat die het programma daaronder alleen uitvoert als de voorwaarde waar is. maar desondanks maakt de software er dan een zooitje van.

Hieronder een foto van het project welke ik voor een clublid aan het programmeren ben. Helaas nog niet mijn sterkste bezigheid.

http://asfaltrockers.nl/album_mod/upload/4768.jpg

Er zitten in totaal 6 schakelaars in het systeem *zijn 2 lopende banden met elk 3 schakelaars.

De kanaal portb.6 is met pull up aangesloten zodat die altijd 1 is behalve als ik hem aan ground trek. Het programma if portb.6 = 1 uitvoert is het standaard programma.

De onderste code heb ik zo gemaakt dat die iets alleen mag uitvoeren als het waar is. Je zou verwachten dat die dan gewoon het programma uitvoert daaronder. Echter waar het vermoedelijk misgaat is de loop die hij maakt in de software om te zorgen dat de band blijft draaien.


While 1 = 1


;/////////////////////////PROGRAM LADEN/////////////////////////////////////////
If PORTB.6 = 1 Then
  ;Inladen pallets
  
  If PORTA.0 = 1 And PORTA.2 = 0 Then        ;Inladen starten
    Low PORTA.4
    DelayMS Vertraging1
    Status3 = 0   
       
  ;stoppen pallets bij rust positie na eerste lading.
  ElseIf PORTA.1 = 1 And Status1 = 0 Then    ;inladen stoppen bij rust positie
    High PORTA.4
    DelayMS Vertraging1
    Status1 = 1
    
  ;stoppen pallets nadat 1 pallet reeds geladen is.
  ElseIf PORTA.1 = 0 And Status1 = 1 And Status2 = 0 Then
    Status2 = 1
    DelayMS Vertraging1
  
  ElseIf PORTA.1 = 1 And Status2 = 1 Then
    Status2 = 0
    Status3 = Status3 + 1
    DelayMS Vertraging1
  
  ElseIf Status3 = 3 Then
    High PORTA.4
    Status3 = 0
    DelayMS Vertraging1
    
  ;stoppen lopende band bij band vol
  ElseIf PORTA.2 = 1 Then
    High PORTA.4
    DelayMS Vertraging1
  EndIf  
  
  ;Inladen pallets
  
  If PORTC.0 = 1 And PORTC.2 = 0 Then        ;Inladen starten
    Low PORTC.4
    DelayMS Vertraging1
    Status6 = 0   
       
  ;stoppen pallets bij rust positie na eerste lading.
  ElseIf PORTC.1 = 1 And Status4 = 0 Then    ;inladen stoppen bij rust positie
    High PORTC.4
    DelayMS Vertraging1
    Status4 = 1
    
  ;stoppen pallets nadat 1 pallet reeds geladen is.
  ElseIf PORTC.1 = 0 And Status4 = 1 And Status5 = 0 Then
    Status2 = 1
    DelayMS Vertraging1
  
  ElseIf PORTC.1 = 1 And Status5 = 1 Then
    Status5 = 0
    Status6 = Status6 + 1
    DelayMS Vertraging1
  
  ElseIf Status6 = 3 Then
    High PORTC.4
    Status6 = 0
    DelayMS Vertraging1
    
  ;stoppen lopende band bij band vol
  ElseIf PORTC.2 = 1 Then
    High PORTC.4
    DelayMS Vertraging1
  EndIf  
EndIf


;////////////////////////PROGRAM LOSSEN/////////////////////////////////////////
If PORTB.6 = 0 Then

    If PORTA.0 = 0 And Status7 = 0 Then
      Low PORTA.5
      Status7 = 1
      DelayMS Vertraging1
      
    ElseIf PORTA.0 = 1 And Status7 = 1 Then
      Status7 = 0
      Status8 = Status8 + 1
      DelayMS Vertraging1
      
    ElseIf Status8 = 2 Then
      High PORTA.5
      DelayMS Vertraging1
      Status8 = 0
      
    EndIf
    
    If PORTC.0 = 0 And Status9 = 0 Then
      Low PORTC.5
      Status9 = 1
      DelayMS Vertraging1
      
    ElseIf PORTC.0 = 1 And Status9 = 1 Then
      Status9 = 0
      Status10 = Status10 + 1
      DelayMS Vertraging1
      
    ElseIf Status10 = 2 Then
      High PORTC.5
      DelayMS Vertraging1
      Status10 = 0
      
    EndIf
EndIf
  
 
Wend                           ;Einde programma

[Bericht gewijzigd door veenie op (69%)]

Ik denk dat het al een stuk overzichtelijker wordt als je de portpinnen en registers wat zinvolle namen geeft. Namen als Status1...Status10 maakt 't niet echt duidelijk. Als je bijv. Portb6 "switch_standaard" noemt o.i.d. dan is alles veel overzichtelijker...

hoi arco,

Ik snap dat het dat wat overzichtelijker maakt. Die statussen gebruik ik om dat ik soms pulsen moet negeren van de sensoren.

Ik zoek een manier zodat ik echt duidelijk tussen beide programma's kan schakelen. Als dat lukt is alles opgelost.

Beiden programma's los doen prima wat ze moeten doen. Alleen als ik ze samen zet en laat uitvoeren wanneer een bepaalde voorwaarde actief is dan gaat alles door elkaar heen. Daar loop ik tegen aan in dit geval.

Het komt er in feite op neer dat die dus niet het hele programma overslaat maar een deel ervan uitvoerd. Of dat die het programma niet als een lus behandeld wat die normaal wel doet.

Zonder je hele lap code door te spitten:
Gebruik je toevallig een bepaalde variabele in beide programma's, welke je vergeet opnieuw te initialiseren?

Op 15 januari 2012 19:33:18 schreef Tommyboy:
Zonder je hele lap code door te spitten:
Gebruik je toevallig een bepaalde variabele in beide programma's, welke je vergeet opnieuw te initialiseren?

Er wordt geen variabele dubbel gebruikt.
ik zal is zien of ik de code duidelijker kan maken.

veenie, Ik zie een lap code, en dat werkt volgens de specificatie van de programmeertaal. Omdat je komt klagen dat het niet werkt, vermoed ik dat het niet doet wat JIJ wil. Maar ik heb snel door de thread gescrolled, maar ik kan geen stukje vinden waarin je in gewone taal uitlegt wat het had moeten doen.

Dus: Als een programma niet doet wat het moet doen, probeer eens in gewone taal uit te leggen wat het moet doen....
(Het kan zijn dat het kwartje dan al valt, zonder dat je het op CO hoeft te posten.... ).

Hoi rew.

Ik zal mijn best doen. de code opzich los zoals ik hierboven in 2 stukken heb geschreven doet wat het moet doen.

Eerst de hardware: 3 sensoren per band (zal zo even uit de software opzoeken welke sensor wat is)
-Sensor voorin
-Sensor Rust positie
-Sensor vol

Programma inladen:
Een pallet wordt op de lopende band gezet.
Sensor voorin wordt hierdoor bediend.
Deze geeft de opdracht om de band te laten draaien.
Zodra sensor rust positie bediend wordt stopt de band met draaien.(na de eerste pallet worden hierin altijd 2 pulsen overgeslagen zodat elke pallet in dezelfde positie stopt)
En zo gaat dit proces door totdat de band vol geladen is.

Programma uitladen:
In feite het omgekeerde van programma inladen.
Als sensor voorin niet bediend is en sensor rust positie wel dan wordt de band geactiveerd totdat de sensor voorin wel bediend wordt hier wordt 1 puls genegeerd zodat die helemaal voor aan de rand komt.
Zodra sensor rust positie niet bediend is dan gaat de band niet meer draaien.

Er zitten 2 banden in de laadvloer van deze schaal vrachtwagen.
Beiden banden werken onafhankelijk maar het programma laden / inladen is altijd gelijk op beide banden.

Wat ik nu dus wil is dat zodra ik een signaal geef op Portb.6 dat die wisselt tussen het programma laden en het programma lossen.

Echter blijkt dat die dan de sensoren door mekaar heen gooit en lijkt beiden programmas uit te voeren.

]ik ben in de achtergrond nog druk bezig geweest en wel een stuk verder gekomen maar blijf tegen vreemd gedrag aanlopen.

Zodra ik de programmer (icd2) los koppel dan wordt de pic instabiel. (ik ga nog een elco bijplaatsen op de pic zelf 100nf zit er al.

Er gebeuren dan allemaal vreemde dingen. (voert programma half uit, reageert niet of amper op schakelaars).

Het programma zelf heb ik deels herschreven en voert nu 95% uit van wat ik zou willen. Het switchen van programma laden naar lossen gaat prima. Echter als ik terug wil schakelen dan blijft die gewoon in het programma lossen hangen. Echter gaan de schakelaars random acties triggeren. Zelfs schakelaars die niet voorkomen in programma lossen worden uitgevoerd.

Heb alle functies binnen het programma beschreven met commentaar.


'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : Alwin Winius                                      *
'*  Notice  : Copyright (c)                     *
'*          : All Rights Reserved                               *
'*  Date    : 8-11-2011                                         *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
Device 16F690                ;We gebruiken een 16F628A type
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, MCLRE_OFF, CP_OFF, CPD_OFF, BOR_OFF, IESO_OFF, FCMEN_OFF

All_Digital TRUE              ;Alle ingangen digitaal
         ;76543210
ADCON0 = %00000000
ANSEL =  %00000000
ANSELH = %00000000
WPUA =   %00000000
IOCA =   %00000000

        ;76543210
TRISA = %00000111
TRISB = %01010000
TRISC = %00000111

Dim Status1 As Byte
Dim Status2 As Byte
Dim Status3 As Byte
Dim Status4 As Byte
Dim Status5 As Byte
Dim Status6 As Byte
Dim Status7 As Byte
Dim Status8 As Byte
Dim Status9 As Byte
Dim Status10 As Byte

Dim Vertraging1 As Byte
Vertraging1 = 50

Symbol Pallet_detectie1 = PORTA.0
Symbol Pallet_rust1     = PORTA.1
Symbol Pallet_vol1      = PORTA.2
Symbol Inladen1         = PORTA.4
Symbol Uitladen1        = PORTA.5

Symbol Pallet_detectie2 = PORTC.0
Symbol Pallet_rust2     = PORTC.1
Symbol Pallet_vol2      = PORTC.2
Symbol Inladen2         = PORTC.4
Symbol Uitladen2        = PORTC.5

Symbol Programswitch    = PORTB.6




While 1 = 1
;/////////////////////////PROGRAM MAIN//////////////////////////////////////////
Program_main:

    If Programswitch = 1 Then                                         ;Als programmaswitch hoog is da programma laden uitvoeren. (pull up weerstand)
        GoTo Program_laden
    EndIf
    
    If Programswitch = 0 Then                                         ;Als programmaswitch laag is dan programma lossen uitvoeren. (gebruikerinput)
        GoTo Program_lossen
    EndIf

;/////////////////////////PROGRAM LADEN BAND 1//////////////////////////////////
Program_laden:


    Status1 = 0
    Status2 = 0
    Status3 = 0
    Status4 = 0
    Status5 = 0
    Status6 = 0  

If Programswitch = 0 Then                                             ;Kijken of voorwaarde nog steeds actief is.
    GoTo Program_main                                                 ;Indien voorwaarde veranderd is programma sluiten en terug naar programma lossen
EndIf
  
  Repeat
  If Pallet_detectie1 = 1 And Pallet_vol1 = 0 Then                    ;Inladen pallets starten
    Low Inladen1
    DelayMS Vertraging1
    Status3 = 0   
       
  ElseIf Pallet_rust1 = 1 And Status1 = 0 Then                        ;stoppen pallets bij rust positie eerste pallet. (1 puls)
    High Inladen1
    DelayMS Vertraging1
    Status1 = 1
    
  ElseIf Pallet_rust1 = 0 And Status1 = 1 And Status2 = 0 Then        ;puls 1 registreren.
    Status2 = 1
    DelayMS Vertraging1
  
  ElseIf Pallet_rust1 = 1 And Status2 = 1 Then                        ;puls 2 registreren.
    Status2 = 0
    Status3 = Status3 + 1
    DelayMS Vertraging1
  
  ElseIf Status3 = 3 Then                                             ;stoppen pallets nadat 1 pallet reeds geladen is. (3 pulsen)
    High Inladen1
    Status3 = 0
    DelayMS Vertraging1
    
  ElseIf Pallet_vol1 = 1 Then                                         ;stoppen lopende band bij band vol
    High Inladen1
    DelayMS Vertraging1
  EndIf  
  


;/////////////////////////PROGRAM LADEN BAND 1//////////////////////////////////  
  If Pallet_detectie2 = 1 And Pallet_vol2 = 0 Then                  ;Inladen starten
    Low Inladen2
    DelayMS Vertraging1
    Status6 = 0   
       
  
  ElseIf Pallet_rust2 = 1 And Status4 = 0 Then                      ;stoppen pallets bij rust positie eerste lading. (1 puls)   
    High Inladen2
    DelayMS Vertraging1
    Status4 = 1
    
  ElseIf Pallet_rust2 = 0 And Status4 = 1 And Status5 = 0 Then      ;puls 1 registrerem
    Status2 = 1
    DelayMS Vertraging1
  
  ElseIf Pallet_rust2 = 1 And Status5 = 1 Then                      ;Puls 2 registreren
    Status5 = 0
    Status6 = Status6 + 1
    DelayMS Vertraging1
  
  ElseIf Status6 = 3 Then                                           ;stoppen pallets nadat 1 pallet reeds geladen is. (3 pulsen)
    High Inladen2
    Status6 = 0
    DelayMS Vertraging1
    
  ElseIf Pallet_vol2 = 1 Then                                       ;stoppen lopende band bij band vol
    High Inladen2
    DelayMS Vertraging1
  EndIf  
Until Programswitch = 0                                             ;Programma uitvoeren tot programswitch is veranderd


;////////////////////////PROGRAM LOSSEN/////////////////////////////////////////
Program_lossen:


    Status7 = 0
    Status8 = 0
    Status9 = 0
    Status10 = 0

If PORTB.6 = 1 Then                                                 ;Kijken of voorwaarde nog steeds actief is.
    GoTo Program_main                                               ;Indien voorwaarde veranderd is programma afsluiten en terug naar laden
EndIf

Repeat

If Pallet_detectie1 = 0 And Status7 = 0 Then                        ;Pallets uitladen band starten.
  Low Uitladen1
  Status7 = 1
  DelayMS Vertraging1
  
ElseIf Pallet_detectie1 = 1 And Status7 = 1 Then                    ;1ste puls registeren
  Status7 = 0
  Status8 = Status8 + 1
  DelayMS Vertraging1
  
ElseIf Status8 = 2 Then                                             ;2de puls uitladen stoppen
  High Uitladen1
  DelayMS Vertraging1
  Status8 = 0
  
EndIf

If Pallet_detectie2 = 0 And Status9 = 0 Then                        ;pallets uitladen, band starten.
  Low Uitladen2
  Status9 = 1
  DelayMS Vertraging1
  
ElseIf Pallet_detectie2 = 1 And Status9 = 1 Then                    ;1ste puls registeren
  Status9 = 0
  Status10 = Status10 + 1
  DelayMS Vertraging1
  
ElseIf Status10 = 2 Then                                            ;2de puls uitladen stoppen
  High Uitladen2
  DelayMS Vertraging1
  Status10 = 0
  
EndIf

Until Programswitch = 1                                             ;Programma uitvoeren totdat programmaswitch veranderd.   

Wend                                                                ;Einde programma

End

Je gebruikt wel een latched switch op portb.6 ?

Ik zou om te beginnen de while-wend lus beperken tot het keuze menu.
Vandaaruit roep je dan met een gosub de laden / lossen routine aan.
Routines afsluiten met Return.

While 1 = 1
Program_main:
If Programswitch = 1 Then GoSUB Program_laden
EndIf
If Programswitch = 0 Then GoSUB Program_lossen
EndIf
WEND

Daarmee zorg je ervoor dat je programma altijd weer in de keuze terugkomt en dus op de juiste plaats aan de sub routines begint.

while / wend had ik zelf reeds aangepast maar maakt helaas geen verschil.

de switch die ik gebruik is een draadje dat met pull up is vastgemaakt aan de pin. en ik dus alleen naar gnd toe trek handmatig. Later gaat dit met een module gebeuren maar is een harde GND.

standaard is de switch dus altijd 1.

ik zie dat jij GoSUB gebruikt, ik gebruik GOTO ik weet niet of dit verschil invloed heeft op iets?

Heb je wel 'echte' pull-ups aan de pinnen?
(De interne pull-ups zijn meestal te zwak voor betrouwbaar schakelen)

Het grote voordeel is dat je aan het einde van je routine altijd weer terug komt waar je begonnen bent.
Zonder teveel naar je code te kijken zou ik zeggen dat je met het lusje zoals ik 'm voorstelde de orgineel werkende routines zou moeten kunnen uitvoeren als je een return aan het eind van de routines toevoegd.

Op 26 januari 2012 13:15:51 schreef Arco:
Heb je wel 'echte' pull-ups aan de pinnen?
(De interne pull-ups zijn meestal te zwak voor betrouwbaar schakelen)

ik heb 1k pull up weerstanden gemonteerd aan de 5V.

Op 26 januari 2012 14:01:29 schreef A vd Linden:
Het grote voordeel is dat je aan het einde van je routine altijd weer terug komt waar je begonnen bent.
Zonder teveel naar je code te kijken zou ik zeggen dat je met het lusje zoals ik 'm voorstelde de orgineel werkende routines zou moeten kunnen uitvoeren als je een return aan het eind van de routines toevoegd.

hoi a vd linden.

Ik had gisteravond zelf de while 1 = 1 en wend al verhuist naar binnen de routine program_main. Echter blijft de pic hangen zodra ik programswitch los koppel (pull up weerstand komt dan in dus poort wordt high).

Echter raakt de pic in een soort loop en voert niets meer uit. Of voert hele vage commando's uit. De vol schakelaar wordt de detectie_schakelaar. De rust schakelaar wordt buitenspel gezet.

Hij gaat dan een eigen leven lijden.
Ergens gaat er wat mis, de vraag is echter wat? Naar mijn idee zou de programma code moeten werken maar kennelijk zie ik iets over het hoofd.

EDIT: even de laatste stand van zaken in de software:

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : Alwin Winius                                      *
'*  Notice  : Copyright (c)                     *
'*          : All Rights Reserved                               *
'*  Date    : 8-11-2011                                         *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
Device 16F690                ;We gebruiken een 16F628A type
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, MCLRE_OFF, CP_OFF, CPD_OFF, BOR_OFF, IESO_OFF, FCMEN_OFF

All_Digital TRUE              ;Alle ingangen digitaal
         ;76543210
ADCON0 = %00000000
ANSEL =  %00000000
ANSELH = %00000000
WPUA =   %00000000
IOCA =   %00000000

        ;76543210
TRISA = %00000111
TRISB = %01010000
TRISC = %00000111

Dim Status1 As Byte
Dim Status2 As Byte
Dim Status3 As Byte
Dim Status4 As Byte
Dim Status5 As Byte
Dim Status6 As Byte
Dim Status7 As Byte
Dim Status8 As Byte
Dim Status9 As Byte
Dim Status10 As Byte

Dim Vertraging1 As Byte
Vertraging1 = 50

Symbol Pallet_detectie1 = PORTA.0
Symbol Pallet_rust1     = PORTA.1
Symbol Pallet_vol1      = PORTA.2
Symbol Inladen1         = PORTA.4
Symbol Uitladen1        = PORTA.5

Symbol Pallet_detectie2 = PORTC.0
Symbol Pallet_rust2     = PORTC.1
Symbol Pallet_vol2      = PORTC.2
Symbol Inladen2         = PORTC.4
Symbol Uitladen2        = PORTC.5

Symbol Programswitch    = PORTB.6





;/////////////////////////PROGRAM MAIN//////////////////////////////////////////
Program_main:

While 1 = 1  
    High Inladen1
    High Inladen2
    High Uitladen1
    High Uitladen1

    
    DelayMS 500
      
    If Programswitch = 1 Then                                         ;Als programmaswitch hoog is da programma laden uitvoeren. (pull up weerstand)
        GoTo Program_laden
    EndIf
    
    If Programswitch = 0 Then                                         ;Als programmaswitch laag is dan programma lossen uitvoeren. (gebruikerinput)
        GoTo Program_lossen
    EndIf
Wend
;/////////////////////////PROGRAM LADEN BAND 1//////////////////////////////////
Program_laden:


    Status1 = 0
    Status2 = 0
    Status3 = 0
    Status4 = 0
    Status5 = 0
    Status6 = 0  

If Programswitch = 0 Then                                             ;Kijken of voorwaarde nog steeds actief is.
    GoTo Program_main                                                 ;Indien voorwaarde veranderd is programma sluiten en terug naar programma lossen
EndIf
  
  Repeat
  If Pallet_detectie1 = 1 And Pallet_vol1 = 0 Then                    ;Inladen pallets starten
    Low Inladen1
    DelayMS Vertraging1
    Status3 = 0   
       
  ElseIf Pallet_rust1 = 1 And Status1 = 0 Then                        ;stoppen pallets bij rust positie eerste pallet. (1 puls)
    High Inladen1
    DelayMS Vertraging1
    Status1 = 1
    
  ElseIf Pallet_rust1 = 0 And Status1 = 1 And Status2 = 0 Then        ;puls 1 registreren.
    Status2 = 1
    DelayMS Vertraging1
  
  ElseIf Pallet_rust1 = 1 And Status2 = 1 Then                        ;puls 2 registreren.
    Status2 = 0
    Status3 = Status3 + 1
    DelayMS Vertraging1
  
  ElseIf Status3 = 3 Then                                             ;stoppen pallets nadat 1 pallet reeds geladen is. (3 pulsen)
    High Inladen1
    Status3 = 0
    DelayMS Vertraging1
    
  ElseIf Pallet_vol1 = 1 Then                                         ;stoppen lopende band bij band vol
    High Inladen1
    DelayMS Vertraging1
  EndIf  
  


;/////////////////////////PROGRAM LADEN BAND 1//////////////////////////////////  
  If Pallet_detectie2 = 1 And Pallet_vol2 = 0 Then                  ;Inladen starten
    Low Inladen2
    DelayMS Vertraging1
    Status6 = 0   
       
  
  ElseIf Pallet_rust2 = 1 And Status4 = 0 Then                      ;stoppen pallets bij rust positie eerste lading. (1 puls)   
    High Inladen2
    DelayMS Vertraging1
    Status4 = 1
    
  ElseIf Pallet_rust2 = 0 And Status4 = 1 And Status5 = 0 Then      ;puls 1 registrerem
    Status2 = 1
    DelayMS Vertraging1
  
  ElseIf Pallet_rust2 = 1 And Status5 = 1 Then                      ;Puls 2 registreren
    Status5 = 0
    Status6 = Status6 + 1
    DelayMS Vertraging1
  
  ElseIf Status6 = 3 Then                                           ;stoppen pallets nadat 1 pallet reeds geladen is. (3 pulsen)
    High Inladen2
    Status6 = 0
    DelayMS Vertraging1
    
  ElseIf Pallet_vol2 = 1 Then                                       ;stoppen lopende band bij band vol
    High Inladen2
    DelayMS Vertraging1
  EndIf  
Until Programswitch = 0                                             ;Programma uitvoeren tot programswitch is veranderd


;////////////////////////PROGRAM LOSSEN/////////////////////////////////////////
Program_lossen:


If PORTB.6 = 1 Then                                                 ;Kijken of voorwaarde nog steeds actief is.
    GoTo Program_main 
EndIf

    Status7 = 0
    Status8 = 0
    Status9 = 0
    Status10 = 0

Repeat                                              ;Indien voorwaarde veranderd is programma afsluiten en terug naar laden

If Pallet_detectie1 = 0 And Status7 = 0 Then                        ;Pallets uitladen band starten.
  Low Uitladen1
  Status7 = 1
  DelayMS Vertraging1
  
ElseIf Pallet_detectie1 = 1 And Status7 = 1 Then                    ;1ste puls registeren
  Status7 = 0
  Status8 = Status8 + 1
  DelayMS Vertraging1
  
ElseIf Status8 = 2 Then                                             ;2de puls uitladen stoppen
  High Uitladen1
  DelayMS Vertraging1
  Status8 = 0
  
EndIf

If Pallet_detectie2 = 0 And Status9 = 0 Then                        ;pallets uitladen, band starten.
  Low Uitladen2
  Status9 = 1
  DelayMS Vertraging1
  
ElseIf Pallet_detectie2 = 1 And Status9 = 1 Then                    ;1ste puls registeren
  Status9 = 0
  Status10 = Status10 + 1
  DelayMS Vertraging1
  
ElseIf Status10 = 2 Then                                            ;2de puls uitladen stoppen
  High Uitladen2
  DelayMS Vertraging1
  Status10 = 0
  
EndIf

Until Programswitch = 1                                             ;Programma uitvoeren totdat programmaswitch veranderd.   

End                                                                 ;Einde programma

[Bericht gewijzigd door Henry S. op (94%)]

iemand nog ideeen?

ik loop zelf echt stuk hierop...

Teken eens een flow diagram en vergelijk of de code klopt.
(Voor een buitenstaander is er aan de code niet veel te volgen)
En haal de onnodige dingen zoals de onderste If loop er uit.
Je springt naar Program_Laden als switch 1 is, en test dan meteen of 'ie ' 0 ' is. (In 1uS verandert er echt niks...)


    If Programswitch = 1 Then                                         ;Als programmaswitch hoog is da programma laden uitvoeren. (pull up weerstand)
        GoTo Program_laden
    EndIf
 
    If Programswitch = 0 Then                                         ;Als programmaswitch laag is dan programma lossen uitvoeren. (gebruikerinput)
        GoTo Program_lossen
    EndIf
Wend
;/////////////////////////PROGRAM LADEN BAND 1//////////////////////////////////
Program_laden:
 

    Status1 = 0
    Status2 = 0
    Status3 = 0
    Status4 = 0
    Status5 = 0
    Status6 = 0  
 
If Programswitch = 0 Then                                             ;Kijken of voorwaarde nog steeds actief is.
    GoTo Program_main                                                 ;Indien voorwaarde veranderd is programma sluiten en terug naar programma lossen
EndIf

Aan het eind (bij het END directive) loopt de PIC vast, omdat je nergens heen gaat.
Op zijn minst altijd iets opnemen als een:


    LOOP  GOTO  LOOP 
          END

Ten eerste dit, waarom zet je dit neer je gebruikt dit nergens.


         ;76543210
ADCON0 = %00000000
ANSEL =  %00000000
ANSELH = %00000000
WPUA =   %00000000
IOCA =   %00000000

Dat kan je dus weg laten.
Wat heb je gedaan met je MCLRE_PIN, hangt die via een pullup aan de 5VDC, met een condensator naar de gnd. (weerstan 10K, en condensator 100nF)
En plaats eens een schema, als je dat hebt. Het kan zomaar een hardware probleem zijn.

EDIT:
En wat is dit.

[Bericht gewijzigd door Lambiek op (13%)]

Zorg eerst wat anderen al aangaven voor een goed verloop, je zen, je flow, dan is het voor je zelf ook duidelijker.

Anderen gaven voorbeelden, op een ( 1 ) plek duidelijk wat er gebeurt kwa programma keuze, en niet onnodige verstopte testen en dan maar springen.

Program_main:

While 1=1
If Programswitch = 1 Then
     GoSUB Program_laden
Else
    GoSUB Program_lossen
EndIf
WEND

Program_laden:

....... Je laden code , zonder je portb.6 nog eens te checken
Return

Program_lossen:

....... Je lossen code, zonder je portb.6 , je ProgramSwitch nog eens te checken.
Return

Wat ik ook zie dat je eigenlijk geen stop of pauze hebt. Dat ding blijft eeuwig laden en lossen. Of zie ik dat verkeerd? Heeft het eindschakelaars? Test je op deze ook?

Program_main:

While 1=1
If StopRunSwitch = 1 then ; 1 = run 0 = uit. Zorg er wel voor dat als deze kapot gaat, het geheel stopt!
   If Programswitch = 1 Then
        GoSUB Program_laden
   Else
       GoSUB Program_lossen
   EndIf
Endif
WEND

Wat betreft veiligheid, Zorg er wel voor dat als deze stop run schakelaar kapot gaat, het geheel stopt, en niet als de bv de kabe of aansluitingl kapot gaat het juist begint te werken.

Hoe visualiseer je de situatie, gebruik je bv ledjes om aan te duiden of je in run mode staat en in welk programma je bezig bent?

Over lossen
Wat bedoel je met 'pallet-detectieX = 0'? Betekent dit er is een pallet of juist niet?
Wat als pallet-detectie=1 en je status7 = 0 ? Bv na even een stroom uitval of whatever?
Of, status8 wordt opgehoogd in een loop, dus kan makkelijk hoger worden dan 2, rekening mee gehouden?

Op 29 januari 2012 09:42:48 schreef Lord Anubis:
Wat ik ook zie dat je eigenlijk geen stop of pauze hebt. Dat ding blijft eeuwig laden en lossen. Of zie ik dat verkeerd? Heeft het eindschakelaars? Test je op deze ook?
Zitten eind schakelaars in (vol detectie is eind schakelaar)net als dat pallet_detectie ook als eind schakelaar kan fungeren.

[...]

Wat betreft veiligheid, Zorg er wel voor dat als deze stop run schakelaar kapot gaat, het geheel stopt, en niet als de bv de kabe of aansluitingl kapot gaat het juist begint te werken.

dit is voor een modelbouw projectje niet van toepassing. Als er wat kapot gaat dan komt er in het ergste geval een pallet met piepschuim (30g) naar buiten vallen. of loopt het tegen de achterwand aan. Een stekker los trekken op dat moment lost het probleem voor dan op en zet de installatie buiten werking.

Hoe visualiseer je de situatie, gebruik je bv ledjes om aan te duiden of je in run mode staat en in welk programma je bezig bent?

de programma status wordt niet gevisuleerd met ledjes. aleen met de motor regeling print die gaat draaien of niet.

Over lossen
Wat bedoel je met 'pallet-detectieX = 0'? Betekent dit er is een pallet of juist niet?
Wat als pallet-detectie=1 en je status7 = 0 ? Bv na even een stroom uitval of whatever?
Of, status8 wordt opgehoogd in een loop, dus kan makkelijk hoger worden dan 2, rekening mee gehouden?

met een stroom onderbreking herstart de pic, en worden alle statussen gereset.

ik heb mijn antwoorden in je tekst geplaatst.

Op 28 januari 2012 16:04:57 schreef Lambiek:
Ten eerste dit, waarom zet je dit neer je gebruikt dit nergens.


         ;76543210
ADCON0 = %00000000
ANSEL =  %00000000
ANSELH = %00000000
WPUA =   %00000000
IOCA =   %00000000

Dat kan je dus weg laten.
Wat heb je gedaan met je MCLRE_PIN, hangt die via een pullup aan de 5VDC, met een condensator naar de gnd. (weerstan 10K, en condensator 100nF)
En plaats eens een schema, als je dat hebt. Het kan zomaar een hardware probleem zijn.

EDIT:
En wat is dit.


While 1 = 1  
    High Inladen1
    High Inladen2
    High Uitladen1
    High Uitladen1
[code][/quote]

de configuratie die daar staat is nodig om de AD registers uit te schakelen. Weghalen resulteert in een niet werkende pic / poorten.


er hangt een 4k7 weerstand als pull up en 100nf over de +/- van de pic.

verder zitten de schakelaars op de betreffende poorten aangesloten en aan de andere kant 5v. Er zitten pull down weerstanden 1k op de ingangen van de pic.

[quote][message=1350144,quote][b]Op 28 januari 2012 15:45:58 schreef Arco[/b][/message]:
Teken eens een flow diagram en vergelijk of de code klopt. 
(Voor een buitenstaander is er aan de code niet veel te volgen)
En haal de onnodige dingen zoals de onderste If loop er uit.
Je springt naar Program_Laden als switch 1 is, en test dan meteen of 'ie ' 0 ' is. (In 1uS verandert er echt niks...)

[code=picbasic]
    If Programswitch = 1 Then                                         ;Als programmaswitch hoog is da programma laden uitvoeren. (pull up weerstand)
        GoTo Program_laden
    EndIf
 
    If Programswitch = 0 Then                                         ;Als programmaswitch laag is dan programma lossen uitvoeren. (gebruikerinput)
        GoTo Program_lossen
    EndIf
Wend
;/////////////////////////PROGRAM LADEN BAND 1//////////////////////////////////
Program_laden:
 

    Status1 = 0
    Status2 = 0
    Status3 = 0
    Status4 = 0
    Status5 = 0
    Status6 = 0  
 
If Programswitch = 0 Then                                             ;Kijken of voorwaarde nog steeds actief is.
    GoTo Program_main                                                 ;Indien voorwaarde veranderd is programma sluiten en terug naar programma lossen
EndIf

Aan het eind (bij het END directive) loopt de PIC vast, omdat je nergens heen gaat.
Op zijn minst altijd iets opnemen als een:


    LOOP  GOTO  LOOP 
          END

ik ga hier even mee aan de gang. zal vanavond worden.

[Bericht gewijzigd door Henry S. op (22%)]

Bij deze de volledig werkende code:
Het probleem is opgelost!

Lag toch in dat de loop aan het einde ontbrak en vermoedelijk de dubbele controle / check die ik deed om te zien of het programma nog uitgevoerd mocht worden.

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : Alwin Winius                                      *
'*  Notice  : Copyright (c)                     *
'*          : All Rights Reserved                               *
'*  Date    : 8-11-2011                                         *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
Device 16F690                ;We gebruiken een 16F628A type
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, MCLRE_OFF, CP_OFF, CPD_OFF, BOR_OFF, IESO_OFF, FCMEN_OFF

All_Digital TRUE              ;Alle ingangen digitaal
         ;76543210
ADCON0 = %00000000
ANSEL =  %00000000
ANSELH = %00000000
WPUA =   %00000000
IOCA =   %00000000

        ;76543210
TRISA = %00000111
TRISB = %01010000
TRISC = %00000111

Dim Status1 As Byte
Dim Status2 As Byte
Dim Status3 As Byte
Dim Status4 As Byte
Dim Status5 As Byte
Dim Status6 As Byte
Dim Status7 As Byte
Dim Status8 As Byte
Dim Status9 As Byte
Dim Status10 As Byte

Dim Vertraging1 As Byte
Vertraging1 = 50

Symbol Pallet_detectie1 = PORTA.0
Symbol Pallet_rust1     = PORTA.1
Symbol Pallet_vol1      = PORTA.2
Symbol Inladen1         = PORTA.4
Symbol Uitladen1        = PORTA.5

Symbol Pallet_detectie2 = PORTC.0
Symbol Pallet_rust2     = PORTC.1
Symbol Pallet_vol2      = PORTC.2
Symbol Inladen2         = PORTC.4
Symbol Uitladen2        = PORTC.5

Symbol Programswitch    = PORTB.6





;/////////////////////////PROGRAM MAIN//////////////////////////////////////////
Program_main:

While 1 = 1  
    High Inladen1
    High Inladen2
    High Uitladen1
    High Uitladen1

    
    DelayMS 500
      
    If Programswitch = 1 Then                                         ;Als programmaswitch hoog is da programma laden uitvoeren. (pull up weerstand)
        GoTo Program_laden
    EndIf
    
    If Programswitch = 0 Then                                         ;Als programmaswitch laag is dan programma lossen uitvoeren. (gebruikerinput)
        GoTo Program_lossen
    EndIf

;/////////////////////////PROGRAM LADEN BAND 1//////////////////////////////////
Program_laden:


    Status1 = 0
    Status2 = 0
    Status3 = 0
    Status4 = 0
    Status5 = 0
    Status6 = 0  

  Repeat
  If Pallet_detectie1 = 1 And Pallet_vol1 = 0 Then                    ;Inladen pallets starten
    Low Inladen1
    DelayMS Vertraging1
    Status3 = 0   
       
  ElseIf Pallet_rust1 = 1 And Status1 = 0 Then                        ;stoppen pallets bij rust positie eerste pallet. (1 puls)
    High Inladen1
    DelayMS Vertraging1
    Status1 = 1
    
  ElseIf Pallet_rust1 = 0 And Status1 = 1 And Status2 = 0 Then        ;puls 1 registreren.
    Status2 = 1
    DelayMS Vertraging1
  
  ElseIf Pallet_rust1 = 1 And Status2 = 1 Then                        ;puls 2 registreren.
    Status2 = 0
    Status3 = Status3 + 1
    DelayMS Vertraging1
  
  ElseIf Status3 = 3 Then                                             ;stoppen pallets nadat 1 pallet reeds geladen is. (3 pulsen)
    High Inladen1
    Status3 = 0
    DelayMS Vertraging1
    
  ElseIf Pallet_vol1 = 1 Then                                         ;stoppen lopende band bij band vol
    High Inladen1
    DelayMS Vertraging1
  EndIf  
  


;/////////////////////////PROGRAM LADEN BAND 1//////////////////////////////////  
  If Pallet_detectie2 = 1 And Pallet_vol2 = 0 Then                  ;Inladen starten
    Low Inladen2
    DelayMS Vertraging1
    Status6 = 0   
       
  
  ElseIf Pallet_rust2 = 1 And Status4 = 0 Then                      ;stoppen pallets bij rust positie eerste lading. (1 puls)   
    High Inladen2
    DelayMS Vertraging1
    Status4 = 1
    
  ElseIf Pallet_rust2 = 0 And Status4 = 1 And Status5 = 0 Then      ;puls 1 registrerem
    Status2 = 1
    DelayMS Vertraging1
  
  ElseIf Pallet_rust2 = 1 And Status5 = 1 Then                      ;Puls 2 registreren
    Status5 = 0
    Status6 = Status6 + 1
    DelayMS Vertraging1
  
  ElseIf Status6 = 3 Then                                           ;stoppen pallets nadat 1 pallet reeds geladen is. (3 pulsen)
    High Inladen2
    Status6 = 0
    DelayMS Vertraging1
    
  ElseIf Pallet_vol2 = 1 Then                                       ;stoppen lopende band bij band vol
    High Inladen2
    DelayMS Vertraging1
  EndIf  
Until Programswitch = 0                                             ;Programma uitvoeren tot programswitch is veranderd


;////////////////////////PROGRAM LOSSEN/////////////////////////////////////////
Program_lossen:


    Status7 = 0
    Status8 = 0
    Status9 = 0
    Status10 = 0

Repeat                                              ;Indien voorwaarde veranderd is programma afsluiten en terug naar laden

If Pallet_detectie1 = 0 And Status7 = 0 Then                        ;Pallets uitladen band starten.
  Low Uitladen1
  Status7 = 1
  DelayMS Vertraging1
  
ElseIf Pallet_detectie1 = 1 And Status7 = 1 Then                    ;1ste puls registeren
  Status7 = 0
  Status8 = Status8 + 1
  DelayMS Vertraging1
  
ElseIf Status8 = 2 Then                                             ;2de puls uitladen stoppen
  High Uitladen1
  DelayMS 5000
  Status8 = 0
  
EndIf

If Pallet_detectie2 = 0 And Status9 = 0 Then                        ;pallets uitladen, band starten.
  Low Uitladen2
  Status9 = 1
  DelayMS Vertraging1
  
ElseIf Pallet_detectie2 = 1 And Status9 = 1 Then                    ;1ste puls registeren
  Status9 = 0
  Status10 = Status10 + 1
  DelayMS Vertraging1
  
ElseIf Status10 = 2 Then                                            ;2de puls uitladen stoppen
  High Uitladen2
  Status10 = 0
  DelayMS 5000
EndIf

Until Programswitch = 1                                             ;Programma uitvoeren totdat programmaswitch veranderd.   

  GoTo Program_main

Wend

End                                                                 ;Einde programma
 GoTo Program_main

op het einde mag weg is overbodig.