Witam
W pracy mam taki przypadek że po zaniku zasilania posypał się program w sterowniku Siemens CPU 313 pomimo posiadania karty pamięci. Niestety firma niemiecka, która wykonywała aplikację jest nieosiągalna i jesteśmy zmuszeni sami sobie radzić z problemem. Nie pozostawili ani kodów źródłowych ani nie zrobili backupów. CPU współpracuje z systemem scada Ifix, panelem dotykowym siemens, oraz wymienia kilka zmiennych z innym sterownikiem Siemens po sieci industrial ethernet. Aplikacja jest bardzo prosta i obsługuje kilka urządzeń na zasadzie włącz/wyłącz. Odczytałem program z CPU i okazało się że kod sterujący który można było zawrzeć w kilkudziesięciu linijkach jest ogromny i wygląda na zlepek kilku aplikacji. Najłatwiej byłoby napisać wszystko od nowa niż się w to wszystko wgryzać. Z systemu scada udało się wyciągnąć adresy zmiennych po jakich się komunikują, natomiast panel też trzeba pisać od nowa. Dlatego pojawiło się parę pytań
1. W starym programie jest stworzonych bardzo dużo bloków DB nawet po kilkaset bajtów a wykorzystywane jest w rzeczywistości kilka bajtów. I tak np jest DB jako stan przycisków ze scada, drugi jako stan urządzeń do scada, trzeci jako alarmy do scada, czwarty jako nastawy urządzeń, kilka bloków DB do komunikacji z panelem, kilka do obliczeń jako komórki pamięci itp. Czy można te kilka bloków wrzucić do jednego, lub dwóch, czy jest jakaś zasada lub dobre praktyki że w jednym bloku nie mogą być dane do zapisu drugie do odczytu itp.
2. Czy z jednego bloku danych może jednocześnie korzystać system scada i HMI, czy należy to rozbijać na dwa niezależne DB
3. Jak otwieram DB instance można w jakiś sposób odczytać z jakim FB jest powiązany?. Przy otwieraniu (program zgrany z PLC) takiego DB jest komunikat o typie DB i wersji ale nie mogę się doszukać powiązań. Czy to tylko można zrobić analizując kod programu? Program był pisany w step 7 5.2 ja mam 5.4.
Większe doświadczenie mam ze sterownikami GeFanuc. W siemensie robiłem tylko aplikacje dla zabawy
W pracy mam taki przypadek że po zaniku zasilania posypał się program w sterowniku Siemens CPU 313 pomimo posiadania karty pamięci. Niestety firma niemiecka, która wykonywała aplikację jest nieosiągalna i jesteśmy zmuszeni sami sobie radzić z problemem. Nie pozostawili ani kodów źródłowych ani nie zrobili backupów. CPU współpracuje z systemem scada Ifix, panelem dotykowym siemens, oraz wymienia kilka zmiennych z innym sterownikiem Siemens po sieci industrial ethernet. Aplikacja jest bardzo prosta i obsługuje kilka urządzeń na zasadzie włącz/wyłącz. Odczytałem program z CPU i okazało się że kod sterujący który można było zawrzeć w kilkudziesięciu linijkach jest ogromny i wygląda na zlepek kilku aplikacji. Najłatwiej byłoby napisać wszystko od nowa niż się w to wszystko wgryzać. Z systemu scada udało się wyciągnąć adresy zmiennych po jakich się komunikują, natomiast panel też trzeba pisać od nowa. Dlatego pojawiło się parę pytań
1. W starym programie jest stworzonych bardzo dużo bloków DB nawet po kilkaset bajtów a wykorzystywane jest w rzeczywistości kilka bajtów. I tak np jest DB jako stan przycisków ze scada, drugi jako stan urządzeń do scada, trzeci jako alarmy do scada, czwarty jako nastawy urządzeń, kilka bloków DB do komunikacji z panelem, kilka do obliczeń jako komórki pamięci itp. Czy można te kilka bloków wrzucić do jednego, lub dwóch, czy jest jakaś zasada lub dobre praktyki że w jednym bloku nie mogą być dane do zapisu drugie do odczytu itp.
2. Czy z jednego bloku danych może jednocześnie korzystać system scada i HMI, czy należy to rozbijać na dwa niezależne DB
3. Jak otwieram DB instance można w jakiś sposób odczytać z jakim FB jest powiązany?. Przy otwieraniu (program zgrany z PLC) takiego DB jest komunikat o typie DB i wersji ale nie mogę się doszukać powiązań. Czy to tylko można zrobić analizując kod programu? Program był pisany w step 7 5.2 ja mam 5.4.
Większe doświadczenie mam ze sterownikami GeFanuc. W siemensie robiłem tylko aplikacje dla zabawy