Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Siemens/S7-1200 - Mapowanie zmiennych

viper_lasser 11 Dec 2014 14:42 1743 2
SterControl
  • #1
    viper_lasser
    Level 17  
    Witam
    Czy jest jakiś sposób na zmapowanie zmiennych.

    Chciałbym osiągnąć coś na zasadzie przekazania zmiennej z bloku DB200.DBX0.0 do innego bloku DB150.DBX10.0 (to tylko taki przykład)
    W SCLu wystarczy proste przepisanie DB150.DBX10.0:=DB200.DBX0.0

    Z tym że z powodu funkcjonalności mojego bloku czasem resetowany będzie bit DB150.DBX10.0 i oczywiście takie zresetowanie musiałoby również kasować bit DB200.DBX0.0.

    Wiem że w bloku FB można w elegancki sposób mapować sobie np strukturę na tablicę oczywiście przy założeniu tego samego typu danych.

    Niestety nie znam sposobu zmapowania niezależnych rejestrów.
  • SterControl
  • #2
    Markos80

    Automation specialist
    viper_lasser wrote:
    Wiem że w bloku FB można w elegancki sposób mapować sobie np strukturę na tablicę oczywiście przy założeniu tego samego typu danych.
    Przy pomocy AT można opisać ten sam obszar pamięci dwoma różnymi typami danych. Nie ma to nic wspólnego z przypisaniem o jakim mówisz.

    Nie znam funkcji synchronizującej różne obszary pamięci. Musiałbyś zrobić taka, która nadzoruje każdy osobno i w przypadku zmiany jednego przepisuje go na drugi.
    Nie bardzo rozumiem do czego używasz takiej funkcjonalności. Możesz jakiś przykład podać?
  • #3
    viper_lasser
    Level 17  
    O instrukcji AT mapującej danej jednego typu drugim oczywiście znam i z tego korzystam.

    Funkcjonalność "delegatu" o którą mi chodzi jest potrzebna po to żebym mógł odwoływać się do bloku danych który podpięty jest do obsługi modbus'a slave'a.

    Dane od swojego bloku chciałbym trzymać we wspólnym bloku danych gdzie będą przechowywane wszystkie dane dotyczące tego bloku co zapewni mi porządek w blokach danych.

    Przykładowo mam taki oto blok do zliczania czasu pracy napędów z jednostką godzinową.

    Po wstawieniu tego bloku do OB1 automatycznie wygeneruje mi się blok z danymi do którego będę odwoływał. Niech ten blok nazywa się BLOK_NAPEDY_CZAS_PRACY

    Żeby zresetować któryś z liczników muszę to zrobić w ten sposób

    BLOK_NAPEDY_CZAS_PRACY.I_NAPEDY_RESET_LICZNIKA.NAPED0:=true (1 napęd)

    W swoim projekcie w innym bloku mam wystawione dane po modbusie w innym blok i już mam problem bo po ustawieniu jakiegoś bitu w bloku DB200 (blok do komunikacji po modbus tcp/ip) muszę automatycznie zrobić powiadomienie dla bloku BLOK_NAPEDY_CZAS_PRACY.I_NAPEDY_RESET_LICZNIKA.NAPED0.




    Code: text
    Log in, to see the code


    Wymyśliłem jednak że ten motyw zrobię poprzez pointer tylko narazie nie znalazłem żadnego konkretnego przykładu żeby można było się odnieść jak do tablicy boolowskiej.

    Coś znalazłem na stronie siemensa ale to jest raczej do s7-300/400
    https://www.automation.siemens.com/WW/forum/guests/PostShow.aspx?PageIndex=1&PostID=300672&Language=en&onlyInternet=False#top

    Edit:
    Tutaj jest coś ciekawszego :)
    https://www.automation.siemens.com/forum/guests/PostShow.aspx?PostID=535134&Language=en&PageIndex=2