Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  8 6604
Zed's dead, baby!
afen's Avatar
Leker litt med tanken om å bruke RasPi som PLS, og bruke en toutchscreen eller en tablet eller hva som helst som HMI

Bruker Eaton CodeSys, som fungerer bra på RasPi, så den er grei.

Problemet er å lage et HMI som ikke bare fungerer lokalt, men også på nær sagt hva som helst som har en nettleser.

Har en tanke om at PLS-en (RasPi) skriver verdier fortløpende til en fil, som web-appen leser i fra. Input og output skal helst være i samme fil, så webappen kan f.eks hente en verdi fra den filen og så outputte den i en graf. Må også ha mulighet for å sende kommandoer (BOOL) fra web-appen til fila, f.eks at man trykker på en knapp i HMI-et for å starte eller stoppe en pumpe.

Denne webappen må selvsagt være helt konfigurerbar til å begynne med, men når systemet er oppe og går så vil jo bare IO-en endre seg.
Sist endret av afen; 8. juni 2017 kl. 15:56.
første som slår meg er å gjøre dette fra en webserver med en type sql database og php eller phyton, der etter peker du nettleseren eller annet grensesnitt mot denne webserveren som igjen sender signaler om at pumpen skal starte eller stoppe, dette vill jo da bli styrt av funksjonene du har i koden din
Nå er ikke jeg helt stø i PLS-uttrykk, men antar at HMI er et slags presentasjonslag som tar input. Det er ikke for å programmere noe inn i?

Ser at CodeSys har støtte for Python-scripting, og I så fall kan du relativt raskt og enkelt sette opp en HMI via f.eks. Flask for Python. Det vil kjøre en slags webservice, presentere en webside som du snekrer selv (HTML), og så kan du binde adresser som f.eks. http://adresse.lan/start_pumpe til en faktisk Python-funksjon. Denne funksjonen kan enten kalle prosess (f.eks. en driver som alltid er på), eller kalle en funksjon fra et script. Det er også mulig å sette opp siden til å konstant polle på http://adresse.lan/get_status i bakgrunnen, og oppdatere elementer på skjermen din når ting skjer. Du må da klare å formatere dataene inne i programmet på en sånn måte at websiden kan ta det i bruk, og oppdatere de i bakgrunnen.

Det er veldig lite kode som skal til for å komme i gang med Flask, og relativt enkelt å forstå/utvide eksempler du finner.
Sist endret av Dyret; 9. juni 2017 kl. 12:13.
Trigonoceps occipita
vidarlo's Avatar
Donor
Alternativet til det dyret nevner er OPC. Det finst ymse OPC-servere som kan snakke med PLSen, og det finst hauger av bibliotek som kan snakke OPC med OPC-serveren.
Sitat av Dyret Vis innlegg
Nå er ikke jeg helt stø i PLS-uttrykk, men antar at HMI er et slags presentasjonslag som tar input. Det er ikke for å programmere noe inn i?
Vis hele sitatet...
Ja et grafisk grensesnitt som gjør at man kan samhandle med maskinvare på en enkel måte.
Finnes i veldig mange varianter,kan ofte være pre-programmert i industrien til og kontrollere/styre faste oppgaver.
Man kan også kalle mobil,tablet for HMI så lenge man kontrollere/styre noe maskinvare
sette opp en HMI via f.eks. Flask for Python.
Vis hele sitatet...
Ja en god idé en har skrevet noe lignende før.
Kan sette opp noe,som kan være en grei start.
Litt Ladder for start,stopp og en drift lampe(H1).
http://imagizer.imageshack.us/v2/xq90/923/kLceSa.jpg
-------------
Sette opp i Flask,alt bør være satt opp med Ajax.
HMI lastet ikke ikke innhold er på nytt når en knapp trykkes.

Her en test server
Server kode:

Kode

from flask import Flask, render_template, jsonify

app = Flask(__name__)
@app.route('/')
def view():
    return render_template("index.html")

@app.route('/motor_start')
def motor_start():
    '''Do motor start call to PLS(RasPi) here'''
    # http://adresse.lan/start_pumpe
    d = {}
    d['color'] = 'Green'
    d['status'] = 'Run'
    return jsonify(d)

@app.route('/motor_stop')
def motor_stop():
    '''Do motor stop call to PLS(RasPi) here'''
    # http://adresse.lan/stop_pumpe
    d = {}
    d['color'] = 'Red'
    d['status'] = 'Stop'
    return jsonify(d)

@app.route('/motor_lamp_status')
def motor_status():
    '''Getting stauts from PLS(RasPi)'''
    # http://adresse.lan/get_status
    pass

if __name__ == '__main__':
    app.run(debug=True)
Når start knapp trykkes kaller motor_start funksjon.
Dette skjer med Ajax igjennom jQuery getJSON() Method.

Kode

$(document).ready(function() {
  $("#start").click(function() {
    $.getJSON('/motor_start', function(dat) {
      $(".container").css({"background": dat['color']});
      $("#result").text(dat['status']);
    });
  });
});
Setter nå farge grønn når start knapp trykkes.
Lampe drift status motor ikke implementert,
skal når hjelpe-kontaktor på K1 trekkes til gi signal til server.

Koder er her,viss vil prøve kjøre dette.

Kode

# Python 3.6
git clone url
pip install Flask
python server.py
I nettleser http://127.0.0.1:5000/
▼ ... noen uker senere ... ▼
Zed's dead, baby!
afen's Avatar
Trådstarter
Takker for tipset, @snippsat ! Ser ut til at flask kan være noe å undersøke videre!

Hvis man har en tekstfil som raspi-en oppdaterer med feks motor_run true/false og motor_rpm <verdi>, kan man lage en bar graph som henter inn turtallet fra den tekstfila?
Tkinter i Phyton er også verdt å sjekke ut. Jeg syns det fungerer bra som GUI/HMI.
Sitat av afen Vis innlegg
Takker for tipset, @snippsat ! Ser ut til at flask kan være noe å undersøke videre!

Hvis man har en tekstfil som raspi-en oppdaterer med f.eks motor_run true/false og motor_rpm <verdi>, kan man lage en bar graph som henter inn turtallet fra den tekstfila?
Vis hele sitatet...
Ja det går fint,
men kan bli litt avansert viss man ikke kjenner Python,web-utvikling og Flask.

Kan ta et scenario som eksempel.
Parse textfile på server siden.
Man sender man update med jinja2(bygd inn i flask) til klient siden kan man bruke f.eks CanvasJS, Chart.js

Eksempel Server siden:

Kode

from flask import Flask,render_template,request

app = Flask(__name__)
@app.route('/moto_rpm')
def motor_rpm():
    # from parsed text file
    motor_rpm = [300, 356, 500, 100, 200]
    return render_template("index.html", motor_rpm=motor_rpm)

if __name__ == '__main__':
   app.run(debug=True)
Sendes med jinja til JavaScript på klinet siden
Vil se ut noe som dette.

Kode

// line chart data
   var barData = {
   motor_rpm : [{% for rpm in motor_rpm %}
                  "{{ rpm }}",
              {% endfor %}],
   datasets : [
      {
            fillColor: "rgba(151,187,205,0.2)",
            strokeColor: "rgba(151,187,205,1)",
            pointColor: "rgba(151,187,205,1)",
         data : [{% for item in values %}
                      {{item}},
                    {% endfor %}]
      }
      ]
   }
Det er mye verktøy,bibliotek som kan brukes til til hjelp.
Kan bare ta litt om dette.
Flask-SocketIO(Real time Toveis kommunikasjon)
Celery(Real-time message passing).
Bruke Ajax som real time/schedule til og push/pull data.

F.eks kan være moderne og bruke Vue.js.
Denne Pen kaller motor_rpm funksjon på server siden hvert 30 sek.

Tkinter i Phyton er også verdt å sjekke ut. Jeg syns det fungerer bra som GUI/HMI.
Vis hele sitatet...
Tjaa det jo og an lage noe men lite fleksibelt,
vanskeligere og dele fra flere steder og ser ikke på langt nær så bra ut som en web-app med Flask.
Hadde brukt PyQt,WxPython skulle jeg noe med GUI.
Sist endret av snippsat; 30. juni 2017 kl. 14:43.