Skip to content

Teaching

Industrial Informatics (MSc in ECE @ FEUP)

This course focused on enabling the students to analyse, design, implement, and document industrial control systems, using domain specific modelling tools (GRAFCET) and programming languages (IEC 61131-3 and IEC 61499). The course program included programming industrial systems using IEC 61131-3 (using programming languages such as sequential function charts, functional block diagrams), UML modelling, design patterns, and technologies for industrial integration (XML, OPC-UA). In the laboratory classes, the students were required to develop an industrial control system composed by three subsystems: the factory automation level using the Codesys soft-PLC, the Manufacturing Execution System (MES) to schedule the daily production of the factory and supervise the production statistics, and the Enterprise Resource Planning (ERP) to receive the client orders and compute the long-term sceduling of the production (decouple client orders into parts production, handling suppliers' orders, and dispatch the orders deliveries). Although the communication between PLC and MES was forced to be OPC-UA, the students could choose any other technology and communication protocol between the MES and ERP.

My participation in lecturing the laboratory classes of the Industrial Informatics course was mainly on project supervision, helping the students to elaborate the architecture for their industrial control system, while also contributing on small development examples (e.g., usage of OPC-UA with Codesys).

Software Design (MSc in ECE @ FEUP)

This course focused on teaching software engineering concepts, methods, and techniques to enable students to apply them in the design and development of software systems. The students were required to choose a software engineering project during all the semester. This project had to satisfy two of the following three requirements: information system (database), Graphical User Interfaces (GUI), and/or client-server architecture. Any programming language could be used to develop the project, even though we advised the students to use either C++ or Java, in order to guarantee some support in terms of the implementation throughout the development. The expected learning outcomes and competences for the students after finishing the Software Design were the following ones: formulation of a product vision, identification and documentation of a software system's requirements using user stories, UML modelling (use cases, class, sequence, and components diagrams, among others), unit tests, use of version control systems (e.g., Git), project management, and plan, estimation, and management of an agile software development process.

My participation in lecturing the laboratory classes of the Software Design course included the following contributions: fully documented examples of how to configure the C++ and Java development environment in Linux and Windows (in the case of C++, using different compilation tools: make, CMake, and even with the JSON tasks of Visual Studio Code), program examples with implementations of GUIs (Qt) and database connection (PostgreSQL), unit test examples using the GTest portable framework, and project supervision during the semester.