Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad

Algoritmo de Pertenencia para Matrices de 3x3, Ejercicios de Informática

Este documento contiene un código en VB.NET que implementa un algoritmo de pertenencia para matrices de 3x3. Las matrices involucradas son Matriz1M3, Matriz2M3 y Matriz3M3, y se calculan las componentes AM3, BM3, CCM3, DDM3, VPropocionalM3 y VDerivativoM3. El código incluye botones para mostrar y ocultar diferentes componentes de la matriz y tablas para mostrar los resultados.

Qué aprenderás

  • ¿Qué matrices se utilizan en el algoritmo de pertenencia para matrices de 3x3?
  • ¿Qué tablas se utilizan para mostrar los resultados en el código?
  • ¿Cómo se ocultan y muestran diferentes componentes de la matriz en el código?
  • ¿Cómo se calculan las componentes AM3, BM3, CCM3, DDM3, VPropocionalM3 y VDerivativoM3?

Tipo: Ejercicios

2020/2021

Subido el 27/07/2021

ricardo-casallas
ricardo-casallas 🇨🇴

6 documentos

1 / 13

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
CONTROL DIFUSO
Abstract— This report is the result of the practice carried out
in the elaboration of the PD controllers for an arm with three
degrees of freedom, the elaboration is carried out by means of a
graphical interface in which the whole process is visualized and is
executed to verify correct operation. This is the continuation of
the first elaboration where only each axis was given movement.
Index Terms Controller, Diffuse, Error, Fuzzification,
Processing.
Palabras Clave Controlador, Difuso, Error, Fuzzificación,
Procesamiento.
I. INTRODUCCION
STE informe es el resultado de la practica realizada en la
elaboración de los controladores PD para un brazo con
tres grados de libertad, se realiza la elaboración mediante una
interfaz gráfica en la cual se visualiza todo el proceso y se
ejecuta para así comprobar un correcto funcionamiento, esta es
la continuación de la primer elaboración donde únicamente se
le dio movimiento a cada eje.
E
II.OBJETIVO GENERAL
Generar un brazo de tres grados de libertad / posición
angular en el cual se aplique un controlador PD usando lógica
difusa.
III. OBJETIVOS ESPECÍFICOS
Dar libertad independiente a cada eje del brazo.
Cada eje debe llevar un controlador PD
independiente.
Detallar el error proporcional la derivada del error
en el controlador.
IV. RESULTADOS
El mecanismo desarrollado consiste en la elaboración de un
brazo robótico de tres grados de libertad el cual debe contar
con variación de velocidad, captura de posición angular y
control manual independiente de los tres motores, siendo
operado y monitoreado mediante un sistema Scada
Cada motor integrado cuenta con una libertad de 180°,
controlado independientemente con su respectiva variación de
velocidad y visualizando la posición angular. Al integrarse en
la estructura cumple el requerimiento de posicionar la
extremidad superior del brazo robótico en una posición
determinada en el espacio (X, Y, Z) donde se genera un
control PD para cada eje.
Para poder generar los controladores PD primero se deben
crear los conjuntos, en nuestro caso se utilizaron 7 para el
error proporcional y la misma cantidad para el error
derivativo, estos conjuntos se pueden detallar en:
Conjunto Derivativo
Conjunto Proporcional
Diseño Controladores PD para brazo de tres
grados de libertad
Jose Ricardo Casallas Triana – Luis Daniel Rincón Ramos – Eddy Santiago Casallas Triana
pf3
pf4
pf5
pf8
pf9
pfa
pfd

Vista previa parcial del texto

¡Descarga Algoritmo de Pertenencia para Matrices de 3x3 y más Ejercicios en PDF de Informática solo en Docsity!

Abstract — This report is the result of the practice carried out

in the elaboration of the PD controllers for an arm with three

degrees of freedom, the elaboration is carried out by means of a

graphical interface in which the whole process is visualized and is

executed to verify correct operation. This is the continuation of

the first elaboration where only each axis was given movement.

Index Terms — Controller, Diffuse, Error, Fuzzification,

Processing.

Palabras Clave — Controlador, Difuso, Error, Fuzzificación,

Procesamiento.

I. INTRODUCCION STE informe es el resultado de la practica realizada en la elaboración de los controladores PD para un brazo con tres grados de libertad, se realiza la elaboración mediante una interfaz gráfica en la cual se visualiza todo el proceso y se ejecuta para así comprobar un correcto funcionamiento, esta es la continuación de la primer elaboración donde únicamente se le dio movimiento a cada eje.

E

II.OBJETIVO GENERAL Generar un brazo de tres grados de libertad / posición angular en el cual se aplique un controlador PD usando lógica difusa. III. OBJETIVOS ESPECÍFICOS  Dar libertad independiente a cada eje del brazo.  Cada eje debe llevar un controlador PD independiente.  Detallar el error proporcional la derivada del error en el controlador.  IV. RESULTADOS El mecanismo desarrollado consiste en la elaboración de un brazo robótico de tres grados de libertad el cual debe contar con variación de velocidad, captura de posición angular y control manual independiente de los tres motores, siendo operado y monitoreado mediante un sistema Scada Cada motor integrado cuenta con una libertad de 180°, controlado independientemente con su respectiva variación de velocidad y visualizando la posición angular. Al integrarse en la estructura cumple el requerimiento de posicionar la extremidad superior del brazo robótico en una posición determinada en el espacio (X, Y, Z) donde se genera un control PD para cada eje. Para poder generar los controladores PD primero se deben crear los conjuntos, en nuestro caso se utilizaron 7 para el error proporcional y la misma cantidad para el error derivativo, estos conjuntos se pueden detallar en: Conjunto Derivativo Conjunto Proporcional

Diseño Controladores PD para brazo de tres

grados de libertad

Jose Ricardo Casallas Triana – Luis Daniel Rincón Ramos – Eddy Santiago Casallas Triana

Con estos conjuntos debemos realizar la parte matemática para así conseguir nuestros grados de pertenencia, tanto en el error derivativo como en el error proporcional, seguido de esto se crea la matriz de mínimos en continuación a esta matriz se debe multiplicar por la matriz de centros la cual se planteó según nuestras necesidades basado en la siguiente matriz lingüística FAM. Se suman todos los valores de la matriz resultante de la multiplicación de las matrices anteriores y a eso se le divide la suma de todos los valores que contiene la matriz de los mínimos para dar como resultado la salida del controlador denominada como Y. Las entradas del error proporcional se toman como:  Error Proporcional: Diferencia entre el Valor deseado y Valor medido La entrada del error derivativo se toma como:  Derivada de Error: Diferencia entre el Error pasado y el Error presente REGLAS Y VARIABLES LINGUISTICAS Las anteriores variables lingüísticas se entienden como:  Movimiento grande +/- : Modulación aplicada al motor para llegar a una velocidad en este caso rápida.  Movimiento mediano +/- : Modulación aplicada al motor para llegar a una velocidad en este caso media.  Movimiento pequeño +/- : Modulación aplicada al motor para llegar a una velocidad en este caso baja.  Frenado grande +/- : Velocidad en sentido contrario aplicada al motor para desacelerar en este caso alta.  frenado mediano +/- : Velocidad en sentido contrario aplicada al motor para desacelerar en este caso media.  frenado pequeño +/- : Velocidad en sentido contrario aplicada al motor para desacelerar en este caso baja.  Detenido: Frenado total del motor debido a que tomo su valor ideal. Al obtener un error proporcional grande negativo y una derivada del error grande positiva deberemos aplicar una modulación por ancho de pulsos máximo, para así dar una respuesta fuerte dado el tamaño del error y la respuesta deseada es corregirlo rápidamente.

Al error proporcional disminuir pero la derivada mantenerse constante se debe tomar el valor de ejercer un frenado pequeño para así acercarse aún más a su objetivo. Con el error proporcional en cero pero la derivada del error sin cambios este tomara un frenado mayor para así comenzar a variar el eje de la derivada del error. Al nuestra derivada del error disminuir a un punto de hacerse pequeña pero nuestro error proporcional mantenerse grande la acción será tomar una velocidad media para así corregir de la mejor forma posible. Nuestra derivada del error se mantendrá constante pero el error proporcional seguirá disminuyendo por lo que pasaremos de una velocidad media a una baja. La derivada del error se mantendrá constante en este caso al igual que los anteriores y el error seguirá disminuyendo cada vez más aproximándose a su valor ideal, por ende comenzara a frenar de una forma suave. La velocidad se mantendrá debido a que al estar tan próximo a su valor deseado debe disminuir aún más la derivada del error para así lograr detenerse por más que el error proporcional se encuentre próximo.

Al la derivada del error llegar a su punto ideal pero el error proporcional ser muy grande necesitaremos una velocidad rápida dado que debe corregir el valor. Nuestra derivada del error se mantendrá constante pero el error proporcional disminuirá un porcentaje lo que hará que la velocidad llegue a un valor intermedio o medio. La derivada del error no cambiara pero el error proporcional continua descendiendo lo que hará tomar una velocidad lenta para así aproximarse a su objetivo. Al el error proporcional volverse ideal y la derivada del error también obtendremos una detención dado que ha obtenido sus valores ideales donde es asumido que llego a su objetivo, donde debe estar para así operar. V. CONCLUSIONES Al momento de crear los conjuntos correspondientes al error derivativo, es necesario tener en cuenta que los valores de los extremos deben ser mayores a los de los conjuntos del error proporcional debido a que si se produce un cambio alto en la diferencia de tiempo pasado y tiempo presente (derivada difusa), el valor será superior al establecido en el proporcional, por ende se debemos utilizar dicho valor aunque este no se vaya a presentar en la tabla. Son de gran importancia las variaciones que se obtienen en nuestra matriz y diferencias las variables y reglas lingüísticas dado que al tener un mal entendimiento de estas o al comprenderlas de una manera errónea todo el proceso se verá involucrado, se deben tener claras las pequeñas diferencias que puedan surgir. Mediante los sistemas de razonamiento difuso es posible establecer un control difuso sobre tareas “sencillas” como controlar la velocidad de un motor, basado en un control proporcional-derivativo hasta llegar al control de grandes plantas o sistemas con un gran avance. Mediante un control PD y su proceso de fuzzyficacion, inferencia difusa, y defuzzyficacion podemos tener una salida y una respuesta de retroalimentación para controlar muchos tipos de plantas que necesiten mayor precisión, o deban realizar tareas complicadas, solamente obteniendo los rangos necesarios y las tareas a realizar se pueden emplear estos controladores con un gran rango de optimización. Podemos concluir que al momento de crear nuestra matriz de centros se debe tener en cuenta el comportamiento del error proporcional frente a la derivada del error, ya que si nos encontramos una derivada del error MP frente a un PN proporcional presentaremos un caso en el cual se está avanzando demasiado rápido, lo que ocasiona que nos pasemos de nuestro objetivo y se requiere un freno.

[96] Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click [97] PictureBox5.Visible = False [98] PictureBox4.Visible = False [99] PictureBox3.Visible = False [100] PictureBox2.Visible = False [101] PictureBox6.Visible = False [102] [103] Button4.Visible = False [104] End Sub [105] [106] Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click [107] PictureBox4.Visible = True [108] Button4.Visible = True [109] End Sub [110] [111] Private Sub BuscarPuerto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BuscarPuerto.Click [112] BuscadorPuerto.Enabled = True [113] BuscadorPuerto.Items.Clear() [114] For Each PuertoDisponible As String In My.Computer.Ports.SerialPortNames [115] BuscadorPuerto.Items.Add(PuertoDisponible) [116] Next [117] If BuscadorPuerto.Items.Count > 0 Then [118] BuscarPuerto.Enabled = False [119] BuscadorPuerto.Text = BuscadorPuerto.Items(0) [120] ConectarDesconectar.Enabled = True [121] Else [122] ConectarDesconectar.Enabled = False [123] BuscadorPuerto.Items.Clear() [124] BuscadorPuerto.Text = (" ") [125] End If [126] End Sub [127] Private Sub ConectarDesconectar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ConectarDesconectar.Click [128] If ConectarDesconectar.Text = "Conectar" Then [129] PuertoSerial.PortName = BuscadorPuerto.Text [130] ConectarDesconectar.Text = "Desconectar" [131] PuertoSerial.Open() [132] BuscadorPuerto.Enabled = False [133] ElseIf ConectarDesconectar.Text = "Desconectar" Then [134] ConectarDesconectar.Text = "Conectar" [135] BuscarPuerto.Enabled = True [136] ConectarDesconectar.Enabled = False [137] PuertoSerial.Close() [138] End If [139] End Sub [140] Private Sub mostrar() [141] Dim valores() As String = DatoRX.Split("+") [142] TextBox1.Text = valores(0) [143] TextBox1M2.Text = valores(1) [144] TextBox1M3.Text = valores(2) [145] End Sub [146] Private Sub PuertoSerial_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles PuertoSerial.DataReceived [147] DatoRX = PuertoSerial.ReadLine [148] Me.Invoke(New EventHandler(AddressOf mostrar)) [149] End Sub [150] Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load [151] '///////////////////////////////////////////////////////////////////////////////// [152] 'PD 1 [153] SumaMinimos = 0 [154] SumaMultiplicacion = 0 [155] Multiplicacion.ColumnCount = 7 [156] Multiplicacion.RowCount = 7 [157] MMinimo.ColumnCount = 7 [158] MMinimo.RowCount = 7 [159] GradoPertenencia.ColumnCount = 1 [160] GradoPertenencia.RowCount = 7 [161] GradoPertenencia2.ColumnCount = 1 [162] GradoPertenencia2.RowCount = 7 [163] MatrizdeCentros.ColumnCount = 7 [164] MatrizdeCentros.RowCount = 7 [165] MatrizdeCentros.AutoResizeRows() [166] MatrizdeCentros.AutoResizeColumns() [167] '///////////////////////////////////////////////////////////////////////////////// [168] 'PD 2 [169] SumaMinimosM2 = 0 [170] SumaMultiplicacionM2 = 0 [171] MultiplicacionM2.ColumnCount = 7 [172] MultiplicacionM2.RowCount = 7 [173] MMinimoM2.ColumnCount = 7 [174] MMinimoM2.RowCount = 7 [175] GradoPertenenciaM2.ColumnCount = 1 [176] GradoPertenenciaM2.RowCount = 7 [177] GradoPertenencia2M2.ColumnCount = 1 [178] GradoPertenencia2M2.RowCount = 7 [179] MatrizdeCentrosM2.ColumnCount = 7 [180] MatrizdeCentrosM2.RowCount = 7 [181] MatrizdeCentrosM2.AutoResizeRows() [182] MatrizdeCentrosM2.AutoResizeColumns() [183] '///////////////////////////////////////////////////////////////////////////////// [184] 'PD 3 [185] SumaMinimosM3 = 0 [186] SumaMultiplicacionM3 = 0 [187] MultiplicacionM3.ColumnCount = 7 [188] MultiplicacionM3.RowCount = 7 [189] MMinimoM3.ColumnCount = 7 [190] MMinimoM3.RowCount = 7 [191] GradoPertenenciaM3.ColumnCount = 1 [192] GradoPertenenciaM3.RowCount = 7 [193] GradoPertenencia2M3.ColumnCount = 1 [194] GradoPertenencia2M3.RowCount = 7 [195] MatrizdeCentrosM3.ColumnCount = 7 [196] MatrizdeCentrosM3.RowCount = 7 [197] MatrizdeCentrosM3.AutoResizeRows() [198] MatrizdeCentrosM3.AutoResizeColumns() [199] [200] Call MCentros() [201] Call MCentrosM2() [202] Call MCentrosM3() [203] [204] [205] End Sub [206] [207] Function PertenenciaEP() [208] [209] '///////////////////////////////////////////////////////////////////////////////// [210] 'PD 1 [211] For x = 0 To 6 [212] [213] Select Case x [214] [215] Case 0 [216] A(x) = - [217] B(x) = - [218] C(x) = - [219] D(x) = - [220] [221] Case 1 [222] A(x) = - [223] B(x) = - [224] C(x) = - [225] D(x) = - [226] Case 2 [227] A(x) = - [228] B(x) = - [229] C(x) = - [230] D(x) = 0 [231] Case 3 [232] A(x) = - [233] B(x) = 0 [234] C(x) = 0 [235] D(x) = 37

[236] Case 4 [237] A(x) = 0 [238] B(x) = 37 [239] C(x) = 37 [240] D(x) = 75 [241] Case 5 [242] A(x) = 37 [243] B(x) = 75 [244] C(x) = 75 [245] D(x) = 110 [246] Case 6 [247] A(x) = 75 [248] B(x) = 110 [249] C(x) = 180 [250] D(x) = 180 [251] [252] End Select [253] [254] [255] Next x [256] [257] For x = 0 To 6 [258] [259] [260] If TextBox1.Text > D(x) Then [261] VPropocional(x) = 0 [262] ElseIf TextBox1.Text > C(x) Then [263] VPropocional(x) = (D(x) - TextBox1.Text) / (D(x) - C(x)) [264] ElseIf TextBox1.Text > B(x) Then [265] VPropocional(x) = 1 [266] ElseIf TextBox1.Text > A(x) Then [267] VPropocional(x) = (TextBox1.Text - A(x)) / (B(x) - A(x)) [268] Else [269] VPropocional(x) = 0 [270] End If [271] GradoPertenencia.Rows.Add(Format(VPropocional(x), "0.000")) [272] GradoPertenencia.AutoResizeColumns() [273] If GradoPertenencia.Rows(x).Cells(0).Value = 0.0 Then GradoPertenencia.Rows(x).Cells(0).Value = "0" [274] Next x [275] End Function [276] Function PertenenciaEPM2() [277] '///////////////////////////////////////////////////////////////////////////////// [278] 'PD 2 [279] For x = 0 To 6 [280] [281] Select Case x [282] [283] Case 0 [284] AM2(x) = - [285] BM2(x) = - [286] CM2(x) = - [287] DM2(x) = - [288] [289] Case 1 [290] AM2(x) = - [291] BM2(x) = - [292] CM2(x) = - [293] DM2(x) = - [294] Case 2 [295] AM2(x) = - [296] BM2(x) = - [297] CM2(x) = - [298] DM2(x) = 0 [299] Case 3 [300] AM2(x) = - [301] BM2(x) = 0 [302] CM2(x) = 0 [303] DM2(x) = 37 [304] Case 4 [305] AM2(x) = 0 [306] BM2(x) = 37 [307] CM2(x) = 37 [308] DM2(x) = 75 [309] Case 5 [310] AM2(x) = 37 [311] BM2(x) = 75 [312] CM2(x) = 75 [313] DM2(x) = 110 [314] Case 6 [315] AM2(x) = 75 [316] BM2(x) = 110 [317] CM2(x) = 180 [318] DM2(x) = 180 [319] [320] End Select [321] [322] [323] Next x [324] [325] For x = 0 To 6 [326] [327] [328] If TextBox1M2.Text > DM2(x) Then [329] VPropocionalM2(x) = 0 [330] ElseIf TextBox1M2.Text > CM2(x) Then [331] VPropocionalM2(x) = (DM2(x) - TextBox1M2.Text) / (DM2(x) - CM2(x)) [332] ElseIf TextBox1M2.Text > BM2(x) Then [333] VPropocionalM2(x) = 1 [334] ElseIf TextBox1M2.Text > AM2(x) Then [335] VPropocionalM2(x) = (TextBox1M2.Text - AM2(x)) / (BM2(x) - AM2(x)) [336] Else [337] VPropocionalM2(x) = 0 [338] End If [339] GradoPertenenciaM2.Rows.Add(Format(VPropocionalM2(x), "0.000")) [340] GradoPertenenciaM2.AutoResizeColumns() [341] If GradoPertenenciaM2.Rows(x).Cells(0).Value = 0.0 Then GradoPertenenciaM2.Rows(x).Cells(0).Value = "0" [342] Next x [343] End Function [344] Function PertenenciaEPM3() [345] '///////////////////////////////////////////////////////////////////////////////// [346] 'PD 3 [347] For x = 0 To 6 [348] [349] Select Case x [350] [351] Case 0 [352] AM3(x) = - [353] BM3(x) = - [354] CM3(x) = - [355] DM3(x) = - [356] [357] Case 1 [358] AM3(x) = - [359] BM3(x) = - [360] CM3(x) = - [361] DM3(x) = - [362] Case 2 [363] AM3(x) = - [364] BM3(x) = - [365] CM3(x) = - [366] DM3(x) = 0 [367] Case 3 [368] AM3(x) = - [369] BM3(x) = 0 [370] CM3(x) = 0 [371] DM3(x) = 37 [372] Case 4 [373] AM3(x) = 0 [374] BM3(x) = 37 [375] CM3(x) = 37 [376] DM3(x) = 75 [377] Case 5 [378] AM3(x) = 37 [379] BM3(x) = 75 [380] CM3(x) = 75

[526]

[527]

[528]

[529] End Select [530] [531] [532] Next x [533] [534] For x = 0 To 6 [535] [536] [537] If TextBox2M3.Text > DDM3(x) Then [538] VDerivativoM3(x) = 0 [539] ElseIf TextBox2M3.Text > CCM3(x) Then [540] VDerivativoM3(x) = (DDM3(x) - TextBox2M3.Text) / (DDM3(x) - CCM3(x)) [541] ElseIf TextBox2M3.Text > BBM3(x) Then [542] VDerivativoM3(x) = 1 [543] ElseIf TextBox2M3.Text > AAM3(x) Then [544] VDerivativoM3(x) = (TextBox2M3.Text - AAM3(x)) / (BBM3(x) - AAM3(x)) [545] Else [546] VDerivativoM3(x) = 0 [547] End If [548] GradoPertenencia2M3.Rows.Add(Format(VDerivativoM3(x), "0.000")) [549] GradoPertenencia2M3.AutoResizeColumns() [550] If GradoPertenencia2M3.Rows(x).Cells(0).Value = 0.0 Then GradoPertenencia2M3.Rows(x).Cells(0).Value = "0" [551] Next x [552] [553] End Function [554] Function PertenenciaDEM2() [555] '///////////////////////////////////////////////////////////////////////////////// [556] 'PD 2 [557] For x = 0 To 6 [558] [559] Select Case x [560] [561] Case 0 [562] AAM2(x) = - [563] BBM2(x) = - [564] CCM2(x) = - [565] DDM2(x) = - [566] [567] Case 1 [568] AAM2(x) = - [569] BBM2(x) = - [570] CCM2(x) = - [571] DDM2(x) = - [572] Case 2 [573] AAM2(x) = - [574] BBM2(x) = - [575] CCM2(x) = - [576] DDM2(x) = 0 [577] Case 3 [578] AAM2(x) = - [579] BBM2(x) = 0 [580] CCM2(x) = 0 [581] DDM2(x) = 17 [582] Case 4 [583] AAM2(x) = 0 [584] BBM2(x) = 17 [585] CCM2(x) = 17 [586] DDM2(x) = 35 [587] Case 5 [588] AAM2(x) = 17 [589] BBM2(x) = 35 [590] CCM2(x) = 35 [591] DDM2(x) = 60 [592] Case 6 [593] AAM2(x) = 35 [594] BBM2(x) = 60 [595] CCM2(x) = 320 [596] DDM2(x) = 320

[597]

[598]

[599] End Select [600] [601] [602] Next x [603] [604] For x = 0 To 6 [605] [606] [607] If TextBox2M2.Text > DDM2(x) Then [608] VDerivativoM2(x) = 0 [609] ElseIf TextBox2M2.Text > CCM2(x) Then [610] VDerivativoM2(x) = (DDM2(x) - TextBox2M2.Text) / (DDM2(x) - CCM2(x)) [611] ElseIf TextBox2M2.Text > BBM2(x) Then [612] VDerivativoM2(x) = 1 [613] ElseIf TextBox2M2.Text > AAM2(x) Then [614] VDerivativoM2(x) = (TextBox2M2.Text - AAM2(x)) / (BBM2(x) - AAM2(x)) [615] Else [616] VDerivativoM2(x) = 0 [617] End If [618] GradoPertenencia2M2.Rows.Add(Format(VDerivativoM2(x), "0.000")) [619] GradoPertenencia2M2.AutoResizeColumns() [620] If GradoPertenencia2M2.Rows(x).Cells(0).Value = 0.0 Then GradoPertenencia2M2.Rows(x).Cells(0).Value = "0" [621] Next x [622] [623] End Function [624] Function Minimos() [625] '///////////////////////////////////////////////////////////////////////////////// [626] 'PD 1 [627] For i = 0 To 6 [628] For j = 0 To 6 [629] [630] If VPropocional(i) <= VDerivativo(j) Then [631] Matriz1(j, i) = VPropocional(i) [632] Else [633] Matriz1(j, i) = VDerivativo(j) [634] End If [635] [636] MMinimo.Rows(j).Cells(i).Value = Format(Matriz1(j, i), "0.0000") [637] SumaMinimos = SumaMinimos + Matriz1(j, i) [638] If MMinimo.Rows(j).Cells(i).Value = 0.0 Then MMinimo.Rows(j).Cells(i).Value = "0" [639] MMinimo.AutoResizeRows() [640] MMinimo.AutoResizeColumns() [641] Next j [642] Next i [643] End Function [644] Function MinimosM2() [645] '///////////////////////////////////////////////////////////////////////////////// [646] 'PD 2 [647] For i = 0 To 6 [648] For j = 0 To 6 [649] [650] If VPropocionalM2(i) <= VDerivativoM2(j) Then [651] Matriz1M2(j, i) = VPropocionalM2(i) [652] Else [653] Matriz1M2(j, i) = VDerivativoM2(j) [654] End If [655] [656] MMinimoM2.Rows(j).Cells(i).Value = Format(Matriz1M2(j, i), "0.0000") [657] SumaMinimosM2 = SumaMinimosM2 + Matriz1M2(j, i) [658] If MMinimoM2.Rows(j).Cells(i).Value = 0.0 Then MMinimoM2.Rows(j).Cells(i).Value = "0" [659] MMinimoM2.AutoResizeRows() [660] MMinimoM2.AutoResizeColumns() [661] Next j [662] Next i [663]

[664] End Function [665] Function MinimosM3() [666] '///////////////////////////////////////////////////////////////////////////////// [667] 'PD 3 [668] For i = 0 To 6 [669] For j = 0 To 6 [670] [671] If VPropocionalM3(i) <= VDerivativoM3(j) Then [672] Matriz1M3(j, i) = VPropocionalM3(i) [673] Else [674] Matriz1M3(j, i) = VDerivativoM3(j) [675] End If [676] [677] MMinimoM3.Rows(j).Cells(i).Value = Format(Matriz1M3(j, i), "0.0000") [678] SumaMinimosM3 = SumaMinimosM3 + Matriz1M3(j, i) [679] If MMinimoM3.Rows(j).Cells(i).Value = 0.0 Then MMinimoM3.Rows(j).Cells(i).Value = "0" [680] MMinimoM3.AutoResizeRows() [681] MMinimoM3.AutoResizeColumns() [682] Next j [683] Next i [684] [685] End Function [686] Function MultiplicacionR() [687] '///////////////////////////////////////////////////////////////////////////////// [688] 'PD 1 [689] For i = 0 To 6 [690] For j = 0 To 6 [691] [692] Matriz2(i, j) = MatrizdeCentros.Rows(i).Cells(j).Value [693] Matriz3(i, j) = Matriz2(i, j) * Matriz1(i, j) [694] Multiplicacion.Rows(i).Cells(j).Value = Format(Matriz3(i, j), "0.0000") [695] SumaMultiplicacion = SumaMultiplicacion + Matriz3(i, j) [696] If Multiplicacion.Rows(j).Cells(i).Value = 0.0 Then Multiplicacion.Rows(j).Cells(i).Value = "0" [697] Multiplicacion.AutoResizeRows() [698] Multiplicacion.AutoResizeColumns() [699] Next j [700] Next i [701] [702] End Function [703] Function MultiplicacionRM2() [704] '///////////////////////////////////////////////////////////////////////////////// [705] 'PD 2 [706] For i = 0 To 6 [707] For j = 0 To 6 [708] [709] Matriz2M2(i, j) = MatrizdeCentrosM2.Rows(i).Cells(j).Value [710] Matriz3M2(i, j) = Matriz2M2(i, j) * Matriz1M2(i, j) [711] MultiplicacionM2.Rows(i).Cells(j).Value = Format(Matriz3M2(i, j), "0.0000") [712] SumaMultiplicacionM2 = SumaMultiplicacionM2 + Matriz3M2(i, j) [713] If MultiplicacionM2.Rows(j).Cells(i).Value = 0.0 Then MultiplicacionM2.Rows(j).Cells(i).Value = "0" [714] MultiplicacionM2.AutoResizeRows() [715] MultiplicacionM2.AutoResizeColumns() [716] Next j [717] Next i [718] [719] End Function [720] Function MultiplicacionRM3() [721] '///////////////////////////////////////////////////////////////////////////////// [722] 'PD 3 [723] For i = 0 To 6 [724] For j = 0 To 6 [725] [726] Matriz2M3(i, j) = MatrizdeCentrosM3.Rows(i).Cells(j).Value [727] Matriz3M3(i, j) = Matriz2M3(i, j) * Matriz1M3(i, j) [728] MultiplicacionM3.Rows(i).Cells(j).Value = Format(Matriz3M3(i, j), "0.0000") [729] SumaMultiplicacionM3 = SumaMultiplicacionM3 + Matriz3M3(i, j) [730] If MultiplicacionM3.Rows(j).Cells(i).Value = 0.0 Then MultiplicacionM3.Rows(j).Cells(i).Value = "0" [731] MultiplicacionM3.AutoResizeRows() [732] MultiplicacionM3.AutoResizeColumns() [733] Next j [734] Next i [735] [736] End Function [737] Function MCentros() [738] '///////////////////////////////////////////////////////////////////////////////// [739] 'PD 1 [740] MatrizdeCentros.Rows(0).Cells(6).Value = - [741] MatrizdeCentros.Rows(0).Cells(5).Value = - [742] MatrizdeCentros.Rows(0).Cells(4).Value = - [743] MatrizdeCentros.Rows(0).Cells(3).Value = - [744] MatrizdeCentros.Rows(0).Cells(2).Value = 550 [745] MatrizdeCentros.Rows(0).Cells(1).Value = 750 [746] MatrizdeCentros.Rows(0).Cells(0).Value = 900 [747] [748] MatrizdeCentros.Rows(1).Cells(6).Value = - [749] MatrizdeCentros.Rows(1).Cells(5).Value = - [750] MatrizdeCentros.Rows(1).Cells(4).Value = 350 [751] MatrizdeCentros.Rows(1).Cells(3).Value = - [752] MatrizdeCentros.Rows(1).Cells(2).Value = - [753] MatrizdeCentros.Rows(1).Cells(1).Value = 750 [754] MatrizdeCentros.Rows(1).Cells(0).Value = 750 [755] [756] MatrizdeCentros.Rows(2).Cells(6).Value = - [757] MatrizdeCentros.Rows(2).Cells(5).Value = - [758] MatrizdeCentros.Rows(2).Cells(4).Value = 350 [759] MatrizdeCentros.Rows(2).Cells(3).Value = - [760] MatrizdeCentros.Rows(2).Cells(2).Value = - [761] MatrizdeCentros.Rows(2).Cells(1).Value = 550 [762] MatrizdeCentros.Rows(2).Cells(0).Value = 750 [763] [764] MatrizdeCentros.Rows(3).Cells(6).Value = - [765] MatrizdeCentros.Rows(3).Cells(5).Value = - [766] MatrizdeCentros.Rows(3).Cells(4).Value = - [767] MatrizdeCentros.Rows(3).Cells(3).Value = 100 [768] MatrizdeCentros.Rows(3).Cells(2).Value = 550 [769] MatrizdeCentros.Rows(3).Cells(1).Value = 550 [770] MatrizdeCentros.Rows(3).Cells(0).Value = 900 [771] [772] MatrizdeCentros.Rows(4).Cells(6).Value = - [773] MatrizdeCentros.Rows(4).Cells(5).Value = - [774] MatrizdeCentros.Rows(4).Cells(4).Value = 350 [775] MatrizdeCentros.Rows(4).Cells(3).Value = 350 [776] MatrizdeCentros.Rows(4).Cells(2).Value = - [777] MatrizdeCentros.Rows(4).Cells(1).Value = 550 [778] MatrizdeCentros.Rows(4).Cells(0).Value = 750 [779] [780] MatrizdeCentros.Rows(5).Cells(6).Value = - [781] MatrizdeCentros.Rows(5).Cells(5).Value = - [782] MatrizdeCentros.Rows(5).Cells(4).Value = 350 [783] MatrizdeCentros.Rows(5).Cells(3).Value = 550 [784] MatrizdeCentros.Rows(5).Cells(2).Value = - [785] MatrizdeCentros.Rows(5).Cells(1).Value = 750 [786] MatrizdeCentros.Rows(5).Cells(0).Value = 750 [787] [788] MatrizdeCentros.Rows(6).Cells(6).Value = - [789] MatrizdeCentros.Rows(6).Cells(5).Value = - [790] MatrizdeCentros.Rows(6).Cells(4).Value = - [791] MatrizdeCentros.Rows(6).Cells(3).Value = 750 [792] MatrizdeCentros.Rows(6).Cells(2).Value = 550 [793] MatrizdeCentros.Rows(6).Cells(1).Value = 750 [794] MatrizdeCentros.Rows(6).Cells(0).Value = 900 [795] MatrizdeCentros.AutoResizeColumns() [796] MatrizdeCentros.AutoResizeRows() [797] [798] [799] End Function [800] Function MCentrosM2() [801] '///////////////////////////////////////////////////////////////////////////////// [802] 'PD 2 [803] MatrizdeCentrosM2.Rows(0).Cells(6).Value = -

[951] Call PertenenciaDEM2() [952] Call MinimosM2() [953] Call MultiplicacionRM2() [954] TextBox4M2.Text = SumaMinimosM [955] TextBox5M2.Text = SumaMultiplicacionM [956] RM2 = SumaMultiplicacionM2 / SumaMinimosM [957] TextBox3M2.Text = RM [958] Timer1M2.Enabled = True [959] End Sub [960] Private Sub TextBox1M3_TextChanged(sender As Object, e As EventArgs) Handles TextBox1M3.TextChanged [961] '///////////////////////////////////////////////////////////////////////////////// [962] 'PD 2 [963] GradoPertenenciaM3.Rows.Clear() [964] GradoPertenencia2M3.Rows.Clear() [965] SumaMinimosM3 = 0 [966] SumaMultiplicacionM3 = 0 [967] Call PertenenciaEPM3() [968] Call PertenenciaDEM3() [969] Call MinimosM3() [970] Call MultiplicacionRM3() [971] TextBox4M3.Text = SumaMinimosM [972] TextBox5M3.Text = SumaMultiplicacionM [973] RM3 = SumaMultiplicacionM3 / SumaMinimosM [974] TextBox3M3.Text = RM [975] Timer1M3.Enabled = True [976] [977] End Sub [978] Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick [979] TextBox2.Text = TextBox1.Text - TextBox2.Text [980] [981] PuertoSerial.Write(TextBox3.Text) [982] [983] [984] End Sub [985] Private Sub Timer1M2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1M2.Tick [986] TextBox2M2.Text = TextBox1M2.Text - TextBox2M2.Text [987] End Sub [988] Private Sub Timer1M3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1M3.Tick [989] TextBox2M3.Text = TextBox1M3.Text - TextBox2M3.Text [990] End Sub [991] End Class FISICO