Computer Science, Programación en C++

C++ Principios de la programación orientada a objetos

SIGUIENTE: C++ Declaración de variables

Jueves 29 marzo 2018, 05:17 am

Today’s literature review:

  1. BalaguruswamyObjectOrientedProgrammingWithC++Fourth
    1. 1.3 A look at Procedure-Oriented Programming
    2. 1.4 Object-Oriented Programming Paradigm(OOP)
    3. 1.5 Basic concepts
    4. 2.3 A simple program “Hello world”

La Programación Orientada a Objetos (Object-Oriented Programming – OOP) es un enfoque que proporciona una forma de modularización de programas mediante la creación de un área de memoria particionada para datos y funciones que se pueden usar como plantillas para crear copias de dichos módulos bajo demanda. Por lo tanto, se considera que un objeto es un área particionada de la memoria de la computadora que almacena datos y un conjunto de operaciones que pueden acceder a esos datos. Como las particiones de memoria son independientes, los objetos se pueden usar en una variedad de programas diferentes sin modificación…..(Balagurusamy, 2008).

1.3 Las características exhibidas por la programación orientada a procedimientos (Procedure-Oriented Programming – POP) son:

  • El énfasis está en hacer cosas (algoritmos)
  • Los grandes programas se dividen en pequeños programas llamados funciones.
  • La mayoría de las funciones comparten datos globales.
  • Los datos se mueven abiertamente alrededor del sistema de una función a otra.
  • Las funciones transforman datos de un tipo a otro,
  • La técnica emplea es un enfoque de arriba hacia abajo para el diseño del programa.

1.4 En contraposición OOP trata los datos como un elemento crítico en el desarrollo del programa y no permite que fluyan libremente alrededor de un sistema. Ata datos más de cerca a las funciones que operan en él, y los protege de modificaciones accidentales de funciones externas. OOP permite la descomposición en una serie de entidades llamadas objetos y luego construye datos y funciones alrededor de estos objetos. La organización de data y las funciones en programación orientada a objetos se muestra en la Figura 1.6

OOP es un enfoque que proporciona una forma de modularización de programas mediante la creación de un área de memoria particionada para datos y funciones que se pueden usar como plantillas para crear copias de dichos módulos según la demanda. Por lo tanto, se considera que un objeto es un área particionada de la memoria de la computadora que almacena datos y un conjunto de operaciones que pueden acceder a esos datos. Dado que las particiones de memoria son independientes, los objetos pueden usarse en una variedad de programas diferentes sin modificaciones.

Un programa orientado a objetos consiste en un conjunto de objetos que se comunican entre sí. El proceso de programación en un lenguaje orientado a objetos, por lo tanto, implica los siguientes pasos básicos:

  • Crear clases que definen objetos y su comportamiento,
  • Crear objetos a partir de definiciones de clase y,
  • Establecer la comunicación entre los objetos.

Los objetos se comunican entre sí al enviar y recibir información de la misma manera que las personas se transmiten mensajes entre sí. Eso hace que sea más fácil hablar sobre la construcción de sistemas que modelan o simulan directamente sus contrapartes del mundo real.

Un mensaje para un objeto es una solicitud de ejecución de un procedimiento y, por lo tanto, invocará una función (procedure) en el objeto receptor que genera el resultado deseado. La transmisión de mensajes (Message passing) implica especificar el nombre del objeto, el nombre de la función (message) y la información que se enviará. Ejemplo:

Los sistemas de negocio reales a menudo son muy complejos y contienen muchos más objetos con atributos y métodos complicados. OOP es útil en este tipo de dominios de aplicación porque puede simplificar un problema complejo. Las áreas prometedoras para la aplicación de OOP incluyen:

  • Real-time systems
  • Simulation and modeling
  • Object-oriented databases
  • Hypertext, hypermedia and expertext
  • AI and expert systems
  • Neural networks and parallel programming
  • Decision support and office automation systems
  • CIM/CAM/CAD System

La programación orientada a procedimientos (POP) tiene mayores desventajas: (1) los datos se mueven libremente alrededor del programa y, por lo tanto, son vulnerables a los cambios causados por cualquier función en el programa; (2) POP no modela muy bien los problemas del mundo real. El OOP fue inventado para superar los inconvenientes de POP.

En OOP, un problema se considera como una colección de varias entidades llamadas objetos (Objects ). Los objetos son instancias de clases. El aislamiento de datos (Insulation) del acceso directo por el programa se denomina ocultación de datos (data hiding).

La abstracción de datos (Data abstraction) se refiere a reunir características esenciales sin incluir detalles de fondo.

La herencia (Inheritance) es el proceso por el cual los objetos de una clase adquieren propiedades de objetos de otra clase.

Polimorfismo (Polymorphism) significa un nombre, formas múltiples. Nos permite tener más de una función con el mismo nombre en un programa. También permite la sobrecarga de los operadores (overloading) para que una operación pueda mostrar diferentes comportamientos en diferentes instancias.

La vinculación dinámica (Dynamic binding) significa que el código asociado con un procedimiento dado no se conoce hasta el momento de la llamada en tiempo de ejecución (run-time).

//“Hello World” program

 

#include «stdafx.h»

#include <iostream>

using namespace std;

int main()

{

cout << «Hello World\n»;

return 0;

}

Un programa C++ es una colección de funciones. El ejemplo anterior contiene una sola función, main(). La ejecución del programa inicia con main(). Cada programa C++ debe tener una main().

cout ( C Out) representa la salida estándar en C++

El operador << es el operador de inserción o colocar en. Inserta los contenidos de la variable a su derecha al objeto a su izquierda, como se muestra en la Figura 2.1

Aquí, el identificador cout es un objeto predefinido que representa la pantalla y tiene una interfaz simple. Si cadena representa una variable de cadena, la siguiente instrucción mostrará su contenido:

cout << string;

El operador << es también el operador de desplazamiento a la izquierda ( left-shift operator), es un ejemplo de una sobrecarga del operador (una función que se puede comportar diferente dependiendo del argumento que recibe), un aspecto importante del polimorfismo. Hemos utilizado la siguiente directiva #include:

#include <iostream>

Esta directiva hace que el preprocesador agregue los contenidos del archivo iostream al programa. Contiene declaraciones para el identificador cout y el operador <<. El archivo de encabezado iostream debe incluirse al comienzo de todos los programas que usan declaraciones de entrada / salida.

Namespace, el espacio de nombres, es un nuevo concepto introducido por el comité de estándares ANSI C ++. Esto define un ámbito, un campo de aplicación o envergadura, para los identificadores que se usan en un programa. Para usar los identificadores definidos en el ámbito del espacio de nombres, debemos incluir la directiva using, como:

using namespace std;

En C ++, main () devuelve un valor de tipo entero (integer) al sistema operativo. Por lo tanto, cada main () en C ++ debe terminar con una declaración return (0); de lo contrario, puede ocurrir un error. El tipo de retorno para main () se especifica explícitamente como int.

Un programa un poco más complejo

Supongamos que nos gustaría leer dos números del teclado y mostrar su promedio en la pantalla.

#include «stdafx.h»

#include <iostream>

using namespace std;

int main()

{

float number1, number2, sum, average;

cout << «Enter two numbers: «; // prompt

cin >> number1; // reads number

cin >> number2; // read number from the keyboard

sum = number1 + number2;

average = sum / 2;

cout << «Sum=» << sum << «\n«;

cout << «Average=» << average << «\n«;

   return 0;

}

Comentarios:

El programa usa cuatro variables que son declaradas como tipo flotante por la declaración:

float number1, number2, sum, average;

Todas las variables deben declararse antes de ser utilizadas en el programa.

Operador de entrada. La declaración:

cin >> number1;

hace que el programa espere a que el usuario escriba un número, que se coloca en la variable number1. El identificador cin (C in) es un objeto predefinido en C ++ que corresponde con la entrada estándar tipo string.

El operador >> se conoce como extracción o obtiene del operador. Extrae el valor del teclado y lo asigna a la variable a su derecha. Este operador también puede estar overloaded.

null

 

Conexión en cascada de operadores de entrada / salida

Hemos utilizado el operador de inserción << repetidamente en las dos últimas declaraciones para imprimir los resultados:

cout << «Sum=» << sum << «\n»;

cout << «Average=» << average << «\n»;

Primero, envía la cadena «Sum =» a cout y luego envía el valor de sum. Finalmente, envía el carácter de nueva línea \ n para que la próxima salida esté en la nueva línea. Cuando se conecta en cascada un operador de salida, debemos asegurar espacios en blanco entre los diferentes elementos. La declaración dos se puede combinar como:

cout << «Sum=» << sum << «\n»

        << «Average=» << average << «\n»;

Esta es una afirmación pero proporciona dos líneas de salida. También podemos conectar en cascada el operador de entrada >> como se muestra a continuación:

cin >> number1 >> number2;

Los valores se asignan de izquierda a derecha.

SIGUIENTE: C++ Declaración de variables

Nota: Para ejecutar los ejercicios propuestos recomiendo descargar el IDE (Interface Development Environment) Visual Studio,  y luego para cada ejercicio seguir los pasos recomendados en el link: Introducción a C++ en Visual Studio. 

Fuente:

  1. BalaguruswamyObjectOrientedProgrammingWithC++Fourth

 

Revisión literaria hecha por Larry Francis Obando – Technical Specialist – Educational Content Writer.

Escuela de Ingeniería Eléctrica de la Universidad Central de Venezuela, Caracas.

Escuela de Ingeniería Electrónica de la Universidad Simón Bolívar, Valle de Sartenejas.

Escuela de Turismo de la Universidad Simón Bolívar, Núcleo Litoral.

Contact: Caracas, Quito, Guayaquil, Cuenca – Telf. 00593998524011

WhatsApp: +593984950376

email: dademuchconnection@gmail.com

C++ Programming, Computer Science

C++ Principles of object-oriented programming

NEXT: C++ Declaration of Variables

Jueves 29 , 05:17 am

Today’s literature review:

  1. BalaguruswamyObjectOrientedProgrammingWithC++Fourth
    1. 1.3 A look at Procedure-Oriented Programming
    2. 1.4 Object-Oriented Programming Paradigm(OOP)
    3. 1.5 Basic concepts
    4. 2.3 A simple program “Hello world”

Object-Oriented Programming (OOP) is an approach that provides a way of modularizing programs by creating partitioned memory area for both data and functions that can be used as templates for creating copies of such modules on demand. Thus, an object is considered to be a partitioned area of computer memory that stores data and set of operations that can access that data. Since the memory partitions are independent, the objects can be used in a variety of different programs without modification…(Balagurusamy, 2008).

1.3 Characteristics exhibited by procedure-oriented programming (POP) are:

  • The emphasis is on doing things (algorithms)
  • Large programs are divided into small programs called functions.
  • Most of the functions shared global data.
  • Data move openly around the system from function to function.
  • Functions transform data from one type to another,
  • The technique employs top-down approach in program design.

1.4 Object-Oriented Programming (OOP) treats data as a critical element in the program development and does not allow it to flow freely around a system. It ties data more closely to the functions that operate on it, and protects it from accidental modifications from outside functions. OOP allows decomposition into a number of entities called objects and then builds data and function around these objects. The organization of dta and functions in object-oriented programming is shown in Figure 1.6

Object-Oriented Programming (OOP) is an approach that provides a way of modularizing programs by creating partitioned memory area for both data and functions that can be used as templates for creating copies of such modules on demand. Thus, an object is considered to be a partitioned area of computer memory that stores data and set of operations that can access that data. Since the memory partitions are independent, the objects can be used in a variety of different programs without modification.

An object-oriented program consists of a set of objects that communicate with each other. The process of programming in a object-oriented language, therefore, involves the following basic steps:

  • Creating classes that define objects and their behaviour,
  • Creating objects from class definitions and,
  • Establishing communication among objects.

Objects communicate with one another by sending and receiving information much the same way as people pass messages to one another. That makes it easier to talk about building systems that directly model or simulate their real-world counterparts.

A message for an object is a request for execution of a procedure, and therefore will invoke a function (procedure) in the receiving object that generates the desired result. Message passing involves specifying the name of the object, the name of the function (message) and the information to be sent. Example:

Real-business systems are often much complex and contain many more objects with complicated attributes and methods. OOP is useful in these types of application domains because it can simplify a complex problem. The promising areas for application of OOP include:

  • Real-time systems
  • Simulation and modeling
  • Object-oriented databases
  • Hypertext, hypermedia and expertext
  • AI and expert systems
  • Neural networks and parallel programming
  • Decision support and office automation systems
  • CIM/CAM/CAD System

Procedure-oriented programming (POP) has to majors drawbacks: (1) data move freely around the program and are therefore vulnerable to changes caused by any function in the program; (2) POP does not model very well the real-world problems. OOP was invented to overcome the drawbacks of POP.

In OOP, a problem is considered as a collection of a number of entities called objects. Objects are instances of classes. Insulation of data from direct access by the program called data hiding.

Data abstraction refers to putting together essential features without including background details.

Inheritance is the process by which objects of one class acquire properties of objects of another class.

Polymorphism means one name, multiple forms. It allows us to have more than one function with the same name in a program. It also allows overloading of operators so that an operation can exhibit different behaviours in different instances. Dynamic binding means that the code associated with a given procedure is not known until the time of the call at run-time.

//“Hello World” program

 

#include «stdafx.h»

#include <iostream>

using namespace std;

int main()

{

cout << «Hello World\n»;

return 0;

}

A C++ program is a collection of functions. The above example contains only one function, main(). Execution begins at main(). Every C++ program must have a main().

cout ( C Out) represents the standard output stream in C++

The operator << the insertion or put to operator. It inserts the contents of the variable on its right to the object on its left, as it is shown in Figure 2.1

Here, the identifier cout is a predefined object representing the screen and it has a simple interface. If string represents a string variable, then the following statement will display its contents:

cout << string;

The operator << is also the bit-wise left-shift operator is an example of an operator overloading, an important aspect of polymorphism. We have used the following #include directive:

#include <iostream>

This directive causes the preprocessor to add the contents of the iostream file to the program. It contains declarations for the identifier cout and the operator<< . The header file iostream should be included at the beginning of all programs that use input/output statements.

Namespace is a new concept introduced by the ANSI C++ standards committee. This defines a scope for the identifiers that are used in a program. For using the identifiers defined in the namespace scope we must include the using directive,like:

using namespace std;

In C++, main() returns an integer type value to the operating system. Therefore, every main() in C++ should end with a return(0) statement; otherwise an error may occur. The return type for main() is thus explicitly specified as int.

A slightly more complex program

Assume that we would like to read two numbers from the keyboard and display their average on the screen.

 

#include «stdafx.h»

#include <iostream>

using namespace std;

int main()

{

float number1, number2, sum, average;

cout << «Enter two numbers: «; // prompt

cin >> number1; // reads number

cin >> number2; // read number from the keyboard

sum = number1 + number2;

average = sum / 2;

cout << «Sum=» << sum << «\n«;

cout << «Average=» << average << «\n«;

   return 0;

}

Comments:

The program uses four variables that are declared as type float by the statement

float number1, number2, sum, average;

All variables must be declared before they are used in the program.

Input Operator. The statement:

cin >> number1;

causes the program to wait for the user to type in a number, which is placed in the variable number1. The identifier cin ( C in) is a predefined object in C++ that corresponds to the standard input stream.

The operator >> is known as extraction or get from operator. It extracts the value from the keyboard and assigns it to the variable on its right. This operator can also be overloaded.

null

Cascading of Input/Output Operators

We have used the insertion operator << repeatedly in the last two statements for printing results:

cout << «Sum=» << sum << «\n»;

cout << «Average=» << average << «\n»;

First, send the string  «Sum=» to cout and then sends the value of sum. Finally, it sends the newline character \n so that the next output will be in the new line. When cascading an output operator we should ensure blank spaces between different items. The two statement can be combined as:

cout << «Sum=» << sum << «\n»

        << «Average=» << average << «\n»;

This is one statement but provides two lines of output. We can also cascade input operator >> as shown below:

cin >> number1 >> number2;

The values are assigned from left to the right.

NEXT: C++ Declaration of Variables

Note: I recommend Visual Studio IDE (Interface Development Environment) ,  and after Introducción a C++ en Visual Studio. 

Source:

  1. BalaguruswamyObjectOrientedProgrammingWithC++Fourth

Review by: Larry Francis Obando – Technical Specialist – Educational Content Writer.

Escuela de Ingeniería Eléctrica de la Universidad Central de Venezuela, Caracas.

Escuela de Ingeniería Electrónica de la Universidad Simón Bolívar, Valle de Sartenejas.

Escuela de Turismo de la Universidad Simón Bolívar, Núcleo Litoral.

Contact: Caracas, Quito, Guayaquil, Cuenca – Telf. 00593998524011

WhatsApp: +593984950376

email: dademuchconnection@gmail.com

Automóvil, Electrical Engineer, Ingeniería Eléctrica, Tren de poder - Dinámica de Fuerzas

Desaceleración y control de velocidad del vehículo

ANTERIOR: Fuerza neta y control de la aceleración del vehículo

SIGUIENTE: Gradiente de carretera

En esta oportunidad, veremos qué sucede cuando no hay suficiente tracción para que podamos superar las fuerzas de resistencia en marcha, o cuando se aplica una fuerza de tracción negativa. Comenzamos el análisis desde un vehículo que conduce a velocidad constante de 100 kilómetros por hora con una fuerza de tracción lo suficientemente fuerte como para equilibrar la resistencia a la rodadura y la resistencia aerodinámica. ¿Qué pasará si la fuerza de tracción se vuelve 0? Nosotros, de nuevo, calculamos la suma de las fuerzas restantes que actúan en el vehículo, y eso nos da la fuerza neta.

Observe que la fuerza neta ahora está en la dirección inversa. Y, por lo tanto, obtenemos una aceleración de menos 0,33 metros por segundo al cuadrado en este caso, lo que significa una desaceleración. Tenga en cuenta que la dirección del vector de fuerza corresponde al cambio de signo en la fuerza en las ecuaciones.

En el diagrama de velocidad de fuerza, nuestra fuerza de tracción es solo 0, por lo que no se suma a la suma vectorial de todas las fuerzas en el vehículo. Y así, la fuerza neta se convierte en la suma de la resistencia a la rodadura y la resistencia aerodinámica. El resultado es un vehículo de desaceleración. Tenga en cuenta que dado que la fuerza de tracción es menor que la resistencia de conducción total, el vehículo está desacelerando.

Cuando la velocidad disminuye, el arrastre aerodinámico es más pequeño y la desaceleración disminuirá. Sin embargo, el tren motriz puede aumentar la desaceleración produciendo una fuerza de tracción negativa. Si ahora calculamos la fuerza neta, se vuelve aún más negativa. Esto da como resultado una aceleración de menos 0,40 metros por segundo al cuadrado en este caso. Esta fuerza de tracción negativa puede crearse por pérdidas en el tren motriz o por un motor eléctrico que funciona como generador. Si eso no es suficiente, los frenos del vehículo pueden generar una fuerza negativa mayor.

Esta desaceleración activa se puede ilustrar en el diagrama de velocidad de fuerza. Observe que el eje y ha cambiado y ahora incluye valores de fuerza negativa. La resistencia aerodinámica y la resistencia a la rodadura se agregan a la fuerza de tracción ahora negativa, lo que resulta en una mayor fuerza neta negativa y, por lo tanto, aún más desaceleración.

Ahora que hemos estudiado las fuerzas y la aceleración en diferentes situaciones de manejo, podemos sacar algunas conclusiones generales sobre cómo se controla la velocidad del vehículo.

Uno, el conductor solo puede controlar la fuerza del tren motriz y los frenos para influir en la velocidad del vehículo. Dos, al cambiar la fuerza de tracción, se puede controlar la fuerza neta, de modo que el vehículo lea la aceleración deseada. Tres, con el tiempo, la aceleración o la desaceleración pueden hacer que el vehículo alcance la velocidad deseada. También podemos resumir algunas reglas de control simples.

La fuerza de tracción debe exceder la resistencia de conducción total para que el vehículo se acelere. La fuerza de tracción y la resistencia de conducción total deben estar en equilibrio para que el vehículo tenga una velocidad constante. Y la fuerza de tracción debe ser menor que la resistencia de conducción total para que el vehículo desacelere. Ahora conoce los conceptos básicos de cómo determinar qué fuerza de tracción se requiere al conducir un vehículo y cómo el conductor controla la velocidad del vehículo al controlar la fuerza de tracción del tren motriz. Hay una fuerza más importante que incluir, y esa es la fuerza causada por el gradiente de la carretera.

ANTERIOR: Fuerza neta y control de la aceleración del vehículo

SIGUIENTE: Gradiente de carretera

Fuente: Deceleration and speed control del curso Section 1: Vehicles and powertrains

 

Escrito por: Larry Francis Obando – Technical Specialist – Educational Content Writer.

Escuela de Ingeniería Eléctrica de la Universidad Central de Venezuela, Caracas.

Escuela de Ingeniería Electrónica de la Universidad Simón Bolívar, Valle de Sartenejas.

Escuela de Turismo de la Universidad Simón Bolívar, Núcleo Litoral.

Contact: Caracas, Quito, Guayaquil, Cuenca – Telf. 00593998524011

WhatsApp: +593984950376

email: dademuchconnection@gmail.com

Automóvil, Electrical Engineer, Ingeniería Eléctrica, Tren de poder - Dinámica de Fuerzas

Fuerza neta y control de la aceleración del vehículo

ANTERIOR: Aerodinámica y resistencia al rodamiento de un auto.

SIGUIENTE: Desaceleración y control de velocidad del vehículo

En esta presentación, agregaremos la fuerza de tracción del tren motriz y veremos cómo calcular la fuerza neta total en el vehículo. La Segunda Ley de Newton puede decirnos cuánto acelerará el vehículo con una determinada fuerza de tracción. Bien, ahora veremos cómo el tren motriz influye en el vehículo. El tren de potencia aplica una fuerza de tracción al vehículo, tal como lo muestra la siguiente imagen:

La fuerza se distribuye en todas las ruedas, pero sólo vamos a considerar la fuerza de tracción total. Aquí se ilustra como actuando sobre las ruedas delanteras del automóvil. Una vez que conocemos la fuerza de tracción y todas las fuerzas de resistencia de conducción, podemos calcular la fuerza neta total en dirección longitudinal.

La Segunda Ley de Newton nos dice que la fuerza neta es igual a la masa del vehículo multiplicada por la aceleración del vehículo. Podemos usar esto para controlar la aceleración controlando la fuerza neta. Para hacer eso, el tren motriz necesita producir una fuerza de tracción igual a la resistencia a la rodadura, más resistencia aerodinámica, más la masa del vehículo por la aceleración deseada. Y una vez que obtengamos una aceleración, con el tiempo, la velocidad también cambiará.

De modo que el conductor controla la velocidad solo de forma indirecta controlando la fuerza del tren de potencia y, por lo tanto, la aceleración.

Ahora suponemos que la fuerza de tracción es de 750 newtons a una velocidad de 50 kilómetros por hora. Cuando conocemos la fuerza de tracción, la fuerza neta puede calcularse como la suma vectorial de la fuerza de tracción, la resistencia a la rodadura y la resistencia aerodinámica. La suma del vector es la fuerza neta, y a partir de eso podemos calcular la aceleración.

Ahora, mostraremos cómo se puede ilustrar el mismo análisis en un diagrama de fuerza-velocidad con las curvas mostrando la resistencia a la rodadura más la resistencia aerodinámica. El resultado es la fuerza neta, y es igual a la masa del vehículo por la aceleración.

Observamos que la aceleración es proporcional a la diferencia entre la fuerza de tracción y la curva de resistencia de la carretera a la velocidad real. Si mantenemos la fuerza de tracción constante, la velocidad aumentará. Y cuando la velocidad aumenta, la resistencia aerodinámica también aumentará. Si ahora calculamos la suma vectorial de las fuerzas, obtenemos la fuerza neta. Tenemos en cuenta que, esta vez, es un poco más pequeño que a 50 kilómetros por hora debido a la mayor resistencia aerodinámica.

La situación a 75 kilómetros por hora también se puede analizar en el diagrama de fuerza-velocidad. La suma de vectores con la misma fuerza de tracción de 750 newtons da una fuerza neta de 75 kilómetros por hora. Lo que conduce a una aceleración un poco más baja, ya que la resistencia de conducción total es más alta a 75 que a 50 kilómetros por hora.

Si queremos seguir acelerando a 100 kilómetros por hora, podemos mantener la fuerza de tracción en 750 newtons. La velocidad aumenta y eso lleva a un mayor aumento en la resistencia aerodinámica. Una vez que alcanzamos los 100 kilómetros por hora, queremos dejar de acelerar y mantener la velocidad en 100. Luego, el conductor tiene que disminuir la fuerza de tracción de manera que sea igual a las fuerzas de resistencia de conducción. Y el resultado es una fuerza neta igual a cero. Y sin fuerza neta, la aceleración se detiene, y luego la velocidad es constante.

La fuerza de tracción no es cero, tiene que ser positiva y constante para equilibrar la suma de las fuerzas de resistencia. En el diagrama de fuerza-velocidad, podemos ver que la fuerza de tracción se mantiene constante durante la aceleración. Una vez que se alcanzan los 100 kilómetros por hora, la fuerza de tracción se reduce para coincidir perfectamente con la resistencia de conducción a 100 kilómetros por hora, según se muestra en el siguiente diagrama:

En conclusión:

Fuente: Net force and control of vehicle acceleration del curso Section 1: Vehicles and powertrains

ANTERIOR: Aerodinámica y resistencia al rodamiento de un auto.

SIGUIENTE: Desaceleración y control de velocidad del vehículo

 

Escrito por: Larry Francis Obando – Technical Specialist – Educational Content Writer.

Escuela de Ingeniería Eléctrica de la Universidad Central de Venezuela, Caracas.

Escuela de Ingeniería Electrónica de la Universidad Simón Bolívar, Valle de Sartenejas.

Escuela de Turismo de la Universidad Simón Bolívar, Núcleo Litoral.

Contact: Caracas, Quito, Guayaquil, Cuenca – Telf. 00593998524011

WhatsApp: +593984950376

email: dademuchconnection@gmail.com

Automóvil, Electrical Engineer, Ingeniería Eléctrica, Tren de poder - Dinámica de Fuerzas

Aerodinámica y resistencia al rodamiento de un auto

SIGUIENTE: Fuerza neta y control de la aceleración del vehículo

Introducción

Sólo se analizarán las fuerzas en la dirección longitudinal, ya que influyen en el tren de potencia. Las fuerzas en otras direcciones se ignoran momentáneamente, ya que principalmente influyen en la dirección y la suspensión. Cuando el vehículo está parado en una carretera plana, no hay fuerzas longitudinales que actúen sobre el vehículo. Cuando el vehículo avanza, los neumáticos causan resistencia a la rodadura. Elegimos ilustrar la fuerza de resistencia a la rodadura solo en la rueda trasera en esta imagen:

La resistencia a la rodadura es 0 en parada. Cuando la velocidad no es cero, se puede calcular como el coeficiente de resistencia a la rodadura multiplicado por la fuerza normal entre el vehículo y la carretera. La resistencia a la rodadura es aproximadamente independiente de la velocidad, como se muestra en este diagrama.

Cambia ligeramente con el ángulo de la carretera, ya que la fuerza normal disminuye si el vehículo desciende por una carretera que se vuelve muy empinada.

El coeficiente de resistencia a la rodadura debería ser lo más bajo posible para mantener bajo el consumo de energía. Y típicamente su valor está alrededor de 0.01. Una vez que el vehículo se mueve un poco más rápido, también hay resistencia aerodinámica, que es causada por el aire, ya que se ve forzado a fluir alrededor del vehículo cuando está conduciendo. Las fuerzas aerodinámicas ocurren alrededor del vehículo, pero aquí las ilustramos como una fuerza concentrada que actúa en la parte trasera del vehículo.

La resistencia aerodinámica es principalmente causada por una mayor presión de aire en la parte delantera del vehículo y una menor presión detrás de él. Cuando la velocidad del vehículo aumenta, más aire tiene que pasar el mismo por segundo, lo que lleva a una mayor fuerza de arrastre aerodinámica. A una velocidad de alrededor de 75 kilómetros por hora, la fuerza aerodinámica es similar en tamaño a la resistencia a la rodadura de un automóvil típico. A medida que la velocidad aumenta aún más, la fuerza aerodinámica aumenta más y más rápidamente, cuadráticamente según la curva Fuerza-Velocidad anterior.

El coeficiente aerodinámico de arrastre debe ser lo más bajo posible y, por lo general, es de aproximadamente 0,25 a 0,35 para un automóvil moderno. Para camiones y autobuses, es mayor, alrededor de 0.7. En esta presentación, consideramos dos fuerzas que siempre están presentes cuando un vehículo está conduciendo. Es la resistencia a la rodadura, que es bastante constante con la velocidad del vehículo y la resistencia aerodinámica, que aumenta con el cuadrado de la velocidad.

A baja velocidad, la resistencia a la rodadura es mayor que la resistencia aerodinámica.

Y para un automóvil moderno, la resistencia aerodinámica es mayor, por encima de aproximadamente 70 kilómetros por hora, como se puede apreciar en la Figura siguiente:

SIGUIENTE: Fuerza neta y control de la aceleración del vehículo

Fuente: Aerodynamic- and rolling resistance del curso Section 1: Vehicles and powertrains

Escrito por: Larry Francis Obando – Technical Specialist – Educational Content Writer.

Escuela de Ingeniería Eléctrica de la Universidad Central de Venezuela, Caracas.

Escuela de Ingeniería Electrónica de la Universidad Simón Bolívar, Valle de Sartenejas.

Escuela de Turismo de la Universidad Simón Bolívar, Núcleo Litoral.

Contact: Caracas, Quito, Guayaquil, Cuenca – Telf. 00593998524011

WhatsApp: +593984950376

email: dademuchconnection@gmail.com

Análisis de sistemas de control, Respuesta en el tiempo

Simulación de Respuesta Transitoria con Matlab

Introducción

Para el análisis transitorio de algunos ejemplos tomamos en cuenta el cuadro presentado con anterioridad en ensayo teórico Respuesta Transitoria de un Sistema de Control, junto con la forma estándar de la Función de Transferencia:

En la siguiente figura vemos la relación entre σ  (coeficiente de amortiguamiento) y el tipo de respuesta obtenida: mientras menor sea el valor de σ , más oscilatoria es la respuesta. La frecuencia natural ωd  es un factor de escala de tiempo y no afecta la naturaleza de la respuesta más allá de afectar su escalamiento en el tiempo.

  1. Matlab y la función tf() y step(). La Función de Transferencia para un sistema masa-resorte-amortiguador se muestra en la Figura 2.15.

Considerando M=1 Kg, Fv= 4 N*seg/m, y K= 3 N/m. Introduciendo la expresión de la función de transferencia en la consola de Matlab, utilizando tf() y step(), obtenemos la respuesta del sistema a a la entrada escalón unitario

> X=tf([1],[1 4 3])

>step(X)

X = 1/ s^2 + 4 s + 3

Gráfica 1

Mediante la función residue (X) podemos ver que los polos de esta función están en -3 y -1:

> [r,p,k]=residue ([1],[1 4 3])

r = -0.5000, 0.5000 // polos = -3, -1 // k =0. Los polos son reales negativos diferentes, lo que sugiere un factor de amortiguamiento por ello estamos en presencia de un sistema sobreamortiguado como lo sugiere la gráfica 1

>ilaplace(1/(s^3 + 4*s^2 + 3*s),s,t)

ans = exp(-3*t)/6 – exp(-t)/2 + ⅓ (respuesta a la aplicación de una fuerza repentina semejante a la función escalón unitario)

2. Utilizando tf() introducimos la función de transferencia del sistema descrito en forma estándar 25/(s^2 + 4s +25). Realice el gráfico de x(t) ante impulso y rampa para el intervalo 0<t<3 utilizando lsim() y impulse()

> p=tf([25],[1 4 25])

> t=0:0.1:3

> x=t

>lsim(p,x,t)

obtenemos la respuesta a la entrada rampa

> impulse(p)

obtenemos la respuesta al impulso del sistema

Utilizando step() obtenemos la respuesta al escalón unitario y utilizando stepinfo() obtenemos el valor de los parámetros más relevantes de esta respuesta:

> s=tf([25],[1 4 25])

> step(s)

> stepinfo(s)

null

3. Matlab y la función residue() y ilaplace(). Considerando el sistema

Gráfica 2. Respuesta a la entrada escalón unitario

>[r,p,k]=residue ([2 25],[1 4 25])

r = 1.0000 – 2.2913i; 1.0000 + 2.2913i

polos = -2.0000 + 4.5826i; -2.0000 – 4.5826i; k = []. Dos polos imaginarios conjugados, lo que sugiere un sistema subamortiguado, como se confirma en la gráfica, para

Vemos claramente que ωn = 2 y ωd = 4.5826.

>ilaplace((2*s + 25)/(s^3 + 4*s^2 + 25*s),s,t)

ans =1 – exp(-2*t)*cos(21^(1/2)*t) parecida a la forma

Vemos que a diferencia del ejemplo 1, en este caso la salida en el tiempo incluye un componente coseno que la hace oscilar como se muestra en la Gráfica 2.

Utilizando la función damp(), podremos encontrar los valores del coeficiente de amortiguamiento ζ , la constante de tiempo τ y el de la frecuencia natural ωn:

> damp(s2) 

               Pole                  Damping     Frequency (r/s)      Time Constant  (s)

-2.00e+00 + 4.58e+00i       4.00e-01      5.00e+00              5.00e-01

-2.00e+00 – 4.58e+00i        4.00e-01       5.00e+00             5.00e-01

 ζ=0.4 // ωn=5.00 r/s  //  τ=0.5 s

4. Matlab y la forma estándar: Supongamos que las especificaciones que deben cumplirse están expresadas como los valores del coeficiente de amortiguamiento y de la frecuencia natural. Podemos generar la función de transferencia de este sistema utilizando las funciones ord2() y printsys(NUM,DEN,’s’), y luego graficar esta respuesta recordando que ambos parámetros se relacionan con la entrada escalón unitario:

[NUM,DEN] = ord2(Wn,Z) returns the polynomial transfer function of the second order system.

> wn=5

> damping_ratio=0.4

>[Num0,den]=ord2(wn,damping_ratio)

Num0 =1;

den = 1 4 25.

printsys(NUM,DEN,’s’) prints the transfer function as a ratio of two polynomials in the transform variable ‘s’

> Num=5^2*Num0

> printsys(Num,den,’s’)

num/den = 25/ s^2 + 4 s + 25

>p=tf([25],[1 4 25])

>step(p)

 

5. Ahora analizamos la aplicación de la función lsim(): lsim – Simulate time response of dynamic system to arbitrary inputs-This MATLAB function produces a plot of the time response of the dynamic system model sys to the input history, t,u.

Consideramos el sistema simple 25/(s^2 + 4s +25) en su forma estándar, y la respuesta al escalón unitario. Aplicamos las funciones siguientes:

> p=tf([25],[1 4 25])

>[u,t]=gensig(‘pulse’,0.1,3,0.1)

> lsim(p,u,t)

obtenemos

6. Vamos a derivar la Función de Transferencia a partir de un diagrama de bloques y la función feedback(). Consideramos el sistema:

donde:

Determine la expresión de la función de transferencia Gfinal=C(s)/R(s) en Matlab utilizando el comando feedback()

>s=tf(‘s’)

> G3=1/s

> H3=10/(s+5)

>G3H3cloop=feedback(G3,H3)

G3H3cloop = s + 5/ s^2 + 5 s + 10

G2=20/(s+2)

> H2=10/(s+20)

G2H2cloop=feedback(G2,H2) // G2H2cloop = 20 s + 400/ s^2 + 22 s + 240 //

> G1plusG2H2cloop= G2H2cloop + G1

G1plusG2H2cloop = 5 s^2 + 130 s + 1600/ s^2 + 22 s + 240

> GRH1cloop=feedback(GR,H1)

GRH1cloop = 5 s^2 + 130 s + 1600/ 51 s^2 + 1322 s + 16240

> Gfinal= GRH1cloop + (GRH1cloop/G2) + G3H3cloop

Gfinal =

255 s^7 + 20125 s^6 + 774760 s^5 + 1.786e07 s^4 + 2.647e08 s^3 + 2.482e09 s^2 + 1.362e10 s + 3.209e10

—————————————————————————————————–

52020 s^6 + 2.957e06 s^5 + 8.209e07 s^4 + 1.226e09 s^3 + 1.025e10 s^2 + 3.496e10 s + 5.275e10

7. Vamos a analizar la estabilidad del siguiente sistema:

null

> T=tf([128],[1 3 10 24 48 96 128 192 128])

> G=feedback(T,1)

G =

                                   128

 ———————————————————————–

 s^8 + 3 s^7 + 10 s^6 + 24 s^5 + 48 s^4 + 96 s^3 + 128 s^2 + 192 s + 256

> poles=pole(G)

poles=

  1.0154 + 1.5963i

  1.0154 – 1.5963i

  0.2646 + 2.0468i

  0.2646 – 2.0468i

 -0.9684 + 1.9698i

 -0.9684 – 1.9698i

 -1.8116 + 0.4508i

 -1.8116 – 0.4508i

Vemos claramente que el sistema tiene dos polos en el semiplano derecho, dos polos en el eje imaginario y cuatro en el semiplano izquierdo, por tanto es inestable. La respuesta al escalón unitario mediante step() así lo sugiere:

null

 

8. Obtenga las respuestas impulso, escalón y rampa para 0<t<10 s simulando los sistemas siguientes en Simulink, utilice un Scope para comparar las respuestas escalón y las respuestas ante una entrada rampa.

> sys=tf([5 100],[1 8 32 80 100])

stepinfo(sys):  

RiseTime: 0.7217 , SettlingTime: 3.1056, Overshoot: 13.8472,

PeakTime (Pt): 1.6579, Peak (P): 1.1385 (se señala Pt y P en la gráfica para la curva color amarillo mediante herramientas de medición de Scope)

sys2=tf([245],[1 10])

>> sys3=tf([1],[1 4 24])

> stepinfo(sys2*sys3)

 RiseTime: 0.3443,  SettlingTime: 1.8124, Overshoot: 21.3046, PeakTime: 0.8197,

Peak: 1.2383 (se señala Pt y P en la gráfica para la curva color azul)

9. Ejercicio 77, p295, Nise. The mechanical system shown in Figure P5.52(a) is used as part of the unity feedback system shown in Figure P5.52(b). Find the values of M and D to yield 20% overshoot and 2 seconds settling time.

 

Respuesta:

 

 

Respuesta completa en el siguiente link: Ejemplo 1 – Respuesta transitoria de un sistema electromecánico

Fuentes:

  1. Control Systems Engineering, Nise
  2. Sistemas de Control Automatico Benjamin C Kuo
  3. Modern_Control_Engineering, Ogata 4t

Elaborado por: Larry Francis Obando – Technical Specialist – Educational Content Writer – WhatsApp: +34 633129287 – Atención Inmediata !

Mentoring Académico / Empresarial / Emprendedor

Copywriting, Content Marketing, Tesis, Monografías, Paper Académicos, White Papers (Español – Inglés)

Escuela de Ingeniería Eléctrica de la Universidad Central de Venezuela, Caracas.

Escuela de Ingeniería Electrónica de la Universidad Simón Bolívar, Valle de Sartenejas.

Escuela de Turismo de la Universidad Simón Bolívar, Núcleo Litoral.

Contacto: – Telf. +34 633129287

Caracas, Quito, Guayaquil, Cuenca

WhatsApp: +34 633129287

Atención Inmediata !!

Twitter: @dademuch

FACEBOOK: DademuchConnection

email: dademuchconnection@gmail.com

Atención:

Si lo que Usted necesita es resolver con urgencia un problema de “Sistema Masa-Resorte-Amortiguador” (encontrar la salida X(t), gráficas en Matlab del sistema de 2do Orden y parámetros relevantes, etc.), o un problema de “Sistema de Control Electromecánico” que involucra motores, engranajes, amplificadores diferenciales, etc…para entregar a su profesor en dos o tres días, o con mayor urgencia…o simplemente necesita un asesor para resolver el problema y estudiar para el próximo examen…envíeme el problema…Yo le resolveré problemas de Sistemas de Control, le entrego la respuesta en digital … simulación en Matlab opcional.

Relacionado:

Diagrama de Bloques – Ingeniería de Control

Respuesta Transitoria de un Sistema de Control

Dinámica de un Sistema Masa-Resorte-Amortiguador

Diagrama de Bloques de Sistema Electromecánico con Motor DC

Control System Analysis, Time Domain

Transient-response Specifications – Control Systems

The response in time of a control system is usually divided into two parts: the transient response and the steady-state response. Let y (t) be the response of a system in continuous time, then:

where yt (t) is the transient response, while yss (t) is the steady state response.

The transient response of a control system is important since both its amplitude and its duration must be kept within tolerable or prescribed limits. It is defined as the part of the response in time that tends to zero when the time becomes very large. Thus,

All real stable control systems present a transient phenomenon before reaching the steady state response. For analysis and design purposes it is necessary to assume some basic types of test inputs to evaluate the performance of a system. The proper selection of these test signals allows the prediction of system performance with other more complex inputs. The following signals are used: Step function, which represents an instantaneous change in the reference input; Ramp function, which represents a linear change over time; Parabolic function, which represents a faster order than the ramp. These signals have the common characteristic that they are simple to write in mathematical form, it is rarely necessary or feasible to use faster functions. In Figure 7-1 you can see these functions:

[2]

For a linear control system, the analysis and characterization of the transient response is performed frequently using the unit step function Us (t), shown in Figure 7-1a with R = 1. A typical response of a control system to a unit step input is shown in Figure 7-11:

[2]

The transient response of a practical control system often exhibits damped oscillations before reaching the steady state. That’s happens because systems have energy storage and cannot responds immediately. The transient-response to a unit step input depends on the initial conditions. That’s why it is a common practice to use the standard initial conditions that the system is at rest initially with the output an all time derivatives thereof zero.

Second-order systems and Transient-response specifications.

Figure 5-5a shows a Servo System as an example of a second-order system. It consists of a proportional controller and load elements (inertia and viscous friction elements):

null

[3]

The closed-loop Transfer Function of the system shown in Figure 5-5c is:

In the transient-response analysis it is convenient to write:

Where σ is called the attenuation; ωn is the undamped natural frequency; and ζ  the damping ratio of the system.  ζ  is the ratio of the actual damping B to the critical damping Bc equal to two times the square-root of JK:

In terms of ωn y σ, the system shown in Figure 5-5c can be expressed as Figure 5-6:

[3]

Now, the Transfer Function C(s)/R(s) can be written as:

This form is called The Standard Form. The dynamic behavior of a second-order system can be now described in terms of the two parameters ωn and σ. In short, the cases of second-order response as a function of σ are summarized in Figure 4.11 (for a better review see FIRST and SECOND ORDER SYSTEMS):

[1]

In specifying the transient-response characteristics of a control system to a unit-step input, it is common to specify the following parameters associated with the underdamped response:

  1. Delay time, Td
  2. Rise time, Tr
  3. Peak time, Tp
  4. Percent overshoot (%OS) or Maximum overshoot (Mp)
  5. Settling time, Ts

These specifications are defined as follows:

Delay time (Td): it is the time required for the response to reach half the final value the very first time.

Rise time (Tr): it is the time required for the response to rise from 10% to 90%. In other words, to go from 0.1 of the final value to 0.9 of the final value.

Peak time (Tp): it is the time required for the response to reach the first peak of the overshoot.

Maximum overshoot (Mp): it is the maximum peak value of the response curve measured from unity. It is also the amount that the waveform overshoots the final value, expressed as a percentage of the steady-state value.

Settling time (Ts):  it is the time required for the transient damping oscillations to reach and stay within ±2% or ±5% of the final or steady-state value.

These specifications are graphically shown in Figure 5-8:

[3]

It is important to remark that these specifications don’t necessarily apply to any given case. For example, the terms peak time and maximum overshoot do not apply to overdamped systems.

Except for certain applications where oscillations can’t be tolerated, it is desirable that the transient-response be sufficiently fast and sufficiently damped. Thus, for a desirable transient response of a second-order system, the damping ratio must be between 0.4 and 0.8. Small values of σ (σ<0.4) yields excessive overshoot in the transient response, and systems with a large value of σ (σ>0.8) responds sluggishly. We will also see that the maximum overshoot and the rise time conflict with each other. In other words, they cannot be made smaller simultaneously.

Analytically:
Rise time (Tr):

where ωd is the damped natural frequency:

and ß is defined by the Figure 5-9:

[3]

Peak time (Tp):

Settling time (Ts):

Transient-response of Higher-order systems.

It could be seen that the transient response of a system higher than a second-order is the sum of the responses of first-order and second order systems.  

Transient-response of a First-order system.

We briefly discuss the transient response of a first-order system. A first-order system without zeros can be described by the transfer function shown in Figure 4.4(a).

[1]

If the input is a unit step, where R(s)=1/s, the Laplace transform of the step response is C(s), where:

Taking the inverse transform:

Figure 4-5 shows a typical response of this system to a unit step input:

[1]

We call 1/a the time constant of the response. The parameter a is the only one needed to describe the transient response for a first-order system. Thus, the time constant can be considered a transient response specification for a first order system, since it is related to the speed at which the system responds to a step input. Since the pole of the transfer function is at a, we can say the pole is located at the reciprocal of the time constant, and the farther the pole from the imaginary axis, the faster the transient response.

The other specifications for a first-order system are:

Rise time (Tr):

Settling time (Ts):

NEXT: Control System Stability

Source:

  1. Control Systems Engineering, Nise pp 177-181
  2. Sistemas de Control Automatico Benjamin C Kuo p 385,
  3. Modern_Control_Engineering, Ogata 4t pp 224, 232

Written by: Larry Francis Obando – Technical Specialist – Educational Content Writer.

Escuela de Ingeniería Electrónica de la Universidad Simón Bolívar, Valle de Sartenejas.

Escuela de Ingeniería Eléctrica de la Universidad Central de Venezuela, Caracas.

Escuela de Turismo de la Universidad Simón Bolívar, Núcleo Litoral.

Contact: Caracas, Quito, Guayaquil, Jaén- Telf. +34 633129287

WhatsApp: +34 633129287

email: dademuchconnection@gmail.com

Attention:

If what you need is to solve urgently a problem of a «Mass-Spring-Damper System » (find the output X (t), graphs in Matlab of the 2nd Order system and relevant parameters, etc.), or a «System of Electromechanical Control «… to deliver to your teacher in two or three days, or with greater urgency … or simply need an advisor to solve the problem and study for the next exam … send me the problem…

, …I will give you the answer in digital and I give you a video-conference to explain the solution … it also includes simulation in Matlab. In the link above, you will find the description of the service and its cost.

Related:

The Block Diagram – Control Engineering

Dinámica de un Sistema Masa-Resorte-Amortiguador

Block Diagram of Electromechanical Systems – DC Motor

Control System Stability

Steady-state error in Control Systems