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?
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.
Progger
GMT+1
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%)]
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.
deskjet
if you think it's expensive to hire a professional, wait until you hire an amateur
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:
De errors:
[Bericht gewijzigd door Henry S. op (47%)]
deskjet
if you think it's expensive to hire a professional, wait until you hire an amateur
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%)]
Progger
GMT+1
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)
Progger
GMT+1
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.