Wie kan me het duwtje in de juiste richting geven

IDE gerelateerde berichten
Berichten: 20
Geregistreerd: 25 Apr 2015, 15:18

Re: Wie kan me het duwtje in de juiste richting geven

Berichtdoor Norbert » 14 Jan 2016, 21:37

Hallo Paul,

Ik heb een werkende sketch van het uitgeklede programma dat is zonder merker.
Sketch staat hieronder
En eenzelfde sketch met merker die ik niet aan de praat krijg. Dan werk het EN poortje niet.
Met bool werkt het ook niet. Ik heb een mail gehad van Plclib en die zegt dat ik een unsigned int moet pakken.
Ik hoop dat je nu kan zien wat ik fout doe.

#include <plcLib.h>
//INGANGEN // werkend zonder merker
int ingang1 = 2; //alarm aan uit
int ingang2 = 5; //Verlichtingmidden

//UITGANGEN
int uitgang1 = 30; //sign alarm aan uit
int uitgang2 = 31; //oproep sign


// Variabelen one shot voor de verlichtingmidden
int state1 = LOW; // the current state of the output pin
int reading1; // the current reading from the input pin
int previous1 = LOW; // the previous reading from the input pin
long tijd1 = 0; // the last tijd1 the output pin was toggled
long debounce1 = 200; // the debounce tijd1, increase if the output flickers

void setup() {
pinMode(ingang1, INPUT);
pinMode(ingang2, INPUT);
pinMode (uitgang1, OUTPUT);
pinMode (uitgang2, OUTPUT);

}

void loop()
{

reading1 = digitalRead(ingang1);

// if the input just went from LOW and HIGH and we've waited long enough
// to ignore any noise on the circuit, toggle the output pin and remember
// the tijd1
if (reading1 == HIGH && previous1 == LOW && millis() - tijd1 > debounce1) {
if (state1 == HIGH)
state1 = LOW;
else
state1 = HIGH;

tijd1 = millis();
}
digitalWrite(uitgang1, state1);

previous1 = reading1;

in(uitgang1); // Read Input 0 En poort
andBit(ingang2); // AND with Input 1
out(uitgang2); // Send result to Output 0
}


-----------------------------------------------------------------------------------
Nu met de merker

#include <plcLib.h>
//INGANGEN
int ingang1 = 2; //alarm aan uit
int ingang2 = 5; //Verlichtingmidden

//UITGANGEN
int uitgang1 = 30; //sign alarm aan uit
int uitgang2 = 31; //oproep sign


// Variabelen one shot voor de verlichtingmidden
int state1 = LOW; // the current state of the output pin
int reading1; // the current reading from the input pin
int previous1 = LOW; // the previous reading from the input pin
long tijd1 = 0; // the last tijd1 the output pin was toggled
long debounce1 = 200; // the debounce tijd1, increase if the output flickers


//Merkers

unsigned int Merker; // bool Merker; ook geprobeerd

void setup() {
pinMode(ingang1, INPUT);
pinMode(ingang2, INPUT);
pinMode (uitgang1, OUTPUT);
pinMode (uitgang2, OUTPUT);

}

void loop()
{

reading1 = digitalRead(ingang1);

// if the input just went from LOW and HIGH and we've waited long enough
// to ignore any noise on the circuit, toggle the output pin and remember
// the tijd1
if (reading1 == HIGH && previous1 == LOW && millis() - tijd1 > debounce1) {
if (state1 == HIGH)
state1 = LOW;
else
state1 = HIGH;

tijd1 = millis();
}
digitalWrite(uitgang1, state1);

previous1 = reading1;

in(uitgang1); // Read Input 0 EN poort
andBit(Merker); // AND with Input 1
out(uitgang2); // Send result to Output 0
}

Advertisement

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Wie kan me het duwtje in de juiste richting geven

Berichtdoor shooter » 16 Jan 2016, 13:30

nogmaals dat werkt niet want
// AND scanValue with input (pin number supplied as integer)
unsigned int andBit(int input) {
scanValue = scanValue & digitalRead(input);
return(scanValue);
}
dat betekent dus dat jouw merkers ook ingangen moeten zijn en dat zijn ze niet.
paul deelen
shooter@home.nl

Berichten: 163
Geregistreerd: 15 Dec 2012, 21:02
Woonplaats: Delfzijl

Re: Wie kan me het duwtje in de juiste richting geven

Berichtdoor FPCUser » 16 Jan 2016, 16:29

"en-functie" met ingangspin, dus een integer:

cpp code
// AND scanValue with input (pin number supplied as integer)
unsigned int andBit(int input) {
scanValue = scanValue & digitalRead(input);
return(scanValue);
}


"en-functie" met een merker, dus een unsigned integer:

cpp code
// AND scanValue with auxiliary variable (variable supplied as unsigned integer)
unsigned int andBit(unsigned int input) {
scanValue = scanValue & input;
return(scanValue);
}


Afhankelijk van de aangeboden warde wordt de juiste functie aangeroepen.


Maar onderstaand stukje code begrijp ik niet.
commentaar klopt niet, en wat is de waarde van de merker ?
Is dat de waarde aan ingang2 ?
Omschrijf eens wat je hiermee wil.

Code: Alles selecteren
  in(uitgang1); // Read Input 0 EN poort
  andBit(Merker); // AND with Input 1
  out(uitgang2); // Send result to Output 0

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Wie kan me het duwtje in de juiste richting geven

Berichtdoor shooter » 16 Jan 2016, 21:50

ik heb het toch maar even gebouwd:
[code2=]unsigned int M1=0; // bool Merker; ook geprobeerd

void setup() {
setupPLC(); // Setup inputs and outputs
Serial.begin(9600);


}

void loop() {
in(X0); // Read Input 0
M1=andBit(X1);
out(Y0); // Send to Output 0
Serial.println (M1);
[/code2]

en dit werkt prima, je moet er rekening mee houden dat je de in en uitgangen in de plcsetup zet onder customio zoals het hoort. dat doe je in een PLC ook.
De merker (M1) is gewoon een variabele en mag dus gebruikt worden, zelfs andBit(M1) werkt hoor.
als je M1 een waarde wilt geven dan moet je zeggen M1=.... want plclib kent geen merkers (nou ja nog niet )

een voorbeeld is:
[code2=]/* Programmable Logic Controller Library for the Arduino and Compatibles

Latch Command with Variables - Latch command using variables to hold temporary values

Connections:
Input - Set - switch connected to input X0 (Arduino pin A0)
Input - Reset - Switch connected to input X1 (Arduino pin A1)
Output - Q Output - LED connected to output Y0 (Arduino pin 3)

Software and Documentation:
http://www.electronics-micros.com/softw ... b-arduino/

*/

// Temporary Variables:
unsigned int AUX0; // Latch output variable
unsigned int AUX1; // Latch reset variable

void setup() {
setupPLC(); // Setup inputs and outputs
}

void loop() {
AUX1 = in(X1); // AUX1 (Reset) controlled by input X1

in(X0); // Read switch connected to Input 0 (Set input - Input 0)
latch(AUX0, AUX1); // Latch command, Output = AUX0, Reset = AUX1 (Input 1)

in(AUX0); // Send Q output to output Y0
out(Y0);
}[/code2]
paul deelen
shooter@home.nl

Berichten: 20
Geregistreerd: 25 Apr 2015, 15:18

Re: Wie kan me het duwtje in de juiste richting geven

Berichtdoor Norbert » 16 Jan 2016, 22:28

Ik ga er eens mee aan de slag en kijk hoe ver ik kom.
Heel erg bedankt voor de hulp Nu weet ik waar ik mijn vfragen kan stellen.
Ik doe er ook even het antwoord bij van de mail die ik kreeg op mijn vraag van PLC lib.
Daarom begon ik met die unsigned integers.

Hi

Yes, you can create user variable(s) as unsigned integers and then use these as inputs or outputs instead of physical device pins. Below is a slightly modified version of the BareMinimum example sketch. (Open the Serial Monitor to see the result which will be either 1 or 0.)

Regards,
Walter Ditch

#include <plcLib.h>

unsigned int myVariable;

void setup() {
setupPLC(); // Setup inputs and outputs
Serial.begin(9600);
}

void loop() {
in(X0); // Read Input 0
out(myVariable); // Send to user variable

Serial.println(myVariable);
delay(50);
}

-----Original Message-----
From: info@gaparts.nl [mailto:info@gaparts.nl]
Sent: 07 January 2016 23:30
To: support@electronics-micros.com
Subject: Marker or relais

Hello

I want to use Bit variable in PLc LIB
whithout using an output. Is that possible?
greets
Norbert

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Wie kan me het duwtje in de juiste richting geven

Berichtdoor shooter » 17 Jan 2016, 23:51

ja hoor dat kan met unsigned int M0=int(Bitvariable) maakt niet uit wat voor type het is.
paul deelen
shooter@home.nl

Berichten: 20
Geregistreerd: 25 Apr 2015, 15:18

Re: Wie kan me het duwtje in de juiste richting geven

Berichtdoor Norbert » 18 Jan 2016, 21:26

Hallo Paul,

Weer een tijd bezig geweest maar loop nog steeds vast.
Ik heb een eenvoudig sketchje gepakt van een gewone push drukknop
Nu zou ik toch dmv een merker uitgang 2 moeten kunnen activeren zodra ledPin hoog wordt?
Ik ben benieuwd of het me gaat lukken een merker actief te krijgen ;-)

Als je de code start met [code2 = cpp] (zonder de spaties) en afsluit met [code2[, dan zie je code er veel mooier uitcpp code
#include <plcLib.h>
unsigned int Merker; // boolean Merker; ook geprobeerd het ander wat er geschreven werd is nog even te moeilijk voor me met arrayś ed
const int buttonPin = 2;
const int ledPin = 30; // the number of the LED pin
int uitgang2 = 31;

// variables will change:
int buttonState = 0; // variable for reading the pushbutton status

void setup() {
setupPLC(); // Setup inputs and outputs
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
pinMode(uitgang2, OUTPUT);
}

void loop() {
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);

// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (buttonState == HIGH) {
// turn LED on:
digitalWrite(ledPin, HIGH);
digitalWrite(Merker, HIGH);
}
else {
// turn LED off:

digitalWrite(Merker, LOW);
digitalWrite(ledPin, LOW);
}


in(Merker); // PLC progje
out(uitgang2); // Send result to Output 2

}

Berichten: 20
Geregistreerd: 25 Apr 2015, 15:18

Re: Wie kan me het duwtje in de juiste richting geven

Berichtdoor Norbert » 18 Jan 2016, 22:14

Beste allen,

Ik heb het gevonden na de moet nog steeds niet te hebben opgegeven
In het begin

#include <plcLib.h>
boolean Merker; // mag unsigned integer zijn maar gebruikt meer geheugen denk ik.

void setup() {

pinMode (Merker, OUTPUT); // moet als output wordengeschreven

Paul zou je me een voorbeeldje kunnen geven van de Array dat is volgens mij beter.

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Wie kan me het duwtje in de juiste richting geven

Berichtdoor shooter » 19 Jan 2016, 00:18

ja wat jij doet kan wel maar hou je dan aan de unsigned int vast want dat doet PLClib ook, geen idee waarom trouwens want eigenlijk zijn het booleans.
ja wat jij voorstelt mag natuurlijk ook maar dat is dan buiten plclib om.
je mag natuurlijk geen out (aux1) doen .maar wel
scanvalue = aux1;
out (Y0);
elk tussenresultaat wordt in die scanvalue opgeslagen
een out is dan ook eigenlijk digitalWrite(Y0,scanvalue)
maar voor een aux kan dat eigenlijk niet.


AUX mag natuurlijk ook M zijn.

cpp code
// Temporary Variables:
unsigned int AUX0; // Latch output variable
unsigned int AUX1; // Latch reset variable

void setup() {
setupPLC(); // Setup inputs and outputs
}

void loop() {
AUX1 = in(X1); // AUX1 (Reset) controlled by input X1

in(X0); // Read switch connected to Input 0 (Set input - Input 0)
latch(AUX0, AUX1); // Latch command, Output = AUX0, Reset = AUX1 (Input 1)

in(AUX0); // Send Q output to output Y0
out(Y0);


houd of plclib helemaal aan of laat het los en maak je eigen want dat kan natuurlijk ook prima.
als je de lib bekijkt is het eigenlijk niet veel bijzonders.
(even puzzelen met de timers maar ach.)
Persoonlijk zou ik het even zelf maken, want PLClib is eigenlijk vooral and en OR en dat kan zelfs simpel met & | tekens.


array,
het ligt een beetje aan of je siemens gewend bent, ik niet. Die werkte met een DataRegister (DB) in S7 niet meer hoor.
dat waren allemaal stukjes memory. je mag dus wel zeggen DB00M0 bijvoorbeeld.
helemaal doorvoeren kan ook, door WerkDB telkens te vullen met een andere DB (zoals in S5 gebruikelijk is.)
een array is niets anders dan een rij variabelen, die je via een teller aan kunt roepen zoals merkerarray[13]
dan kun je een schuifregister gebruiken bijv. station 13 is true etc.
je kunt zelfs types gebruiken, dan staan er allerlei soorten variabelen in een variabele, zoals p.x,p.y,p.z .
je mag dus ook schrijven aux[0] enz. maar hou je eerst maar even bij aux0.... zoals in het voorbeeld hierboven.


er is wel een punt in plclib wat ik nog niet begrijp, en dat zijn de functies met dezelfde naam en toch een andere functie. het mag wel maar is lastig lezen.

Het is maar wat je wilt.
paul deelen
shooter@home.nl

Berichten: 20
Geregistreerd: 25 Apr 2015, 15:18

Re: Wie kan me het duwtje in de juiste richting geven

Berichtdoor Norbert » 04 Feb 2016, 23:20

Ik dacht op weg te zijn dus even C proberen en ja hoor ik zit wer te donderen met die merkers.

Stuur ik gelijk naar de pinnen dan werkt het.

if (analog_value > spanning_bovengrens) {
digitalWrite(relais1, LOW );

} else {
digitalWrite(relais1, HIGH);

Dus dat is gen probleem
Maar pak in plaats van relais1 bv hulprelais dan gaat het fout.
Ik verwacht dat achter digitalWrite een boolse waarde komt, Maar dat werkt niet.
Zet ik dit eronder om int naar BOOL om te zetten dan gaat het ook fout

Merker=digitalRead(hulprelais);

Weet iemand wat ik fout doe, ik ben benieuw ik zit dus al een paar uur op een simple bitje te broeden.. zonder resultaat.

VorigeVolgende

Terug naar Arduino IDE

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 6 gasten