Programowanie dla "nie-programisty"

0

Hej

Chcę nauczyć się programowania. Będę robił studia inżynierskie celujące bardziej w branżę produkcyjną - programować chcę się nauczyć, by móc ułatwić sobie życie, posiąść ciekawą, twórczą umiejętność.

Zastanawiam się w co uderzyć, by wynieść to co mnie interesuje - poszukałem trochę w necie i chcę skonsultować.

Nie chcę pracować jako programista - zaznaczam.

-Przykładowo potrzebuję jakiś program do obliczeń dla siebie czy dla innych pracowników (czyli najlepiej z GUI) - Java -> JavaFX to dobre wyjście?

-Z kolei gdybym chciał przynajmniej rozumieć jak działa jakaś maszyna to czego powinienem się uczyć? Bardziej elektronika + C a następnie pobawić się trochę w programowanie sterowników PLC?

-Jak ma się sprawa np.z systemami wizyjnymi? Załóżmy, że firma robi masowo jakiś detal i na powierzchni pojawiają się rysy - chcę stworzyć (ja czy jakiś zespół inżynierów, automatyka / informatycy - chcę kooperować) system wizyjny - uczenie maszynowe? Kamera ma wyłapywać np.rysę na powierzchni z obrazu mikroskopu i ma wiedzieć, że rysy są złe i ma wyskakiwać, że detal jest do zbrakowania. Czy to jest wgl możliwe? Rysy są różnych wymiarów / kształtu.

Możliwe, że to trochę chaotyczne, prowadzę "rozważania wstępne", nie mam świadomości jak to jest skomplikowane, chociaż podejrzewam, że ciężko będzie to wszystko raczej ogarnąć, pewnie chcę zdobyć jakąś bazę edukacyjną i w zależności od sytuacji się doszkalać, ale wstępnie interesują mnie zagadnienia takiego typu jak te przedstawione w trzech powyższych przykładach.

2
  1. Cokolwiek high level np. Java, Python, C#. Python będzie pod tym względem najłatwiejszy.
  2. Tak, chociaz akurat python potrafi też interfejsować się z niskopoziomowymi rzeczami
  3. Tak, patrz np. OpenCV
3

-Przykładowo potrzebuję jakiś program do obliczeń dla siebie czy dla innych pracowników (czyli najlepiej z GUI) - Java -> JavaFX to dobre wyjście?

Excel (albo inny arkusz kalkulacyjny)? W komórkach też można zapisać obliczenia. I jeszcze wykresy porobić. I od tego pewnie bym zaczął, jeśli chodzi o same obliczenia. Chociaż pytanie, czego dokładnie oczekujesz.

2
Pete07 napisał(a):

-Przykładowo potrzebuję jakiś program do obliczeń dla siebie czy dla innych pracowników (czyli najlepiej z GUI) - Java -> JavaFX to dobre wyjście?

W zależności od wielkości programu będzie Ci trudno albo bardzo trudno stworzyć taki program, ale nie zniechęcam :P

-Z kolei gdybym chciał przynajmniej rozumieć jak działa jakaś maszyna to czego powinienem się uczyć? Bardziej elektronika + C a następnie pobawić się trochę w programowanie sterowników PLC?

PLC to zupełnie inny zestaw obrazkowych języków programowania kierowanych do automatyków. Niektóre programuje się w pseudoasemblerze lub pseudopascalu. Słyszałem że niektóre w C, ale takich nie widziałem na studiach

-Jak ma się sprawa np.z systemami wizyjnymi? Załóżmy, że firma robi masowo jakiś detal i na powierzchni pojawiają się rysy - chcę stworzyć (ja czy jakiś zespół inżynierów, automatyka / informatycy - chcę kooperować) system wizyjny - uczenie maszynowe? Kamera ma wyłapywać np.rysę na powierzchni z obrazu mikroskopu i ma wiedzieć, że rysy są złe i ma wyskakiwać, że detal jest do zbrakowania. Czy to jest wgl możliwe? Rysy są różnych wymiarów / kształtu.

Rozpoznawanie obrazów i uczenie maszynowe. Jedne z trudniejszych rzeczy jakie są :D

1
Pete07 napisał(a):

Hej

Chcę nauczyć się programowania. Będę robił studia inżynierskie celujące bardziej w branżę produkcyjną - programować chcę się nauczyć, by móc ułatwić sobie życie, posiąść ciekawą, twórczą umiejętność.

Zarządzanie i Inżynieria Produkcji?
Spoko, nie musisz umieć programować, od tego masz mnie bo specjalizuję się w dedykowanych systemach dla produkcji sensu stricte ;-)

Zastanawiam się w co uderzyć, by wynieść to co mnie interesuje - poszukałem trochę w necie i chcę skonsultować.

Nie chcę pracować jako programista - zaznaczam.

-Przykładowo potrzebuję jakiś program do obliczeń dla siebie czy dla innych pracowników (czyli najlepiej z GUI) - Java -> JavaFX to dobre wyjście?

Jednak stawiałbym na Pythona.
Można też i w Excelu nim dziergać: www.pyxll.com

-Z kolei gdybym chciał przynajmniej rozumieć jak działa jakaś maszyna to czego powinienem się uczyć? Bardziej elektronika + C a następnie pobawić się trochę w programowanie sterowników PLC?

PLC to w ogóle temat rzeka, bo to zależy...
Zależy od tego co chcesz zrobić (sterowanie czy monitorowanie) i od tego jakie sterownik PLC masz pod ręką.
Beckhoff ma fajne rozwiązania do sterowania i programowania sterowników (i nie tylko), ale Simensa jest więcej.
A Fanuc to w ogóle jest z innego świata.
Itd.

Tu lepiej zainwestować odrobinę czasu w naukę i zrozumienie OPC/UA (a jeśli w grę wchodzi branżą tworzyw sztucznych, to EUROMAP. Jeżeli obróbka metali/drewna na centrach obróbczych CNC, to wtedy MTConnect) i nie tracić czasu na naukę programowania drabinkowego w PLC, bo można to zrobić inaczej/lepiej/szybciej.

-Jak ma się sprawa np.z systemami wizyjnymi? Załóżmy, że firma robi masowo jakiś detal i na powierzchni pojawiają się rysy - chcę stworzyć (ja czy jakiś zespół inżynierów, automatyka / informatycy - chcę kooperować) system wizyjny - uczenie maszynowe? Kamera ma wyłapywać np.rysę na powierzchni z obrazu mikroskopu i ma wiedzieć, że rysy są złe i ma wyskakiwać, że detal jest do zbrakowania. Czy to jest wgl możliwe? Rysy są różnych wymiarów / kształtu.

Tak, to jest możliwe i mniej więcej tak to działa.
Ale nie znam żadnej firmy produkcyjnej która robiłaby podobne rozwiązania we własnym zakresie.
Używa się po prostu gotowców, takich jak np. www.sick.com/pl/
A z nimi bywa różnie, bo co prawda nowe rozwiązania wspierają pewne standardy komunikacyjne (a więc np. MQTT a nie tylko Modbus czy nawet RS-485), ale park maszynowy firmach nie jest jednorodny.
Np. system kontroli wizyjnej z którym miałem styczność pozwalał na integrację, za pomocą... FTP. Poważnie.
I takie kwiatki są na produkcji standardem. Niestety...

To jest naprawdę istotny problem dlatego jest wiele rozwiązań opartych na jakimś Raspberry Pi lub czymś podobnym.
Często jest to zakodowane w Pythonie.

Możliwe, że to trochę chaotyczne, prowadzę "rozważania wstępne", nie mam świadomości jak to jest skomplikowane,

Oj jest tam cała masa niuansów.
Same problemy do rozwiązania są z gatunku średnio do trudnych, ale są i takie które są szalenie trudne jak np. optymalizacja planu i wykonania produkcji wraz z monitorowaniem, egzekucją i raportowaniem produkcji w czasie rzeczywistym w zamkniętej pętli zwrotnej.

chociaż podejrzewam, że ciężko będzie to wszystko raczej ogarnąć, pewnie chcę zdobyć jakąś bazę edukacyjną i w zależności od sytuacji się doszkalać, ale wstępnie interesują mnie zagadnienia takiego typu jak te przedstawione w trzech powyższych przykładach.

Poważnie, nie wiem co powiedzieć :)

3

Dla Twoich potrzeb Python jest najlepszym rozwiązaniem - jest prosty, ma bardzo dobrą dokumentację, w necie jest masa tutoriali zarówno w formie pisemnej jak i wideo.
Do GUI jest dobra biblioteka, która się nazywa Kivy. Kiedyś się nią bawiłem i byłem zadowolony z rezultatów. Działa na wszystkich popularnych platformach.
Jeśli chodzi o programowanie PLC to niestety nie miałem styczności, natomiast wydaje mi się, że robienie portów z pythona do C nie powinno być jakimś nad wyraz złożonym zadaniem. Przypuszczam też, że większość dostępnych sterowników PLC ma już gotowe pythonowe biblioteki.
Do rozpoznawania obrazów dobre jest OpenCV, tak jak wspomniał @Shalom. Niestety, dla początkującego mankamentem może być uboga dokumentacja. Parę razy korzystałem z OpenCV i czasem miałem spore problemy, bo nie rozumiałem enimagtycznych deklaracji metod.

I najważniejsze: jak już naskrobiesz coś bardziej złożonego niż kalkulator, i natkniesz się na blokera i powiesz sobie "ech, to nie dla mnie", to podziel się kodem na forum! Code review jest istotnym elementem w rozwoju umiejętności. Powodzenia!

2
Pete07 napisał(a):

-Z kolei gdybym chciał przynajmniej rozumieć jak działa jakaś maszyna to czego powinienem się uczyć? Bardziej elektronika + C a następnie pobawić się trochę w programowanie sterowników PLC?

Jeżeli masz na myśli maszynę cyfrową, to elektronika + C może być. PLC to taki uzbrojony komputer z certyfikatami do specjalnych zastosowań głównie w fabrykach ulubiony przez automatyków i elektryków, bo szybko mogą dokonać zmian w instalacji elektrycznej i algorytmie sterującym jakimś urządzeniem. Ich miejsce to w zasadzie tylko szafy sterujące, ze względu na gabaryty, pobór mocy, etc. Tanie to nie jest, licencje na oprogramowanie też swoje kosztuje oraz mają swoje specyficzne rodzaje języków nigdzie indziej niespotykane.

Prawdopodobnie tańsza zabawa będzie z np. RaspberryPi plus dodatkowo jakaś płytka (hat) z przekaźnikami, przetwornikami analogowo-cyfrowymi, mostek typu H to sterowania silnikiem. Na tym możesz postawić serwer z jakimś API do sterowania podłączonymi urządzeniami, zabawy co nie miara i elektroniki do tego trochę poznasz. Do tego masz WiFi, Ethernet, USB, port do kamerki, HDMI, gniazdko na głośniki, mikrofon i duży wybór języków.

Jeszcze prostsze będą mikrokontrolery (μC), czyli komputery w jednym układzie scalonym przeważnie bez Systemu Operacyjnego. Najpopularniejsza płytka developerska Arduino pomoże szybko wejść w temat. μC są wszechobecne, masz je w myszce, klawiaturze, pralce, mikrofalówce, kilkadziesiąt w samochodzie w różnych miejscach, kartach kredytowych, zabawkach dla dzieli, etc. Można by się zastanawiać gdzie ich nie ma.

0

Dzięki za życzliwość, rozbudowane odpowiedzi, pewnie będę wracał do tego tematu, bo zostawiliście sporo wskazówek.. Już wiem gdzie zacząć. Pozdrawiam!

0
Pete07 napisał(a):

Dzięki za życzliwość, rozbudowane odpowiedzi, pewnie będę wracał do tego tematu, bo zostawiliście sporo wskazówek.. Już wiem gdzie zacząć. Pozdrawiam!

Jeszcze jedna wskazówka:
Node-RED -> https://nodered.org/

1
Pete07 napisał(a):

-Jak ma się sprawa np.z systemami wizyjnymi? Załóżmy, że firma robi masowo jakiś detal i na powierzchni pojawiają się rysy - chcę stworzyć (ja czy jakiś zespół inżynierów, automatyka / informatycy - chcę kooperować) system wizyjny - uczenie maszynowe? Kamera ma wyłapywać np.rysę na powierzchni z obrazu mikroskopu i ma wiedzieć, że rysy są złe i ma wyskakiwać, że detal jest do zbrakowania. Czy to jest wgl możliwe? Rysy są różnych wymiarów / kształtu.

W pracy zajmuje się tym o czym wspomniałeś i mogę z góry powiedzieć, że taki projekt poprawnie działający zdecydowanie NIE jest czymś prostym do zrobienia. U nas zajmuje się tym full-time mix matematyków+developerów+inżynierów.

Jeśli długofalowo chciałbyś iść w tym kierunku to proponowałbym ci pythona, imo w nim najłatwiej napisać coś działającego.

1 użytkowników online, w tym zalogowanych: 0, gości: 1