Σελίδα 1 από 2 1 2 ΤελευταίαΤελευταία
Εμφάνιση αποτελεσμάτων : 1 έως 10 από 13

Θέμα: HELP !! PID Controller με Mathematica προγραμμ.

  1. #1
    Νέο Μέλος
    Όνομα
    Νικος
    Εγγραφή
    Oct 2011
    Περιοχή
    αθηνα
    Μηνύματα
    12

    Προεπιλογή HELP !! PID Controller με Mathematica προγραμμ.

    Γεια σας παιδιά,εχω πτυχιακη εργασια μια εφαρμογη μιας υδραυλικης αναρτησης με ελεγχο PID και το κανω στο mathematica οποιος ξερει απο Mathematica και μπορει να βοηθησει λιγο ας κανει ενα κοπο ,εχω κολλησει καπου με τον κωδικα !ΤΕΙ Αυτοματισμου!οποιος θελει να βοηθησει ασ στειλεει ΠΜ.Ευχαριστώ

    0 Not allowed! Not allowed!

  2. #2
    Μέλος
    Όνομα
    Όνομα
    Εγγραφή
    Nov 2009
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    197

    Προεπιλογή

    Για πες αναλυτικά μήπως και βρεθεί άκρη...

    0 Not allowed! Not allowed!

  3. #3
    Νέο Μέλος
    Όνομα
    Νικος
    Εγγραφή
    Oct 2011
    Περιοχή
    αθηνα
    Μηνύματα
    12

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από somone Εμφάνιση μηνυμάτων
    Για πες αναλυτικά μήπως και βρεθεί άκρη...
    εχω τον χωρο καταστασης ετοιμο, Α,Β,C και κανω το Pclose(κλειστο συστημα το χαρακ.πολυωνυμο) με τον PID:
    Pcl = Collect[Simplify[s*Det[s*IdentityMatrix[6] - A + B.c*PID]], s], και βγαζει το πολυωνυμο 7ης ταξης με τα Ki,Kp,Kd κερδη μεσα,
    μετα κανω routh πινακα!
    Routh = ( {
    {S7, S5, S3, S1},
    {S6, S4, S2, S0},
    {b1, b2, b3, 0},
    {c1, c2, c3, 0},
    {d1, d2, 0, 0},
    {e1, e2, 0, 0},
    {f1, 0, 0, 0},
    {S0, 0, 0, 0}
    } )

    και φτιαχνω τις οριζουσες για b1,c1,d1,e1,f1 kai τα θελω >0. και το κανω με reduce kai findinstance εντολες. τωρα οποιος δεν βαριεται να ριξει μια ματια στον κωδικα να του εξηγησω περεταιρω!ευχαριστω

    0 Not allowed! Not allowed!

  4. #4
    Μέλος
    Όνομα
    Όνομα
    Εγγραφή
    Nov 2009
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    197

    Προεπιλογή

    Αν είναι κάτι προγραμματιστικό ίσως μπορώ να σε βοηθήσω, ανέβασε κώδικα αν είναι...

    0 Not allowed! Not allowed!

  5. #5
    Νέο Μέλος
    Όνομα
    Νικος
    Εγγραφή
    Oct 2011
    Περιοχή
    αθηνα
    Μηνύματα
    12

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από somone Εμφάνιση μηνυμάτων
    Αν είναι κάτι προγραμματιστικό ίσως μπορώ να σε βοηθήσω, ανέβασε κώδικα αν είναι...
    PID mathematica.pdf
    to pid kodikas

    0 Not allowed! Not allowed!

  6. #6
    Μέλος
    Όνομα
    Όνομα
    Εγγραφή
    Nov 2009
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    197

    Προεπιλογή

    Λοιπόν το κοίταξα λίγο, τώρα δεν ξέρω αν φτέει το pdf (καλύτερα να ανέβαζες το .nb) αλλά βρήκα ένα λάθος σε αυτές τις εκφράσεις:

    f1=-(Det[Routh[[{5,6},{1,2}]]]/e1)

    όπου το Routh[[{5,6},{1,2}]] το έχει στο pdf με ένα bracket δηλαδή έτσι Routh[{5,6},{1,2}].

    Επίσης, αυτό S0=(Pcl)[[1]] μήπως είναι S0=(Pcl)[[1,2]];;

    Και τέλος αυτό S0=S0=(Out[23])[[1]] δεν το κατάλαβα, και σίγουρα δεν είναι καλή ιδέα να φτίαχνεις το πρόγραμμα σου έτσι ώστε να εξαρτάτε από τον αριθμό που έχουν οι προηγούμενοι έξοδοι.
    Κατά τα άλλα το πρόγραμμα φαίνεται να λειτουργεί (δεν έιχα χρόνο να το αφήσω να ολοκληρωθεί για να δω αν κολάει κάπου ). Αν είναι κάτι άλλο καλύτερα ανέβασε το nb και πες ακριβώς τι πρόβλημα αντιμετωπίζεις...

    0 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη somone : 19-04-12 στις 13:44

  7. #7
    Νέο Μέλος
    Όνομα
    Νικος
    Εγγραφή
    Oct 2011
    Περιοχή
    αθηνα
    Μηνύματα
    12

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από somone Εμφάνιση μηνυμάτων
    Λοιπόν το κοίταξα λίγο, τώρα δεν ξέρω αν φτέει το pdf (καλύτερα να ανέβαζες το .nb) αλλά βρήκα ένα λάθος σε αυτές τις εκφράσεις:

    f1=-(Det[Routh[[{5,6},{1,2}]]]/e1)

    όπου το Routh[[{5,6},{1,2}]] το έχει στο pdf με ένα bracket δηλαδή έτσι Routh[{5,6},{1,2}].

    Επίσης, αυτό S0=(Pcl)[[1]] μήπως είναι S0=(Pcl)[[1,2]];;

    Και τέλος αυτό S0=S0=(Out[23])[[1]] δεν το κατάλαβα, και σίγουρα δεν είναι καλή ιδέα να φτίαχνεις το πρόγραμμα σου έτσι ώστε να εξαρτάτε από τον αριθμό που έχουν οι προηγούμενοι έξοδοι.
    Κατά τα άλλα το πρόγραμμα φαίνεται να λειτουργεί (δεν έιχα χρόνο να το αφήσω να ολοκληρωθεί για να δω αν κολάει κάπου ). Αν είναι κάτι άλλο καλύτερα ανέβασε το nb και πες ακριβώς τι πρόβλημα αντιμετωπίζεις...
    Λοιπον Πρωτα απολα να σε ευχαριστισω για τον κοπο σου.Οσο για το S0=S0=(Out[23])[[1]] το αλλαξα και εβαλα αυτο π φαινεται στο κωδικα!το f1 καλα ηταν δεν ειχε λαθος και το S0=(Pcl)[[1]] ειναι οπως ειναι γιατι βγαζει τον συντελεστη του S^0 τον σταθερο ορο δλδ με το Κi.Στελνω τον κωδικα σε word gt δεν αναγνωριζει το .nb αρχειο.ΚΑι το κυριο προβλημα μ ειναι οτι οταν τρεχω τους αγνωστους στο πινακα ROuth τρεχει μεχρι το e2 με μια μικρη καθυεστερηση οπως φαινεται και κολλαει στο να μ βγαλει το f1 και την τελευταια γραμμη κωδικα που 8α μου εβγαζε τυχαια Ki.Kp.Kd που να ευσταθιοποιουν το συστημα!δεν μπορω να ανεβασω αλο αρχειο εκτοσ απο pdf.
    Κώδικας:
    In[1]:= A = ( {
       {0, -1, 0, 0, 0, 0},
       {Kt/mu, -(Ct + Cs)/mu, -Ks/mu, Cs/mu, -Ap/mu, 0},
       {0, 1, 0, -1, 0, 0},
       {0, Cs/ms, Ks/ms, -Cs/ms, Ap/ms, 0},
       {0, Ap*a, 0, -Ap*a, -a*Ctm, a*Cd*Sqrt[Ps/p]*w},
       {0, 0, 0, 0, 0, -1/T}
      } )
    B = ( {
       {0},
       {0},
       {0},
       {0},
       {0},
       {k/T}
      } )
    c = ( {
       {0, 0, 0, 0, 0, 1}
      } )
    
    Out[1]= {{0, -1, 0, 0, 0, 0}, {Kt/mu, (-Cs - Ct)/mu, -(Ks/mu), Cs/
      mu, -(Ap/mu), 0}, {0, 1, 0, -1, 0, 0}, {0, Cs/ms, Ks/ms, -(Cs/ms), 
      Ap/ms, 0}, {0, a Ap, 0, -a Ap, -a Ctm, a Cd Sqrt[Ps/p] w}, {0, 0, 0,
       0, 0, -(1/T)}}
    
    Out[2]= {{0}, {0}, {0}, {0}, {0}, {k/T}}
    
    Out[3]= {{0, 0, 0, 0, 0, 1}}
    
    In[4]:= Ap = 0.0044
    Cd = 0.7
    Ctm = 15*10^-12
    Cs = 12000
    Ct = 200
    k = 1481
    Ks = 240
    Kt = 1000
    kv = 2.1
    ms = 2800
    mu = 270
    Ps = 20684
    w = 0.008
    p = 3500
    a = 2.273*10^9
    T = 1/15
    v = 1
    
    Out[4]= 0.0044
    
    Out[5]= 0.7
    
    Out[6]= 3/200000000000
    
    Out[7]= 12000
    
    Out[8]= 200
    
    Out[9]= 1481
    
    Out[10]= 240
    
    Out[11]= 1000
    
    Out[12]= 2.1
    
    Out[13]= 2800
    
    Out[14]= 270
    
    Out[15]= 20684
    
    Out[16]= 0.008
    
    Out[17]= 3500
    
    Out[18]= 2.273*10^9
    
    Out[19]= 1/15
    
    Out[20]= 1
    
    In[21]:= PID = Kp + Ki/s + Kd*s
    
    
    Out[21]= Kp + Ki/s + Kd s
    
    In[22]:= Pcl = 
     Collect[Simplify[s*Det[s*IdentityMatrix[6] - A + B.c*PID]], s]
    
    Out[22]= 240.451 Ki + 
     1. (0.162357 + 1.31221*10^6 Ki + 240.451 Kp) s + 
     1. (886.044 + 240.451 Kd + 618596. Ki + 1.31221*10^6 Kp) s^2 + 
     1. (476.757 + 1.31221*10^6 Kd + 4.18171*10^6 Ki + 618596. Kp) s^3 + 
     1. (2851.42 + 618596. Kd + 1.09975*10^6 Ki + 4.18171*10^6 Kp) s^4 + 
     1. (930.813 + 4.18171*10^6 Kd + 22215 Ki + 1.09975*10^6 Kp) s^5 + 
     1. (64.505 + 1.09975*10^6 Kd + 22215 Kp) s^6 + 1. (1 + 22215 Kd) s^7
    
    In[23]:= 
    S7 = (Pcl)[[8, 2]]
    S6 = (Pcl)[[7, 2]]
    S5 = (Pcl)[[6, 2]]                                                  
    S4 = (Pcl)[[5, 2]]
    S3 = (Pcl)[[4, 2]]
    S2 = (Pcl)[[3, 2]]
    S1 = (Pcl)[[2, 2]]
    S0 = (Pcl)[[1]]
    
    Out[23]= 1 + 22215 Kd
    
    Out[24]= 64.505 + 1.09975*10^6 Kd + 22215 Kp
    
    Out[25]= 930.813 + 4.18171*10^6 Kd + 22215 Ki + 1.09975*10^6 Kp
    
    Out[26]= 2851.42 + 618596. Kd + 1.09975*10^6 Ki + 4.18171*10^6 Kp
    
    Out[27]= 476.757 + 1.31221*10^6 Kd + 4.18171*10^6 Ki + 618596. Kp
    
    Out[28]= 886.044 + 240.451 Kd + 618596. Ki + 1.31221*10^6 Kp
    
    Out[29]= 0.162357 + 1.31221*10^6 Ki + 240.451 Kp
    
    Out[30]= 240.451 Ki
    
    
    Routh = ( {
       {S7, S5, S3, S1},
       {S6, S4, S2, S0},
       {b1, b2, b3, 0},
       {c1, c2, c3, 0},
       {d1, d2, 0, 0},
       {e1, e2, 0, 0},
       {f1, 0, 0, 0},
       {S0, 0, 0, 0}
      } )
    
    
    b1 = -(Det[Routh[[{1, 2}, {1, 2}]]]/S6)
    b2 = -(Det[Routh[[{1, 2}, {1, 3}]]]/S6)
    b3 = -(Det[Routh[[{1, 2}, {1, 4}]]]/S6)
    c1 = -(Det[Routh[[{2, 3}, {1, 2}]]]/b1)
    c2 = -(Det[Routh[[{2, 3}, {1, 3}]]]/b1)
    c3 = -(Det[Routh[[{2, 3}, {1, 4}]]]/b1)
    d1 = -(Det[Routh[[{3, 4}, {1, 2}]]]/c1)
    d2 = -(Det[Routh[[{3, 4}, {1, 3}]]]/c1)
    e1 = -(Det[Routh[[{4, 5}, {1, 2}]]]/d1)
    e2 = -(Det[Routh[[{4, 5}, {1, 3}]]]/d1)
    f1 = -(Det[Routh[[{5, 6}, {1, 2}]]]/e1)
    S0 = S0 = (Out[23])[[1]]
    
    
    ex = Expand[Pd = (s*10)^2*(s + 3)^3*3*(s + 1)^2 + s*10 + 150]
    
    CoeffPcl = CoefficientList[Pcl, s]
    CoeffPd = CoefficientList[Pd, s]
    
    
    FindInstance[{CoeffPcl[[1]] - CoeffPd[[1]] == 0}, {Ki, Kp, Kd}]
    FindInstance[{CoeffPcl[[2]] - CoeffPd[[2]] == 0}, {Kp, Kd, Ki}]
    FindInstance[{CoeffPcl[[3]] - CoeffPd[[3]] == 0}, {Kd, Ki, Kp}]
    FindInstance[{CoeffPcl[[4]] - CoeffPd[[4]] == 0}, {Ki, Kp, Kd}]
    FindInstance[{CoeffPcl[[5]] - CoeffPd[[5]] == 0}, {Ki, Kp, Kd}]
    FindInstance[{CoeffPcl[[6]] - CoeffPd[[6]] == 0}, {Ki, Kp, Kd}]
    FindInstance[{CoeffPcl[[7]] - CoeffPd[[7]] == 0}, {Ki, Kp, Kd}]
    FindInstance[{CoeffPcl[[8]] - CoeffPd[[8]] == 0}, {Ki, Kp, Kd}]
    
    KiKpKd = FindInstance[
      Reduce[S7 > 0 && S6 > 0 && S0 > 0 && b1 > 0 && c1 > 0 && d1 > 0 && 
        e1 > 0 && f1 > 0, {Ki, Kp, Kd}], {Ki, Kp, Kd}]

    0 Not allowed! Not allowed!

  8. #8
    Μέλος
    Όνομα
    Όνομα
    Εγγραφή
    Nov 2009
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    197

    Προεπιλογή

    Λοιπόν, σχετικά με τις ορίζουσες θα το κάνεις ως εξης:
    Κώδικας:
    fb1 = -(Det[Routh[[{1, 2}, {1, 2}]]]/S6)
    fb2 = -(Det[Routh[[{1, 2}, {1, 3}]]]/S6)
    fb3 = -(Det[Routh[[{1, 2}, {1, 4}]]]/S6)
    fc1 = -(Det[Routh[[{2, 3}, {1, 2}]]]/b1)
    fc2 = -(Det[Routh[[{2, 3}, {1, 3}]]]/b1)
    fc3 = -(Det[Routh[[{2, 3}, {1, 4}]]]/b1)
    fd1 = -(Det[Routh[[{3, 4}, {1, 2}]]]/c1)
    fd2 = -(Det[Routh[[{3, 4}, {1, 3}]]]/c1)
    fe1 = -(Det[Routh[[{4, 5}, {1, 2}]]]/d1)
    fe2 = -(Det[Routh[[{4, 5}, {1, 3}]]]/d1)
    ff1 = -(Det[Routh[[{5, 6}, {1, 2}]]]/e1)
    και μετά θα αντικαταστήσεις αυτά στα b1 b2 κλπ. δηλαδή μετά κάνεις

    Κώδικας:
    b1 = fb1; b2=fb2; b3=fb3 κλπ.
    Αυτό γιατί τα b1 b2 κλπ είναι μέσα στον πίνακα Routh και έτσι όπως το έχεις τώρα κάθε φορά που υπολογίζεται μια ορίζουσα αυτά πέρνουν τιμές και έτσι ο πίνακας γίνεται πιο πολύπλοκος για τον υπολογισμό των επόμενων οριζουσών.

    Για το τελικό αποτέλσμα τώρα αυτή η σχέση
    Κώδικας:
    S7 > 0 && S6 > 0 && S0 > 0 && b1 > 0 && c1 > 0 && d1 > 0 &&  e1 > 0 && f1 > 0, {Ki, Kp, Kd}
    που θες να λύσεις είναι αρκετά πολύπλοκη αν δεις την εξίσωση που αντιπροσωπεύει το κάθε ένα απο αυτά τα σύμβολα. Μπορείς να δοκιμάσεις να αφήσεις τo mathematica για κάποιο χρονικό διάστημα μήπως και την λύσει αλλιώς θα πρέπει με κάποιο τρόπο να απλοποιήσεις τα πράγματα. Τώρα το πως θα γίνει αυτό δεν το ξέρω, ίσως να συζητήσεις με τον καθηγητή σου. Επίσης το S0 = S0 = (Out[23])[[1]] πάλι δεν βλέπω να το έχεις αλλάξει.

    0 Not allowed! Not allowed!

  9. #9
    Νέο Μέλος
    Όνομα
    Νικος
    Εγγραφή
    Oct 2011
    Περιοχή
    αθηνα
    Μηνύματα
    12

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από somone Εμφάνιση μηνυμάτων
    Λοιπόν, σχετικά με τις ορίζουσες θα το κάνεις ως εξης:
    Κώδικας:
    fb1 = -(Det[Routh[[{1, 2}, {1, 2}]]]/S6)
    fb2 = -(Det[Routh[[{1, 2}, {1, 3}]]]/S6)
    fb3 = -(Det[Routh[[{1, 2}, {1, 4}]]]/S6)
    fc1 = -(Det[Routh[[{2, 3}, {1, 2}]]]/b1)
    fc2 = -(Det[Routh[[{2, 3}, {1, 3}]]]/b1)
    fc3 = -(Det[Routh[[{2, 3}, {1, 4}]]]/b1)
    fd1 = -(Det[Routh[[{3, 4}, {1, 2}]]]/c1)
    fd2 = -(Det[Routh[[{3, 4}, {1, 3}]]]/c1)
    fe1 = -(Det[Routh[[{4, 5}, {1, 2}]]]/d1)
    fe2 = -(Det[Routh[[{4, 5}, {1, 3}]]]/d1)
    ff1 = -(Det[Routh[[{5, 6}, {1, 2}]]]/e1)
    και μετά θα αντικαταστήσεις αυτά στα b1 b2 κλπ. δηλαδή μετά κάνεις

    Κώδικας:
    b1 = fb1; b2=fb2; b3=fb3 κλπ.
    Αυτό γιατί τα b1 b2 κλπ είναι μέσα στον πίνακα Routh και έτσι όπως το έχεις τώρα κάθε φορά που υπολογίζεται μια ορίζουσα αυτά πέρνουν τιμές και έτσι ο πίνακας γίνεται πιο πολύπλοκος για τον υπολογισμό των επόμενων οριζουσών.

    Για το τελικό αποτέλσμα τώρα αυτή η σχέση
    Κώδικας:
    S7 > 0 && S6 > 0 && S0 > 0 && b1 > 0 && c1 > 0 && d1 > 0 &&  e1 > 0 && f1 > 0, {Ki, Kp, Kd}
    που θες να λύσεις είναι αρκετά πολύπλοκη αν δεις την εξίσωση που αντιπροσωπεύει το κάθε ένα απο αυτά τα σύμβολα. Μπορείς να δοκιμάσεις να αφήσεις τo mathematica για κάποιο χρονικό διάστημα μήπως και την λύσει αλλιώς θα πρέπει με κάποιο τρόπο να απλοποιήσεις τα πράγματα. Τώρα το πως θα γίνει αυτό δεν το ξέρω, ίσως να συζητήσεις με τον καθηγητή σου. Επίσης το S0 = S0 = (Out[23])[[1]] πάλι δεν βλέπω να το έχεις αλλάξει.
    Ναι το τελευτιαο S0 δεν το ειχα προσεξει καλως.Οσο για τα αλλα ο μονος τροπος να το υπο΄λογισω θελει με mathematica μονο ο καθηγητης.Και το θεμα ειναι οτι πρεπει να μ βγαλει οπωςδηοοτε τις τιμες των οριζουσων αλλιως δδεν θα μ δουλευει η τελευταια εντολη και δεν θ αμ βγαζει αποτελεσμα ,δλδ μια τυχαια τιμη Κi,Kp,Kd που να ικανοποιει την συνθηκη ωστε να ειναι ευσταθες.Οκ ευχαριστω παντωσ θα δω τι 8α κανω

    0 Not allowed! Not allowed!

  10. #10
    Μέλος
    Όνομα
    Όνομα
    Εγγραφή
    Nov 2009
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    197

    Προεπιλογή

    Διάβασε πιο προσεκτικά τι γράφω, τις ορίζουσες με το mathematica θα τις βγάλεις, απλά στο πρόγραμμά σου θα κάνεις την αλλαγή που σου λεω παραπάνω.

    0 Not allowed! Not allowed!

Σελίδα 1 από 2 1 2 ΤελευταίαΤελευταία

Παρόμοια Θέματα

  1. PID controller
    By Gaou in forum Ερωτήσεις Αρχάριων
    Απαντήσεις: 4
    Τελευταίο Μήνυμα: 14-07-15, 20:14
  2. REX-C100 PID Controller Λίγη Βοήθεια...
    By Highlander in forum Αυτοματισμοί
    Απαντήσεις: 5
    Τελευταίο Μήνυμα: 19-06-14, 14:39
  3. Αλγόριθμος για discrete PID controller
    By basjot in forum Μικροελεγκτές
    Απαντήσεις: 8
    Τελευταίο Μήνυμα: 12-08-09, 10:11
  4. Αναζήτηση PID
    By tenelec in forum Ηλεκτρονικά
    Απαντήσεις: 8
    Τελευταίο Μήνυμα: 12-12-07, 21:38

Δικαιώματα - Επιλογές

  • Δημιουργία θεμάτων: Όχι
  • Υποβολή μηνυμάτων: Όχι
  • Σύναψη αρχείων: Όχι
  • Επεξεργασία μηνυμάτων: Όχι
  •  
  • BB code: σε λειτουργία
  • Smilies: σε λειτουργία
  • [IMG]: σε λειτουργία
  • [VIDEO] code is σε λειτουργία
  • HTML: εκτός λειτουργίας