Hey,

Ik heb problemen met de programmeertaal IL (Instruction List).

GVL:
Start_IL AT %IX0.4: BOOL;
Stop_IL AT %IX0.5: BOOL;
Light_IL AT %Q0.2: BOOL;

ACT:
LD Start_IL
OR Light_IL
ANDN Stop_IL
S Light_IL

Ik krijg de volgende 3 foutmeldingen:
- C0007: Expression expected instead of 'OR' (OR)
- C0007: Expression expected instead of 'AND' (AND)
- Accu must be loaded properly before this statement (S)

Iemand een idee?

Op 13 februari 2014 22:29:40 schreef Xavier2x:
Hey,

Ik heb het idee dat de TS in z'n algemeenheid wat problemen heeft met de syntax.

De aanhalingstekens is niet het probleem. Ik heb hetzelfde probleem en krijg dezelfde Syntax als ik de code in TwinCAT schrijf.

Met BOOL kun je toch de operators AND en OR gebruiken dus ik begrijp niet waarom het niet werkt.

waarom doe je het zo?

LD Start_IL
OR Light_IL
ANDN Stop_IL
S Light_IL

ik vind structured text veel prettiger.


Light_IL := Start_IL OR Light_IL AND NOT Stop_IL;

//andere schrijfwijze:
Light_IL := Start_IL OR 
              Light_IL AND NOT 
              Stop_IL;

maar dat is persoonlijk.

meestal krijg je de C007 error als ergens een ongeldig teken staat of een punt-komma mist. zo heb ik wel eens een uur zitten zoeken naar een apostrof ( ' ) die door font smoothing maar 2 pixels groot was.

Dat is net het ding. Ik wil leren werken met Instruction List. Met talen zoals FBD, LD en ST kan ik al behoorlijk werken maar IL lukt me nog helemaal niet.

Bedankt voor het antwoord maar het heeft me niet verder geholpen.

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

Is het niet :

LD Start_IL
OR Light_IL
ANDN Stop_IL
ST Light_IL

IL werkt in diverse PLC programmeeromgevingen geweldig, bijvoorbeeld step5 en step7, maar in codesys krijg ik echt het idee dat het erbij gestopt is om maar een extra taal te hebben. Ik vind IL in Codesys in ieder geval bagger.

Ik heb altijd een grote voorkeur voor IL, maar in Codesys gebruik ik het dus nooit. Toen ik met Codesys begon wel, 15 minuten ongeveer :-)

Over welke Codesys hebben we het eigenlijk, 2 of 3?

Op 14 februari 2014 12:18:20 schreef Samueldw:
Is het niet :

LD Start_IL
OR Light_IL
ANDN Stop_IL
ST Light_IL

Had ik ook geprobeerd maar dat maakt niet uit. S zorgt ervoor dat de variabele op TRUE wordt gezet. ST zorgt ervoor dat de variabele de waarde van de ACCUMULATOR krijgt. In deze code maakt dat niet veel uit en ik krijg zowel bij ST als S dezelfde foutmeldingen. Toch bedankt voor het meedenken.

Net even jou progje gemaakt in CoDeSys, geen foutmelding.
Zie niet direct wat er schort.

Heb je je variabelen in Global Variables gemaakt of in de variabelen van de POU?

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

Ik heb het net ook getest, in V2 en in V3, geen probleem. Variabelen in de POU zelf lokaal gedeclareerd.

Ik krijg wel een hele rits foutmeldingen als ik een POU aanmaak voor ST en dan in IL ga programmeren (duh). :-)

Maak eens een printscreen van dat programma. Het is zo klein, moet kunnen.

[Bericht gewijzigd door GJ_ op (15%)]

Op 14 februari 2014 13:52:01 schreef deskjet:
Net even jou progje gemaakt in CoDeSys, geen foutmelding.
Zie niet direct wat er schort.

Aan de variabelen ligt het niet. Ik heb ze zowel een keer in GVL gemaakt als in de POU zelf. Nog steeds dezelfde foutmeldingen..

Op 14 februari 2014 14:31:30 schreef GJ_:
Ik heb het net ook getest, in V2 en in V3, geen probleem. Variabelen in de POU zelf lokaal gedeclareerd.

Ik krijg wel een hele rits foutmeldingen als ik een POU aanmaak voor ST en dan in IL ga programmeren (duh). :-)

Maak eens een printscreen van dat programma. Het is zo klein, moet kunnen.

Het PLC programma:

http://imagizer.imageshack.us/v2/320x240q90/39/h64i.png

De errors:

http://imagizer.imageshack.us/v2/320x240q90/196/szx2.png

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

Volgens mij heeft het te maken met het ontbreken van je PLC_PRG
Hier een stukje uit de help-file:

The PLC_PRG is a special predefined POU. Each project must contain this special program. This POU is called exactly once per control cycle.

The first time the 'Project' 'Object Add' command is used after a new project has been created, the default entry in the POU dialog box will be a POU named PLC_PRG of the program type. You should not change this default setting!

If tasks have been defined, then the project may not contain any PLC_PRG, since in this case the procedure sequence depends upon the task assignment

Ik heb het niet opgelost maar ik heb wel een andere methode gevonden om het wel te doen werken.

Ik heb een POU (Function Block) i.p.v. een ACT aangemaakt om daarin mijn IL te schrijven. Ik heb mijn variabelen daar lokaal geschreven en in de netwerken mijn PLC code in IL geschreven.

Dit gaf geen errors!

Ondanks ik nu verder kan zou ik nog steeds de oplossing willen van deze errors. Het lijkt alsof ACT de programmeertaal IL niet ondersteunt maar toch is het een optie als je een ACT aanmaakt. Vreemd.

Nochtans ontbreekt er geen PLC_PRG bij mij hoor, StartStop_POU (PRG) is bij mij de PLC_PRG.

FBD, LD en ST werken perfect als ACT. Maar IL niet.

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

StartStop_POU (PRG) is bij mij de PLC_PRG.

nee, de PLC_PRG moet ook daadwerkelijk PLC_PRG heten..

lees verder even de FAQ over quoten en kicken

ik vind structured text veel prettiger.


Light_IL := Start_IL OR Light_IL AND NOT Stop_IL;

//andere schrijfwijze:
Light_IL := Start_IL OR 
              Light_IL AND NOT 
              Stop_IL;

Kwestie van smaak: inderdaad liever ST.
Voor de andere schrijfwijze even mierenneuken:


Light_IL :=         Start_IL
            OR      Light_IL
            AND NOT Stop_IL;

//Of
Light_IL :=         (       Start_IL
                    OR      Light_IL
                    )
            AND NOT Stop_IL;

Maar misschien ook een kwestie van smaak.

nee, de PLC_PRG moet ook daadwerkelijk PLC_PRG heten..

Dat hoeft niet, maar ik heb net gemerkt wat de oorzaak was.

Ik heb net een IL Function Block aangemaakt en het StartStop programma geschreven.

Nu wil ik de IL Function Block oproepen met mijn PLC_PRG(ST). Bij FBD, LD en ST kun je gewoon een Instance (kopie van het FB) maken en vervolgens de Instance oproepen.

Deze oproep voor mijn IL FB geef errors.

In PLC_PRG:
PROGRAM PLC_PRG
VAR
INSTANCE: StartStop_IL();
END_VAR

Netwerk1:
INSTANCE();

Als ik voor IL een instance maak en het daarna oproep krijg ik deze foutmeldingen:

- C0007: Expression expected instead of 'OR' (OR)
- C0007: Expression expected instead of 'AND' (AND)
- Accu must be loaded properly before this statement (S)

Op 14 februari 2014 15:40:54 schreef Xavier2x:
[...]

Dat hoeft niet, maar ik heb net gemerkt wat de oorzaak was.

uit de codesys helpfile

PLC_PRG
The PLC_PRG is a special predefined POU. Each project must contain this special program. This POU is called exactly once per control cycle.

The first time the 'Project' 'Object Add' command is used after a new project has been created, the default entry in the POU dialog box will be a POU named PLC_PRG of the program type. You should not change this default setting!

If tasks have been defined, then the project may not contain any PLC_PRG, since in this case the procedure sequence depends upon the task assignment.

Attention: Do not delete or rename the POU PLC_PRG (assuming you are not using a Task Configuration)! PLC_PRG is generally the main program in a single task program.

ik weet niet of het bij codesys 3 ook zo werkt, maar zolang je geen taken gebruikt moet hij wel zo heten.

In CODESYS 3 vind ik nergens dat dit hoeft. Het geeft ook geen problemen als ik compile.