Autor Wątek:  MaSzyna z portem COM (SerialPort)  (Przeczytany 56493 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline maciek001

  • Wiadomości: 137
    • Zobacz profil
    • FanPage symulatora ET22
  • Otrzymane polubienia: 33
MaSzyna z portem COM (SerialPort)
« dnia: 13 Listopada 2016, 17:07:48 »
Konfiguracja portu szeregowego (COM):
Standardowa ramka UART -> 8 bitów danych, 1 bit stopu, bez kontroli parzystości i przepływu
Prędkość można ustawiać w pliku eu07.ini. Ja używam 0,5Mbps (przejściówka UART-USB).

Jak działa transmisja:
Transmisję rozpoczyna PC-et wysyłając pierwszy bajt danych. Mikrokontroler od razu odsyła pierwszy bajt danych.
Drugi bajt danych z PC - drugi bajt danych z uKontrolera itd.
Jeżeli uKontrolerowi skończą się dane do wysłania to tylko odbiera.

Jak to działa w praktyce: komputer nadaje całą ramkę danych. Mikrokontroler powinien niezwłocznie nadać dane do komputera. Mikrokontroler może wysłać wszystkie dane w momencie odebrania czegokolwiek od PC-ta (full-duplex). Nie wysyła się danych do PC-ta więcej razy niż PC-et wysłał do mikrokontrolera. Taki sposób transmisji zabezpiecza przed wysyłaniem danych jeżeli port szeregowy w komputerze nie został jeszcze otwarty.

Konfiguracja wejść (przycisków i przełączników):
Przypisania wejść do funkcji dokonuje się w pliku eu07_input-uart.ini. Umożliwia konfigurację sygnału jako impulsowego lub bistabilnego (przełącznika).

Konfiguracja wyjść (lampek kontrolnych, itp):
Nie ma możliwości skonfigurowania tego rodzaju sygnałów. Są one na stałe przypisane do danego Bajtu i bitu (patrz dokumentacja w arkuszu kalkulacyjnym).

Wpisy do pliku eu07.ini:
Do wygenerowania wpisów polecam aplikację MWD SerialPort tester (link niżej). Umożliwia załączenie/wyłączenie obsługi nastawników, kranów hamulców (wejść), kalibrację mierników (manometrów i elektrycznych), konfigurację prędkości transmisji danych i inne.

Programy i przydatne pliki do programowania i testowania elektroniki do pulpitów:
Pod linkiem https://drive.google.com/drive/folders/17aRJMr7fRE2PSOPi4jztCh_sjgfq0Xwz?usp=sharing znajdziecie kilka plików i program, które mogą przydać się przy budowie elektroniki do pulpitu:
  • Program MWD SerialPort tester  służy do generacji wpisów do pliku eu07.ini oraz testowania komunikacji z elektroniką - emulacja symulatora. Można w nim zadawać i odczytywać stany przełączników i kontrolek, odczytywać wartości nastawników i innych kontrolerów. Podczas pierwszego uruchomienia generują się pliki indicatorInfo.ini i switchInfo.ini, w których można przypisać nazwy do kontrolek i przełączników. Program wspomaga ramkę danych od Milek7, opisaną w pliku poniżej.
  • Plik * Maszyna Uart.ods zawiera informacje na temat danych wysyłanych w obu kierunkach
  • Plik libserialport-0.dll: można go podmienić z plikiem w folderze maszyny jeżeli komunikacja z moim programem działa, a Maszyna się nie włącza i generowany jest plik dump (mnie pomogło).

MWD SerialPort tester
Zrzuty z programu dostępne tutaj: https://drive.google.com/drive/folders/1kNK0Q2bLePwM6I0lvyZe6gXf6CnAO8Gt
Wypuściłem wersję 1.2.2 1.0 (u mnie działa). Jeżeli są jakieś problemy proszę o stosowną informację w PW. Program zgodny z wersją MaSzyny21.04 i exe od Tmj.

Komunikacja od dłuższego czasu działa na standardowym exe, pomimo tego załączam linki do exe Tmj:
- od Milek7: https://ci.appveyor.com/project/Milek7/maszyna/build/artifacts
- Tmj: https://eu07.pl/forum/index.php/topic,28920.0.html
exe od Tmj obsługuje już nową ramkę.

Linki do plików źródłowych na github:
https://github.com/eu07/maszyna/blob/master/uart.h
https://github.com/eu07/maszyna/blob/master/uart.cpp

Lista zmian:
Aktualizacja 2021.05.10 2220
MWDSerialPortTester 1.2.2. Dodana obsługa manometru pantografu i porządki w kodzie.

Aktualizacja 2020.05.31 1130
Edycja postu: uzupełnienie informacji.

Aktualizacja 2020.05.12 2100
MWDSerialPortTester 1.0. Poprawa wyglądu i drobne porządki w kodzie.

Aktualizacja 2020.04.13 1320
Aktualizacja arkusza kalkulacyjnego o przekaźnik różnicowy (ground_relay). Exe Tmj powinno współpracować z nową ramką.

Aktualizacja 2020.04.10 1830
MWDSerialPortTester 0.2.2 poprawiono generację wpisów do pliku eu07.ini oraz dodano wpis uarttachoscale - mnożnik prędkości.

Aktualizacja 2020.04.09 2135
do programu MWDSerialPortTester dodano generację wpisów do pliku eu07.ini.

Aktualizacja 2020.04.08 1855
Powoli dokonuję zmian w tym wpisie. Będę go czyścił i redagował na nowo.
Exe z jakim współpracować będzie opisana ramka będzie od Milek7.
« Ostatnia zmiana: 24 Maja 2021, 17:39:26 wysłana przez maciek001 »
Wszystko da się zrobić tylko jeszcze nie wiem jak.

Online miko22

  • Wydział Promocji
  • Wiadomości: 619
  • Promocja MaSzyny w terenie
    • Zobacz profil
    • Nasze-Symulatory.pl
  • Otrzymane polubienia: 200
Odp: MaSzyna z portem COM
« Odpowiedź #1 dnia: 14 Lutego 2017, 21:04:37 »
Udało mi się przekonwertować nadawanie i odbiór według Twojego przykładu z pierwszego postu na język Arduino (bajty w tablicach liczone są od 0):
volatile uint8_t TablicaZPC[31] = {0};
volatile uint8_t TablicaDoPC[17] = {0};
void setup() {
  pinMode(13, OUTPUT);     //ustawienie pinu 13 (wbudowana w Arduino dioda LED) jako wyjście cyfrowe
  digitalWrite(13, LOW);     //ustawienie stanu niskiego na pinie 13
  Serial.begin(500000);     //nawiązanie komunikacji z prędkością 500000b/s
  while(!Serial){};     //czekanie do nawiązania komunikacji z komputerem
}

void loop() {
  for(byte i=0; i<31; i++){     //pętla umożliwiająca wysłanie 31 bajtów danych
   while(!Serial.available());     //czekamy na odebranie bajtu danych
   TablicaZPC[i] = Serial.read();     //zapis danych do naszej tablicy
   if(i < 17){   //zabezpiecznie, żeby nie wysłać za dużo danych do komputera
    Serial.flush();     //sprawczanie czy już wysłano wcześniejsze dane (czekanie na wysłanie danych)
    Serial.print(TablicaDoPC[i]);     // wysłanie danych do komputera
   }
  }

  digitalWrite(13, (TablicaZPC[4] & (1<<1)));     //ustawienie wyjścia 13 (dioda LED) według stanu bitu 2 w bajcie 4 w TablizaZPC
}

Zacząłem od sprawdzania poszczególnych kontrolek i tak np. w ET41 zamiast kontrolki jazdy na oporach jest kontrolka sygnalizacji wentylatorów oporów, a w ET22 jak i w EU07 303E nie działa to w ogóle. Kontrolek CA, SHP, styczników liniowych i WSa jak na razie nie udało mi się uruchomić ani w ET41, ani w ET22. Do tego mimo wpisu "mwdbreakenable no", nie daje mi się z klawiatury sterować kran hamulca pomocniczego (zasadniczy działa).
« Ostatnia zmiana: 14 Lutego 2017, 21:14:53 wysłana przez miko22 »

Offline maciek001

  • Wiadomości: 137
    • Zobacz profil
    • FanPage symulatora ET22
  • Otrzymane polubienia: 33
Odp: MaSzyna z portem COM
« Odpowiedź #2 dnia: 14 Lutego 2017, 22:29:31 »
Masz tego aktualnego exe-ca? Sprawdzałem przedtem oby dwa i działało ;) Aktualnie są jakieś kończące się prace z przenosinami do Cpp i nie wiem czy nie będzie przerwa na razie.
Wszystko da się zrobić tylko jeszcze nie wiem jak.

Online miko22

  • Wydział Promocji
  • Wiadomości: 619
  • Promocja MaSzyny w terenie
    • Zobacz profil
    • Nasze-Symulatory.pl
  • Otrzymane polubienia: 200
Odp: MaSzyna z portem COM
« Odpowiedź #3 dnia: 14 Lutego 2017, 23:07:01 »
Tak, mam tego z ostatniej aktualizacji. Natomiast za pomocą dołączonego programu testowego doszedłem do tego, że aby odczytać bit 2 bajtu 5, muszę mieć w kodzie wpisane odczytywanie bajtu 8. Podobnie z pozostałymi bajtami - przesunięcie o 3 numerki. Mimo tej poprawki i możliwości ustawienia stanu wyjścia z programu odpowiednim bitem, kontrolka jazdy na oporach nadal nie reaguje z poziomu MaSzyny. Natomiast jeśli dodam do kodu wysyłanie jednego bitu, to wysyła ten bit "impulsowo" (czyli najpierw 1 i od razu 0) na wszystkie bajty:
if(digitalRead(2)==LOW){     //jeśli wejście na pinie 2 ma stan niski (zwarte przycikiem do masy)
    TablicaDoPC[3] = TablicaDoPC[3] | (1<<1);     //ustawienie bitu 2 w bajcie 3 w TablicaDoPC na 1
  }
  else{
    TablicaDoPC[3] = TablicaDoPC[3] & !(1<<1);     //w przeciwnym przypadku na 0
  }

Edit: Dodam jeszcze tylko, że kiedy sprawdzam działanie komunikacji na arduinowym monitorze portu szeregowego, to wszystko działa poprawnie. Jedynie zamiast "Serial.write()" muszę używać wtedy "Serial.print()", bo inaczej nic mi nie wyświetla w oknie odbioru danych, ale z kolei przy "Serial.print()" w Twoim programie jest już całkowita dyskoteka - odczytuje chwilowe przesłanie dosłownie każdego bitu po kolei (mimo ustawionych zer w tablicy "DoPC").
Natknąłem się natomiast na coś takiego, jak Arduino DUE. Jego klon kosztuje 1/3 tego co PoKeys (oryginał 169zł), a gdyby zadziałało z MaSzyną, to dałoby znacznie więcej możliwości od PoKeys. Środowisko programowania jest to samo, ale w odróżnieniu od innych Arduin, to oparte jest nie na ATmedze 16MHz, ale na procesorze ARM 84MHz. Posiada 54 cyfrowe wejścia/wyjścia, w tym 12 kanałów PWM, 4 osobne interfejsy UART, jeden I2C, do tego osobno drugi interfejs I2C, 12 wejść analogowych i 2 wyjścia analogowe. Dla "nieznających się", łącznie dwa interfejsy I2C (piny SDA i SCL) pozwalają m.in. zwiększyć ilość cyfrowych wejść/wyjść za pomocą dopinanych układów scalonych o przynajmniej 384 i więcej, jeśli tylko znajdzie się układy z innymi adresami! Do tego pełna swoboda przypisywania sobie poszczególnych wejść/wyjść według własnego uznania (program pisze się samemu - na forum można by wstawić też jakiegoś gotowca dla mniej wymagających) i możliwość dodania innych funkcji w tym samym urządzeniu (obsługa mierników NN, symulowanie efektów świetlnych przy załączaniu/wyłączaniu się sprężarek i co kto sobie jeszcze wymyśli). Więcej szczegółów technicznych dot. płytki na stronie polskiego dystrybutora.
« Ostatnia zmiana: 18 Lutego 2017, 00:52:28 wysłana przez miko22 »

Offline maciek001

  • Wiadomości: 137
    • Zobacz profil
    • FanPage symulatora ET22
  • Otrzymane polubienia: 33
Odp: MaSzyna z portem COM
« Odpowiedź #4 dnia: 18 Lutego 2017, 21:56:26 »
I2C pozwala zaadresować max 128 urządzenia o różnych adresach (od 0 do 127). Jeżeli chcemy zwiększyć ilość elementów na magistrali musimy używać dodatkowych scalaków (np multipleksery I2C). Do zwiększenia ilości wejść/wyjść można wykorzystać SPI i bufory SIPO i PISO. Prędkość mikrokontrolera nie ma większego znaczenia ;)
Funkcja Serial.Printf() najprawdopodobniej posługuje się znakami ASCII, a Serial.Out() wyrzuca bit po bicie tak jak jest w buforze (tablica, struktura).

Co do samego kodu: będę testował dopiero w tygodniu na symulatorze bo nie mam na tyle sprzętu w mieszkaniu.
Wszystko da się zrobić tylko jeszcze nie wiem jak.

Offline maciek001

  • Wiadomości: 137
    • Zobacz profil
    • FanPage symulatora ET22
  • Otrzymane polubienia: 33
Odp: MaSzyna z portem COM
« Odpowiedź #5 dnia: 13 Maja 2017, 15:24:20 »
Drodzy czytelnicy i udzielający się w tym wątku.
Postanowiłem zrobić dokumentację w arkuszu kalkulacyjnym znajdującym się TUTAJ
Plik zawiera opis:
    • wejść
    • wyjść
    • wpisów do pliku eu07.ini
    • informację o używaniu debugowania (kalkulator wartości)
    Edit: aktualne linki w pierwszym poście.
« Ostatnia zmiana: 31 Maja 2020, 10:52:51 wysłana przez maciek001 »
Wszystko da się zrobić tylko jeszcze nie wiem jak.

Offline Łakasabasz

  • Wiadomości: 25
    • Zobacz profil
  • Otrzymane polubienia: 6
Odp: MaSzyna z portem COM
« Odpowiedź #6 dnia: 09 Sierpnia 2017, 15:38:47 »
Według mnie to uK powinien pierwszy rozpocząć komunikację przez wysłanie pierwszego bajtu o wartości np. 0xFF (255). To by otworzyło drogę do Plug & Play.
Przy komunikacji liczą się pojedyncze bajty czyli liczby całkowite, więc wyrzuciłbym wpisy w pliku eu07.ini dla liczb rzeczywistych.
Trzecia rzecz też odnośnie komunikacji, idźmy w Full Duplex czyli transmisję w dwie strony jednocześnie, a nie jak teraz Half Duplex. Nie potrzeba wątków, ale wystarczy wysyłać po bajcie sterującym od uK do maszyny, a maszyna rozpocznie wysyłanie ramki do uK. Arduino ma bufor danych więc nie ma z tym problemów, odczyta to co zostało wysłane kiedy będzie miało czas. (uK - mikrokontroler)

P.S. Includy dla arduino na https://git.eu07.pl/Lakasabasz/Arduino-Maszyna-Port

Online miko22

  • Wydział Promocji
  • Wiadomości: 619
  • Promocja MaSzyny w terenie
    • Zobacz profil
    • Nasze-Symulatory.pl
  • Otrzymane polubienia: 200
Odp: MaSzyna z portem COM
« Odpowiedź #7 dnia: 10 Sierpnia 2017, 04:16:31 »
Według mnie to uK powinien pierwszy rozpocząć komunikację przez wysłanie pierwszego bajtu o wartości np. 0xFF (255). To by otworzyło drogę do Plug & Play.
Moim zdaniem lepiej jednak, kiedy to MaSzyna rozpoczyna komunikację z tego względu, że pulpit (mikrokontroler) jest z reguły połączony przez USB z komputerem przed uruchomieniem się exe MaSzyny i może sobie spokojnie czekać, aż wczyta się jakiś scenariusz i exe zgłosi gotowość do współpracy przez wysłanie pierwszej informacji. W sytuacji odwrotnej potrzebny byłby jakiś dodatkowy przycisk, który wciskałoby się po stwierdzeniu, że scenariusz już się wczytał i uK może nawiązać komunikację z exe.

A czy działa Ci może komunikacja z Arduino na obecnych exe C++ od @tmj? Bo mi od exe++170330 nie działa odbieranie danych z uK, choć @tmj nie wprowadzał w tym czasie żadnych celowych zmian w tym zakresie. Poniżej kod, którego używam w UNO do testów nie zmieniając go i do exe++170330 wszystko działa, a od niego włącznie już nie odbiera informacji z uK...
volatile uint8_t TablicaZPC[31] = {0};
volatile uint8_t TablicaDoPC[17] = {0};
int cleanbuf;
void setup() {
  pinMode(13, OUTPUT);     //ustawienie pinu 13 (wbudowana w Arduino dioda LED) jako wyjście cyfrowe
  digitalWrite(13, LOW);     //ustawienie stanu niskiego na pinie 13
  pinMode(2, INPUT_PULLUP);     //ustawienie pinu 2 jako wejście z podciągnięciem do zasilania
  Serial.begin(500000);     //nawiązanie komunikacji z prędkością 500000b/s
  Serial.setTimeout(10);
  while(!Serial){};     //czekanie do nawiązania komunikacji z komputerem
}

void loop() {
  //while(Serial.available()){     //jeśli jakieś dane są w buforze
  for(byte i=0; i<31; i++){     //pętla umożliwiająca wysłanie 31 bajtów danych
   while(!Serial.available()){};     //czekamy na odebranie bajtu danych
   TablicaZPC[i] = Serial.read();     //zapis danych do naszej tablicy
   if(i < 16){   //zabezpiecznie, żeby nie wysłać za dużo danych do komputera
    Serial.flush();     //sprawczanie czy już wysłano wcześniejsze dane (czekanie na wysłanie danych)
    Serial.write(TablicaDoPC[i]);     // wysłanie danych do komputera
   }
  }
  //}

  digitalWrite(13, (bitRead(TablicaZPC[6], 1)));     //ustawienie wyjścia 13 według stanu bitu 1 w bajcie 4 w TablicaZPC (kontrolka jazdy na oporach)
  if(!(digitalRead(2))){     //jeśli wejście na pinie 2 ma stan niski (zwarte przycikiem do masy)
    bitWrite(TablicaDoPC[3], 0, 1);     //ustawienie bitu 1 w bajcie 3 w TablicaDoPC na 1 ( zał. baterii)
  }
  else{
    bitWrite(TablicaDoPC[3], 0, 0);     //w przeciwnym przypadku na 0
  }

  delay(10);
 
}

Offline Łakasabasz

  • Wiadomości: 25
    • Zobacz profil
  • Otrzymane polubienia: 6
Odp: MaSzyna z portem COM
« Odpowiedź #8 dnia: 10 Sierpnia 2017, 12:59:24 »
Mój projekt tworzę tak, że pierwsze inicjujesz klasę podając w konstruktorze bitrate, a potem jeżeli chcesz używać innych pinów do UART to rx, tx, jeśli nie to zostaje domyślnie. Gdy zainicjujesz klasę wywołujesz funkcję read(), a ona odczytuje dane z maszyny i porządkuje je do odpowiednich zmiennych. Odczytujesz wartości zmiennych przez getXX(). Więc ten sposób lepiej żeby uK rozpoczynał komunikację.
Nie testowałem biblioteki na "żywca", nie jest jeszcze skończona. Zrobiłem obsługę odczytu danych (funkcja read() i getXX()), ale jeszcze nie ma obsługi wysyłki danych (send())

Offline Łakasabasz

  • Wiadomości: 25
    • Zobacz profil
  • Otrzymane polubienia: 6
Odp: MaSzyna z portem COM
« Odpowiedź #9 dnia: 14 Sierpnia 2017, 19:07:12 »
Dotarłem do momentu gdzie w dokumentacji są luki...
Chodzi o to gdzie mają być dane impulsowe, a gdzie ma być stała wysyłka danych. Potrzebuje informacji o przetwornicy, sprężarki, ogrzewania, pantografy, przyciemnienie reflektorów, bateria i światła. Bez tego nie ruszę, bo mogę dla ułatwienia użyć słowa static i to zabezpieczy przed niechcianym wyłączeniu np. przetwornicy.
75% ukończenia projektu. Potem wyślę na git zip i opis jak używać biblioteki.

Online miko22

  • Wydział Promocji
  • Wiadomości: 619
  • Promocja MaSzyny w terenie
    • Zobacz profil
    • Nasze-Symulatory.pl
  • Otrzymane polubienia: 200
Odp: MaSzyna z portem COM
« Odpowiedź #10 dnia: 14 Sierpnia 2017, 20:29:18 »
Czyli jednym słowem hebelki? Nie wiem, na jak bardzo robisz "gotowca" pod względem obsługi wejść/wyjść w Arduino, ale jeśli o to chodzi, to prawdziwe hebelki (i włącznik baterii też) mają styki bistabilne, czyli po załączeniu zwierają np. dany pin Arduino do masy przez cały czas, a z kolei exe potrzebuje (przynajmniej z klawiatury) tylko impulsu na załączenie/wyłączenie danego elementu obsługiwanego hebelkiem.

Offline Łakasabasz

  • Wiadomości: 25
    • Zobacz profil
  • Otrzymane polubienia: 6
Odp: MaSzyna z portem COM
« Odpowiedź #11 dnia: 15 Sierpnia 2017, 19:12:39 »
Klasa będzie w pełni obsługiwać komunikację. Jedyne funkcje które powinieneś używać to .read() .send() i wszelkiego rodzaju .setXX(). Potem dam rekomendację, aby nadpisać funkcję set() tak aby obsługiwała tylko to co masz na pulpicie. Co by ci tu jeszcze powiedzieć? Nie będziesz musiał się babrać w tablicach i wyszukiwać odpowiedniego bitu danych.

Edit: I tak nie ruszę bez danych standardu komunikacji od maciek001. Proponuję nazwać ten standard MaszCOM ver 1 :D
« Ostatnia zmiana: 15 Sierpnia 2017, 19:15:00 wysłana przez Łakasabasz »

Online miko22

  • Wydział Promocji
  • Wiadomości: 619
  • Promocja MaSzyny w terenie
    • Zobacz profil
    • Nasze-Symulatory.pl
  • Otrzymane polubienia: 200
Odp: MaSzyna z portem COM
« Odpowiedź #12 dnia: 15 Sierpnia 2017, 19:22:19 »
I będzie to wprowadzone do gałęzi rozwojowej @tmj, żeby można było korzystać ze wszystkich nowych możliwości exe C++? Jak tak, to świetnie :-D Bo teraz próbuję coś sklecić z Arduino DUE i PoKeys jednocześnie, ale najlepsze exe, jakie mam do dyspozycji z działającą komunikacją jest z 26 lutego...

EDIT: Aha, jak byś mógł, to dodaj też od razu możliwość zmiany prędkości transmisji jak u maćka001, bo np. takie Arduino DUE ma logikę na 3,3V i przy domyślnych 500000bd/s robią się straszne zakłócenia i musiałem obniżyć, puki co na standardowe dla Arduino 9600bd/s.
« Ostatnia zmiana: 15 Sierpnia 2017, 20:26:33 wysłana przez miko22 »

Offline Łakasabasz

  • Wiadomości: 25
    • Zobacz profil
  • Otrzymane polubienia: 6
Odp: MaSzyna z portem COM
« Odpowiedź #13 dnia: 16 Sierpnia 2017, 13:04:46 »
Nie, to będzie biblioteka na arduino. Maciek tworzy standard i wprowadza obsługę od exe, a ja stoję po drugiej stronie i na podstawie dokumentacji standardu przygotowuję bibliotekę do arduino (i innych uK obsługujących arduino ide), która zajmuje się całą komunikacją. U nie ma "domyślnej prędkości", przy konstruktorze klasy z automatu musisz podać prędkość, albo kompilator cię nie puści.

https://git.eu07.pl/Lakasabasz/Arduino-Maszyna-Port

Tam masz to co udało mi się napisać. To dwie klasy, ale postaram się uprościć obsługę drugiej do maksimum, tak abyś musiał używać jednej, głównej. Jutro jadę na wczasy więc nie będę nic commitował przez 2 tyg, ale nadal czekam na uwagi w sprawie kodu i oczywiście czekam na Maćka aby podał mi hebelki.

Online miko22

  • Wydział Promocji
  • Wiadomości: 619
  • Promocja MaSzyny w terenie
    • Zobacz profil
    • Nasze-Symulatory.pl
  • Otrzymane polubienia: 200
Odp: MaSzyna z portem COM
« Odpowiedź #14 dnia: 16 Sierpnia 2017, 14:13:03 »
Ok, przetestuję w przyszłym tygodniu, bo po jutrze jadę z pulpitem do Chabówki ;) A ze standardową prędkością przesyłu danych w Arduino chodziło mi o to, że 9600bd/s to najczęściej spotykana prędkość w przeróżnych przykładach i stąd określiłem ją jako standardową.

Offline Łakasabasz

  • Wiadomości: 25
    • Zobacz profil
  • Otrzymane polubienia: 6
Odp: MaSzyna z portem COM
« Odpowiedź #15 dnia: 29 Września 2017, 17:00:12 »
Projekt dead?

Offline firleju

  • Zasłużony dla Symulatora
  • Wiadomości: 1588
  • bawię się (w) exe...
    • Zobacz profil
  • Otrzymane polubienia: 121
Odp: MaSzyna z portem COM
« Odpowiedź #16 dnia: 29 Września 2017, 18:16:56 »
Cały czas lecą poprawki na gicie. Czemu projekt ma być dead?
Skrypty do Blendera dostępne tutaj
W miarę aktualne wiki EXE wiki.eu07.es

Offline Łakasabasz

  • Wiadomości: 25
    • Zobacz profil
  • Otrzymane polubienia: 6
Odp: MaSzyna z portem COM
« Odpowiedź #17 dnia: 30 Września 2017, 13:29:29 »
Poczytaj poprzednie posty. Stanęło na tym że w dokumentacji brakuje paru szczegółów co uniemożliwia dalszą pracę, a autora niema od wakacji więc...
No chyba że ktoś aktywny przejmie projekt.

Offline maciek001

  • Wiadomości: 137
    • Zobacz profil
    • FanPage symulatora ET22
  • Otrzymane polubienia: 33
Odp: MaSzyna z portem COM
« Odpowiedź #18 dnia: 30 Września 2017, 13:39:02 »
Sorki! Żyję :) Prace trwają z pomocą milek7. Aktualnie podstawowe rzeczy w ET22 (bo na tym mam jak testować) działają. Podstawowe mam na myśli pulpit (bez przełącznika hamowania). Najnowsze exe dostępne pod adresem: https://ci.appveyor.com/api/buildjobs/yoh3vc3f007wb9u9/artifacts/builds%2Fbuild_win64%2FRelWithDebInfo%2Feu07%2B%2Bng.exe

Wczoraj pulpit jeździł na Małopolskiej Nocy Naukowców na PWSZ w Tarnowie.

Co zostało przerobione:
- normalne sterowanie (nie ma już emulacji klawiatury)
- wykorzystana biblioteka opensource zamiast windowsowskiej - czy będzie działać na innych systemach? chyba tak.
- zmiana w parametrach z pliku eu07.ini (update już niedługo)

//uart <nazwa portu> <nie zmieniać> <częstość wysyłania danych (czas)>
uart COM3 500000 0.1 0.05

//uarttune <ham. zespolony min> <max> <ham. dodatkowy min> <max> <ciśnienie max w zbiorniku gł.> <max wartość dla PWM> (to samo dla przewodu gł i cylindrów hamulcowych)
uarttune 46.0 943.0 175.0 874.0 0.9 1023.0 0.7 1023.0 0.5 1023.0 4000.0 1023.0 800.0 1023.0

//uartfeature <nastawnik> <bocznik> <hamulec> <hamulec lokomotywy>
uartfeature no no yes yes

//uartdebug <wyświetlanie danych debugowania w konsoli>
uartdebug no
Wszystko da się zrobić tylko jeszcze nie wiem jak.

Offline Łakasabasz

  • Wiadomości: 25
    • Zobacz profil
  • Otrzymane polubienia: 6
Odp: MaSzyna z portem COM
« Odpowiedź #19 dnia: 04 Października 2017, 17:32:25 »
maciek, wracając do poprzedniego problemu: potrzebuję odpowiedzi na pewne pytania

Dotarłem do momentu gdzie w dokumentacji są luki...
Chodzi o to gdzie mają być dane impulsowe, a gdzie ma być stała wysyłka danych. Potrzebuje informacji o przetwornicy, sprężarki, ogrzewania, pantografy, przyciemnienie reflektorów, bateria i światła. Bez tego nie ruszę, bo mogę dla ułatwienia użyć słowa static i to zabezpieczy przed niechcianym wyłączeniu np. przetwornicy.

Mógłbyś dodać te informacje do dokumentacji? Byłbym bardzo wdzięczny

Offline Milek7

  • Administrator
  • Wiadomości: 1051
    • Zobacz profil
  • Otrzymane polubienia: 907
Odp: MaSzyna z portem COM
« Odpowiedź #20 dnia: 04 Października 2017, 17:46:14 »
Nie rozumiem pytania. Pod tym względem dokumentacja jest chyba poprawna.
Można zobaczyć do implementacji w obecnym exe, jest dosyć bardziej czytelna od starej.
https://github.com/Milek7/maszyna/blob/lua/uart.h
https://github.com/Milek7/maszyna/blob/lua/uart.cpp

Offline Łakasabasz

  • Wiadomości: 25
    • Zobacz profil
  • Otrzymane polubienia: 6
Odp: MaSzyna z portem COM
« Odpowiedź #21 dnia: 05 Października 2017, 10:05:41 »
Szanowna administracjo, proszę o czytanie poprzednich postów, ale jeżeli tak bardzo nie chcecie to przypomnę o co chodzi:
maciek001 implementuje mechanizm komunikacji przez port COM w maszynie i prowadzi dokumentację protokołu komunikacji. Ja aktualnie czekam, aż maciek uzupełni pewne fragmenty swojej dokumentacji, abym mógł dokończyć bibliotekę. Dokumentacja nie precyzuje "hebelków", które w maszynie są impulsowe, a w prawdziwym pulpicie bistabilne. Ja nie wiem czy przy każdym wysyłaniu aktualizacji wysyłać sygnał wysoki np. dla pantografów, czy tylko wystarczy raz, a potem drugi, aby je opuścić.
Kod w implementacji na git może być zmieniany z godziny na godzinę, a zmiany w dokumentacji będą wymuszały zmianę wersji całego protokołu komunikacji, przez co ja będę mógł pracować w swoim tempie dostosowując się do aktualnej dokumentacji, a implementacja na git w swoim.

Offline Milek7

  • Administrator
  • Wiadomości: 1051
    • Zobacz profil
  • Otrzymane polubienia: 907
Odp: MaSzyna z portem COM
« Odpowiedź #22 dnia: 05 Października 2017, 10:28:12 »
Działanie hebelków odpowiada rzeczywistemu stanu przełącznika na pulpicie, zależnie od tego jakiego jest rodzaju w symulowanej lokomotywie.

Offline tmj

  • Zasłużony dla Symulatora
  • Wiadomości: 3808
    • Zobacz profil
  • Otrzymane polubienia: 2349
Odp: MaSzyna z portem COM
« Odpowiedź #23 dnia: 05 Października 2017, 13:42:06 »
Dokumentacja nie precyzuje "hebelków", które w maszynie są impulsowe, a w prawdziwym pulpicie bistabilne. Ja nie wiem czy przy każdym wysyłaniu aktualizacji wysyłać sygnał wysoki np. dla pantografów, czy tylko wystarczy raz, a potem drugi, aby je opuścić.
Typ przelacznikow po stronie exe zalezy od konfiguracji kabiny danego pojazdu. Jaki by on nie byl, instrukcje odbierane przez exe to z reguly "zmiana stanu urzadzenia X" wiec nie ma potrzeby wysylac polecen bez przerwy, a jedynie gdy zachodzi potrzeba przelaczenia urzadzenia z jednego polozenia w drugi.

Offline Milek7

  • Administrator
  • Wiadomości: 1051
    • Zobacz profil
  • Otrzymane polubienia: 907
Odp: MaSzyna z portem COM
« Odpowiedź #24 dnia: 05 Października 2017, 13:48:15 »
"zmiana stanu urządzenia" jest zawsze przy sterowaniu z klawiatury, ale w przypadku interfejsu UART sterowane jest rzeczywiste położenie przełącznika. (czyli przy hebelku bistabilnym żeby podnieść pantografy trzeba trzymać bit cały czas, w przypadku impulsowego tylko w momencie załączenia).

Offline tmj

  • Zasłużony dla Symulatora
  • Wiadomości: 3808
    • Zobacz profil
  • Otrzymane polubienia: 2349
Odp: MaSzyna z portem COM
« Odpowiedź #25 dnia: 05 Października 2017, 14:19:56 »
No chodzilo mi o przesylanie instrukcji z modulu obslugi pulpitu do reszty exe, nie o wymiane miedzy modulem i fizycznym pulpitem. Z pytania dosc ciezko wywnioskowac o ktore faktycznie chodzi.

Offline adi-edu

  • Wiadomości: 3
    • Zobacz profil
  • Otrzymane polubienia: 0
Odp: MaSzyna z portem COM
« Odpowiedź #26 dnia: 04 Lipca 2018, 08:44:06 »
@Łakasabasz Witam wszystkich, czy biblioteka komunikacyjna dla arduino powstała? Czy autor dodał już rekomendację do ustawiania odpowiedniego pulpitu? I gdzie można znaleźć tą bibliotekę?

Dzięki za odp.

Offline Łakasabasz

  • Wiadomości: 25
    • Zobacz profil
  • Otrzymane polubienia: 6
Odp: MaSzyna z portem COM
« Odpowiedź #27 dnia: 08 Lipca 2018, 13:44:20 »
@adi-edu hmm biblioteka powstała do połowy czyli obsługuje poprawne odbieranie stanu z symulatora, niestety obsługi wysyłania danych do symulatora nie udało mi się napisać. Biblioteka nie była testowana, ale w związku z zainteresowaniem tym tematem podejmę pracę nad odświeżeniem kodu.

@maciek001 mógłbyś mi wysłać aktualną dokumentację komunikacji?

@Administrator/Deweloper czy jest dostępna jakaś platforma do kontroli kodu czy mam korzystać z github? git.eu07.pl nie działa, może macie jakieś plany z tym?

Offline Milek7

  • Administrator
  • Wiadomości: 1051
    • Zobacz profil
  • Otrzymane polubienia: 907
Odp: MaSzyna z portem COM
« Odpowiedź #28 dnia: 08 Lipca 2018, 13:47:34 »
Nie ma, używaj githuba.

Offline maciek001

  • Wiadomości: 137
    • Zobacz profil
    • FanPage symulatora ET22
  • Otrzymane polubienia: 33
Odp: MaSzyna z portem COM
« Odpowiedź #29 dnia: 09 Lipca 2018, 09:49:25 »
Proponowałbym wyczyścić ten temat i napiszę wszystko jeszcze raz od nowa. Co o tym myślicie?
Wszystko da się zrobić tylko jeszcze nie wiem jak.