Program and design automation and control systems using open-source tools and equipment. Tailored for enthusiasts and professionals working in automation and robotics environments based on PLCs, HMI, and SCADA.

Features

OpenAI-Automation is a free platform that drives control in industrial automation and robotics through open source systems and devices.

Complement your projects with the power of artificial intelligence and other software tools such as real-time databases.

Turn your mobile device, laptop, desktop PC, tablet or iPad into your graphical user interface and the main processing engine of your programmable logic controller.

Getting started

For more examples and methodologies visit openai-automation.com

Usage

import 'package:flutter/material.dart';
import 'package:openai_automation/openai_automation.dart';
import 'package:provider/provider.dart';

void main() async {
  
      // Communication with the device via USB begins. No need to have a connected device to perform tests.
      await MyPLC.usb.connect(usbIndex: 0, inputs: 8, outputs: 8);
      
      //Set the main program, traffic light example included in the library
      MyPLC.mini.mainLogicProgram = Programs.simpleTrafficLight;

      //OpenAutomation implements the ChangeNotifier class to notify changes.
      // Use a supported state manager of your choice, for example Provider, Riverpod or Bloc
      runApp(MultiProvider(
             providers: [ChangeNotifierProvider(create: (_) => MyPLC.mini)],
             child: const MyApp())
            );
      }

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'Mi first test with the controllino mini configuration',
      home: Scaffold(
        body: Center(
          child: IOStatus(),
        ),
      ),
    );
  }
}

//It is recommended to have a separate widget for using I/O status with your status manager
class IOStatus extends StatelessWidget {
  const IOStatus({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {

    //listen to the events and redraw only this widget
    Provider.of<OpenAutomation>(context);

    return Text(
            'Device: ${MyPLC.mini.deviceReport}\n\n'
            'Input Data: ${MyPLC.mini.inputDataPayload}\n\n'
            'Output Data: ${MyPLC.mini.outputDataPayload}');
    }
}

//Use the instances of your libraries as static and in a separate class
class MyPLC {
  static OpenAutomation mini = OpenAutomation.getInstance();
  static UsbCommWindows usb = UsbCommWindows(mini);
}

Additional information

Join this great community Visit openai-automation.com

Libraries

openai_automation