Hop til indhold
  • 0

Hjælp til programmering funktionsblok


Michael Gravesen
 Share

Spørgsmål

Hej

 

Jeg har været ved at lave en funktionsblok til at åbne/lukke en ventil via en temperatur sætpunkt og en aktuel temperatur.

Tanken er at jo længer temperaturen er væk fra sætpunkt jo længer tid skal den åbne eller lukke. Hvis temperaturen er +/- 0,1°C fra sætpunkt skal den køre 1 gange tiden, ved +/- 0,2°C 2 gange tiden, ved +/- 0,3°C 4 gange tiden, osv.

Problemet er at programmet i simulering ser det ud til at virke, men når jeg lægger programmet i controlleren virker det ikke.

Tælleren skal skifte til den værdi som er i Antal tid op/ned ved ? °C svarende til temperatur afvigelse, det gør den i simulering, men ikke i controlleren.

Har prøvet at programmere på mange måder men ingen af dem har virket, så jeg håber at der her er en der kan hjælpe mig videre.

 

MVH Michael

regulator (pid).vis

Link til kommentar
Del på andre sites

12 svar på dette spørgsmål

Recommended Posts

  • 0

Sider ikke lige med en PC og kan kikke i dit projekt, men hvis du har programmeret det med den nye visual software hvor det er muligt at gange/dividere, så virker det sandsynligvis fint i simulering, men sandsynligvis ikke hvis det lykkedes dig at få oploader programmet til en controller der kører med en ældre firmware der ikke understøtter gange/divider. Det burde dog ikke være muligt at loade programmet så men .....med LK ved man aldrig hvad der går godt/skidt. 

Link til kommentar
Del på andre sites

  • 0

Har checket om der var en af LK's funktionsblokke jeg kunne bruge, men det mener jeg ikke der er, da det det er en motor der skal åbne og lukke en ventil. I en standard varmestyring funktionsblok er der godt nok puls funktion men kun til åbne, mangler en til lukke når temperaturen bliver for høj.

Bruger visual 2.7.349 og den har vist ikke gange/dividere, firmware er version 2.7.199.

Link til kommentar
Del på andre sites

  • 0

Motoren er bare en lille gearmotor som jeg vender + og - for op og ned i temperatur.

Det jeg har prøvet at programmere er en form for PID regulator hvor pausetimeren er I, den skal muligvis stilles på en højere værdi. P er så tallene i antal tid op/ned som skal sættes ind i tælleren, så jo længere den er fra sætpunkt det længere tid, skal den køre, svarende til den afvigelse der er i forhold til  temperatur aktuel. dvs. at hvis temperatur sætpunkt er 22 grader og den aktuelle er 21,7 skal værdien 4 blive sat ind i tælleren og når pausetimeren kom til nul skal udgang temperatur op være ON 4 gang tiden "køre tid op" i alt 40 sekunder. Problemet er at få "antal tid op/ned" lagt ind i tælleren.

Link til kommentar
Del på andre sites

  • 0

Jeg har kigget i dit program, der er fler steder hvor du har underprogrammer uden argumenter, det bør du starte med at få rettet.

Hos mig kører dit program IKKE under simulering.

Anbefaling: Beskriv hvad programmet skal gøre ved alle inputs, det lyder måske banalt, men beskrivelses processen giver det nødvendige overblik, hvilket gør programmeringen langt lettere. Start evt. med en overordnet beskrivelse som så kan udspecificeres.

Link til kommentar
Del på andre sites

  • 0

Hej Michael

Jeg har lavet et lille simpelt forslag til dig som typisk vil være ok, du kan evt. selv arbejde videre på det.

Jeg antager at du måler på vand som har et højt energiniveau, dette sammenholdt med den hurtige opdatering af temperatursensorens værdier, bevirker at jeg ikke ser nogen grund til alle mellemregningerne.

Jeg har indført en hysterese, er temperaturen inden for dette område stoppes ventilen, er temperaturen under, åbens "Hæve" ventilen. Er den over åbens "Sænke".

Det er selvfølgelig et langskud når jeg ikke kender dine faktiske produkter og deres fysiske placering i anlægget samt deres reaktionstid. Kan det bruges er der super, ellers må det sendes til de evige bit-marker.

MG.vis

Link til kommentar
Del på andre sites

  • 0

Hej Henning

Tusind tak for programmet

Det var lige det jeg manglede, en simpel termostat til at starte med. Jeg har så været ved at bygge videre på den. Jeg har enlig bare lagt 5 af den samme program ind som du lavede, med 5 forskellige hysterese  ind, så for jeg de 5 trin som jeg godt kunne tænke mig, timer og tæller har jeg slettet, det må komme senere, når det første virker, for det gør det ikke.

setpunkt som jeg har testet med er 23 grader har en temperatur aktuel på 23,7 grader og lader temperaturen falde stille og rolig, kommer der i temperatur differens 0,5 til at stå -0,6 og i  temperatur differens 0,4 til at stå -0,4 og i  temperatur differens 0,3 til at stå -0,3 og i  temperatur differens 0,2 til at stå -0,2 og i  temperatur differens 0,1 til at stå -0,2, men 0,5 skulle der have stået -0,5 og i 0,1 skulle der have stået -0,1.( se billede 1)  Hvis jeg i serviceView ændrer temperaturen i sæt aktuel værdi kommer der til at stå de rigtige tal. (se billede 2).

Er der nogen som har et bud på hvorfor, at vis jeg skifter værdien virker det som var planen, men vis termostaten gør det virker det ikke helt som det skal.

billede 1.png

billede 2.jpg

regulator test.vis

Link til kommentar
Del på andre sites

  • 0

Kan godt forstå ambitionen om at lave programmet med (d)en ideelle PID regulering. Men er det overhovedet nødvendigt som Henning også har nævnt ?

Hvad er det du skal styre så nøjagtigt ? Er det gulvvarme så er der så meget træghed/hysterese i selv "let gulvvarme" at det ikke giver meget effekt i praksis at ventilen lige åbnet 1/8 til 1/4 mere, for at "indhente" det som temperaturen er "bagud". 

Men selvfølgelig det kommer helt an på hvad der har højest prioritet, Pinlig nøjagtig regulering så man afviger mindst muligt fra setpunkt, eller mest "økonomisk" drift inden for et acceptabelt driftsområde. Det første kræver nemlig du har "masser af kræfter", læs tilpads høj temperatur differens, og det har man sjældent i en gulvvarme system. der har man ofte kun 5-8 grader at gøre godt med. Så der hjælper det ikke meget at skrue mere op for ventilen, men kun vente på at varmen kommer.

Og ja det giver så "diskomfort" med "overshot" og perioder med for lidt, varme. Men det er så prisen for at gøre det så driftsøkonomisk som muligt.

Link til kommentar
Del på andre sites

  • 0

Jo Lars det er som du skriver store ambitioner nok også lidt for store.

Jeg har i dag en blandesløjfe som jeg styrer ved at en timer tæller hvor mange timer aktuator til gulvvarmen er åben i 24 timer, er det åben i mere en 20 timer skruer den lidt op for blandesløjfen og er den under 12 timer, skruer den lidt ned for blandesløjfen temperaturen. Dette virker som sådan godt nok,  men vis temperaturen falder meget i løbet af kort tid, har denne måde at styre det på, svært ved at følge med. Har også tænkt på måske at gøre det flere gange i døgnet kunne være løsning, men så kom tanken om ikke man kunne bygge en regulator som kunne gøre det, men kan godt se at det er lidt svært i IHC.

Det er selvfølgelig også en mulighed at sætte antal timer ned , og dermed en højere retur temperatur, det betyder som sådan ikke noget for 1 grad koster under 50kr, så man skal ikke gøre det for pengenes skyld. Det var for at det kunne passe sig selv hele året uden at man lige manuel skal ind og skrue op en gang imellem.

Link til kommentar
Del på andre sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gæst
Svar på dette spørgsmål

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loader...
 Share

×
×
  • Tilføj...

Important Information

Privatlivspolitik og We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.

1200x630bb.png

ok