Popis software
Do zařízení je implementován kompletní systém TGMotion.
Maximální počet podporovaných zařízení je: až 64 os servopohonu, až 16 modulů I/O, až 3 interpolátory CNC.
Velikost paměti osciloskopu je nastavena na 32 MB.
Komunikace mezi PC a TGZ+Motion probíhá prostřednictvím sítě Ethernet - buď TCP/UDP (servisní port X11), nebo vlastní rychlá komunikace peer-to-peer (port X12).
Port X11 lze použít s ethernetovým switchem i ve větší síti.
Pokud síťový adaptér PC používá DHCP, je nutné mít ve stejné síťové doméně směrovač (např. 192.168.1.1).
IP adresa TGZ+Motion musí být nastavena na volné číslo v síti.
Je také možné připojit síťový adaptér PC přímo k servisnímu portu X11, v takovém případě je nutná statická IP adresa adaptéru PC.
Aplikace Control Observer slouží ke kompletnímu monitorování subsystému TGMotion.
Zde je příklad připojeného zařízení TGZ+Motion (pomocí protokolu TCP a IP adresy 192.168.128.188
):
Fast service port (FSP)¶
Tento port slouží jako velmi rychlý port pro nastavení připojení k počítači. Pro jeho použití stačí připojit přímo síťovou kartu PC pomocí konektoru X12. Není potřeba žádný router ani switch (a ani se to nedoporučuje). Pro použití FSP je nutné do počítače se systémem Windows nainstalovat speciální síťový ovladač Winpcap nebo Npcap. Při volbě tohoto typu připojení zabere nějaký čas skenování všech síťových adaptérů a kontrola, který z nich je připojen k zařízení TGZ+Motion.
Vývoj a nahrávání PLC¶
Zdrojový kód PLC TGMotion je vždy kompatibilní se všemi deriváty TGMotion (Windows PC s rozšířením pro reálný čas, TGMmini, TGZ+Motion, TGMcontroller a případnými budoucími systémy). To znamená, že PLC lze naprogramovat a otestovat např. na PC a poté pouze překompilovat pro systém TGZ+Motion. PLC pro TGZ+Motion musí být napsáno v jazyce C/C++.
Program PLC lze zkompilovat na libovolném počítači se systémem Windows nebo Linux.
Všechny potřebné aplikace jsou open source.
Je nutný meziplatformní kompilátor.
Musí to být kompilátor GCC
s názvem gcc-arm-none-eabi
.
Nejnovější verzi lze stáhnout z webových stránek ARM.
Vyberte nejnovější verzi ZIP a rozbalte ji do libovolné složky.
Překladač musí podporovat alespoň standard C++17.
Projekt pro PLC používá standardní makefile GNU.
K provedení příkazů makefile
je nutné použít program mingw32-make
.
Program mingw32-make
lze stáhnout např. ze sourceforge.net a musí být dostupný z příkazového řádku (např. přidáním jeho cesty do systémové proměnné PATH
nebo použitím jeho názvu spolu s cestou v příkazovém řádku).
Kompilátor GCC není nutné mít v PATH
.
Makefile má téměř pevnou strukturu, pouze seznam .c/.h souborů a cestu ke kompilátoru je nutné upravovit.
Pokud je makefile správný, lze PLC vytvořit příkazem
v adresáři, kde se nachází soubor makefile a zdrojové soubory. Volitelně použijte úplnou cestu k souboru mingw32-make.exe, např.
Chcete-li znovu sestavit PLC, nejprve vyčistěte mezisoubory pomocí následujících kroků.
a pak jej sestavte pomocí
Chcete-li jej zkompilovat s využitím více jader procesoru, použijte volbu -j<číslo>
, např.
Příklad souboru makefile:
#path to TGM include files
TGM_PATH=..\include
#path to compiler
CC_PATH=..\..\gnu\gcc-arm-none-eabi\bin
#source files, must be in the same directory as this makefile
SOURCES=main.cpp \
DI_Capture.cpp \
Program_01.cpp \
Program_02.cpp \
Program_03.cpp \
Program_04.cpp \
Program_Ini.cpp \
Servo_Func.cpp \
$(TGM_PATH)\fmt\format.cpp
#used header file. these files are checked for dependencies
HEADERS=Definition.h \
DI_Capture.h \
PLC_Func.h \
Servo_Func.h \
stdafx.h \
User_Definitions.h \
User_Variables.h
USER_PATH=.\
#set the output filename
OUT_FILE_NAME=TGM_Controller_CAN_Tester
#===============================
#there is no need to change the rest of makefile
#compiler file names
CC=$(CC_PATH)\arm-none-eabi-g++.exe
OBJCOPY=$(CC_PATH)\arm-none-eabi-objcopy.exe
OBJDUMP=$(CC_PATH)\arm-none-eabi-objdump.exe
#stamper is special utility to mark the resulting PLC as for TGZ+Motion
STAMPER=tgm_bin_stamper.exe
OPTIMIZE=-O2
BSP_PATH=..\BSP
EXECUTABLE=$(OUT_FILE_NAME).elf
BIN_FILE=$(OUT_FILE_NAME).tgm.bin
STAMPED_FILE=$(OUT_FILE_NAME).tgm_controller
DUMP_FILE=$(OUT_FILE_NAME).elf.dbg
MAX_SERVO=64
MAX_DIO=16
MAX_INTERPOLATOR=3
SIZE_OSCILLOSCOPE=33554432
TGM_SETTINGS=-DMAX_SERVO_PROJECT_SETTINGS=$(MAX_SERVO) \
-DMAX_DIO_PROJECT_SETTINGS=$(MAX_DIO) \
-DMAX_INTERPOLATOR_PROJECT_SETTINGS=$(MAX_INTERPOLATOR) \
-DSIZE_OSCILLOSCOPE_MEMORY_PROJECT_SETTINGS=$(SIZE_OSCILLOSCOPE)
DEFINES=$(TGM_SETTINGS) \
-DFREERTOS \
-DZYNQ \
-DNDEBUG \
-DGLOBAL_TIMER_PRESCALER=1 \
-DNO_FILE_FUNCTIONS
CFLAGS=$(OPTIMIZE) -std=c++17 -I. -I$(BSP_PATH)\include -I$(TGM_PATH) \
-I$(USER_PATH) $(DEFINES) -g -Wall -Wextra -mcpu=cortex-a9 \
-mfpu=vfpv3 -mfloat-abi=hard -ffunction-sections -fdata-sections \
-Wno-unknown-pragmas
LDFLAGS=-g -mlittle-endian -Wl,-T -Wl,lscript.ld \
-Wl,--start-group,-lxil,-lgcc,-lc,-lstdc++,--end-group \
-L$(BSP_PATH)\lib -mcpu=cortex-a9 -mfpu=vfpv3 -mfloat-abi=hard \
-Wl,-build-id=none -specs=Xilinx.spec -Wl,--gc-sections
OBJECTS=$(SOURCES:.cpp=.o)
$(EXECUTABLE): $(OBJECTS) $(SOURCES) $(HEADERS) makefile
$(CC) $(OBJECTS) $(LIB_OBJECTS_C) $(LIB_OBJECTS_CPP) $(LIB_OBJECTS_ASM) \
-o $@ $(LDFLAGS)
cmd /C $(OBJDUMP) -C -x -S $(EXECUTABLE) >$(DUMP_FILE)
$(OBJCOPY) -O binary $(EXECUTABLE) $(BIN_FILE)
$(STAMPER) $(BIN_FILE) $(STAMPED_FILE) -oPLC -b0x07800000 -s0x00800000
%.o: %.cpp $(HEADERS) makefile | $(OBJDIR)
$(CC) -c $< $(CFLAGS) -o $@
all: $(SOURCES) $(HEADERS) $(EXECUTABLE) makefile
clean:
del /Q $(OBJECTS) $(EXECUTABLE) $(BIN_FILE) $(DUMP_FILE)
Po vytvoření spustitelného souboru .ELF
vytvoří soubor makefile binární soubor a následně jej orazítkuje samostatným nástrojem tgm_bin_stamper.exe
.
Požádejte zástupce společnosti TG Drives o příklad programu PLC.
Na SD kartě je také příklad programu spolu s dalšími pomocnými soubory.
Projekt obsahuje všechny potřebné soubory, nástroje kompilátoru, soubor linkerového skriptu, program stamper, BSP (board support package) a veřejné soubory TGMotion include.
Soubor main.cpp
obsahuje nezbytnou přístupovou funkci GetProcAddress()
, která slouží k získání adres umístění hlavních funkcí PLC: Program_Ini(), Program_01(), Program_02(), Program_03(), Program_04()
.
Funkce GetProcAddress()
musí být umístěna na startovací adrese 0x07800000
a nesmí být optimalizována.
Dále inicializuje standardní knihovnu jazyka C a všechny závislosti, jako jsou ukazatele na virtuální funkce a inicializace lokálních a globálních proměnných.
Viz. také samostatná příručka o programování PLC pomocí TGMotion.
Priorita programů PLC a doba cyklu¶
Programy v PLC běží s různou prioritou. Je na programátorovi, aby zvolil správnou funkci pro úlohy PLC.
-
Program_04()
má nejvyšší prioritu a probíhá v kontextu funkce servocyklu. Je volán periodicky v intervalu daném hodnotouCycle_Time
v souboruTGM.INI
(v mikrosekundách). Přípustné hodnoty jsou 100, 200, 250, 500, 1000, 2000 a pak 3000, ..., 10000 (po 1000 krocích). Je velmi důležité, abyProgram_04()
netrval déle než přibližně polovinu doby cyklu, jinak by TGMotion neměl šanci provést vlastní výpočty. Příliš zaneprázdněná funkceProgram_04()
není kontrolována, ale problém se velmi rychle objeví na straně EtherCAT systému: požadované polohy servopohonů nebudou aktualizovány a v samotném servozesilovači vznikne následující chyba. Pokud je bezpodmínečně nutné provést náročný výpočet ve funkciProgram_04()
, je jediným řešením prodloužení doby cyklu. -
Program_03()
má prioritu jen o jeden stupeň nižší, nežProgram_04()
a podobněProgram_02()
o dva stupně nižší, nežProgram_04()
. Programy jsou volány opakovaně s dobou cyklu uvedenou v souboruTGM.INI
. Například:Hodnoty se udávají v mikrosekundách a musí být násobkem 200. Minimální povolená hodnota je 200 µs. Chcete-li danou funkci zcela zakázat, použijte hodnotu nula. TGZ+Motion kontroluje uplynulý čas v každé funkci, a pokud do dalšího volání funkce zbývá méně než 100 mikrosekund, ke skutečnému volání dojde až při dalším tiku 200 mikrosekund. TGZ+Motion tak může naplánovat jiné úlohy s nižší prioritou (komunikace atd.) a
Program_02()
neboProgram_03()
nemůže přetížit systém. -
Program_01()
se spouští s nejnižší možnou prioritou v systému. To znamená, že ostatní úlohy, jako je komunikace, obsluha sítě Profinet atd., poběží s vyšší prioritou a budouProgram_01()
poměrně často přerušovat. Na druhou stranuProgram_01()
získá veškerý zbývající čas procesoru, což je obvykle více než 90 %. Navíc je funkceProgram_01()
volána co nejrychleji (pokud je funkce téměř prázdná, interval volání je přibližně 200 - 400 ns). Tato koncepce umožňuje implementovat do funkceProgram_01()
jakékoli časově náročné výpočty bez obav z přetížení systému. Pro funkciProgram_01()
neexistuje chování v reálném čase. Doba cyklu v souboruTGM.INI
musí být nastavena na nulu, jiná hodnota není povolena. FunkceProgram_01()
je volána vždy - nelze ji zakázat.
V okně System Timers programu Control Observer se zobrazuje uplynulý čas různých úloh programu TGMotion.
Všimněte si, že maximální uplynulý čas úlohy Program_01()
(označené jako PLC 1) zahrnuje také čas všech ostatních úloh, které přerušily úlohu Program_01()
.
Podobně je tomu i u Program_02()
, který může být přerušen Programem_03()
a hlavní rutinou cyklu serva; a u Program_03()
, přerušeného hlavní funkcí cyklu.
Maximální hodnotou je tedy součet uplynulého času funkce PLC a úloh s vyšší prioritou.
Jediné přesné měření času je uvedeno pro funkci Program_04()
, protože ji nelze přerušit.
Spuštění PLC a autostart¶
Kromě okna Systémové soubory programu Control Observer je k dispozici okno určené pro programování PLC - PLC Control.
Stačí nastavit správný název souboru PLC a nahrát jej do TGZ+Motion.
PLC se spustí kliknutím na tlačítko [Spustit]
.
Proces Run PLC
provede následující sekvenci:
- Zastaví všechny běžící PLC a počká na dokončení všech funkcí
Program_XX()
. - Vymaže paměť PLC DATA.
- Vymaže (nastaví na nulu) všechny digitální výstupy připojených I/O zařízení i servopohonů. Nastaví režim všech servopohonů na nulu.
- Nastaví také interní digitální výstupy na nulu (pokud jsou namapovány na TGMotion).
- Hlavní smyčka serva je zastavena a nejsou přenášeny žádné další zprávy EtherCAT.
- PLC se načte do paměti z karty SD.
- Hlavní smyčka serva se znovu spustí, komunikace EtherCAT se aktivuje.
- Zavolá se inicializační funkce PLC,
Program_Ini()
, a pokud je úspěšná (vrátí 1), zavede se periodické volání funkceProgram_XX()
, tj. PLC se spustí.
PLC lze spustit po spuštění zařízení TGZ+Motion.
Nastavte položku v TGM.INI
Mezi spuštěním PLC a komunikací EtherCAT není žádná synchronizace.
Obvykle se PLC spouští rychleji než komunikace EtherCAT.
Programátor s tím musí počítat a čekat například na hodnotu stavu EtherCAT (operational = 8
) připojených zařízení nebo na požadovaný počet nalezených zařízení EtherCAT na sběrnici (proměnná SYSTEM.MAIN.Found_Total_Number_Of_ECAT_Devices
).
Interní hodnota typu servozesilovače v souboru TGM.INI
¶
Chcete-li povolit interní servo TGZ v zařízení TGZ+Motion pro subsystém TGMotion, použijte typ serva 91: [Servo_Configuration]
[Servo_Configuration]
Servo[00].Type=91
Servo[00].Node=1
Servo[00].Axis=1
Servo[00].Resolution=20
Servo[01].Type=91
Servo[01].Node=1
Servo[01].Axis=2
Servo[01].Resolution=20
Hodnota Node
je irelevantní a ignoruje se, ale měla by být v souboru INI jedinečná a v rozsahu 1 - 64.
Digitální vstupy a výstupy se nacházejí v proměnných SERVO[xx].DigitalIn
a SERVO[xx].DigitalOut
.
V následující tabulce je uvedeno mapování použitých vstupů.
Předpokládá výše uvedené záznamy v souboru TGM.INI
(SERVO[00].Axis=1
a SERVO[01].Axis=2
).
Vstupní pin | Osa | Výskyt u bitu | Příklad kódu |
---|---|---|---|
DI1 | 1 | DigitalIn.0 | SERVO[00].DigitalIn & 0x001 |
DI2 | 2 | DigitalIn.0 | SERVO[01].DigitalIn & 0x001 |
DI3 | 1 | DigitalIn.1 | SERVO[00].DigitalIn & 0x002 |
DI4 | 2 | DigitalIn.1 | SERVO[01].DigitalIn & 0x002 |
DI5 | 1 | DigitalIn.2 | SERVO[00].DigitalIn & 0x004 |
DI6 | 2 | DigitalIn.2 | SERVO[01].DigitalIn & 0x004 |
DI7 | 1 | DigitalIn.3 | SERVO[00].DigitalIn & 0x008 |
DI8 | 2 | DigitalIn.3 | SERVO[01].DigitalIn & 0x008 |
EI1 | 1 | DigitalIn.8 | SERVO[00].DigitalIn & 0x100 |
EI2 | 1 | DigitalIn.9 | SERVO[00].DigitalIn & 0x200 |
Mapování výstupů je podobné:
Výstupní pin | Osa | Použitý bit | Kód pro nastavení do '1' | Kód pro nastavení do '0' |
---|---|---|---|---|
DO1 | 1 | DigitalOut.0 | SERVO[00].DigitalOut |= 0x01 | SERVO[00].DigitalOut &= ~0x01 |
DO2 | 2 | DigitalOut.0 | SERVO[01].DigitalOut |= 0x01 | SERVO[01].DigitalOut &= ~0x01 |
DO3 | 1 | DigitalOut.1 | SERVO[00].DigitalOut |= 0x02 | SERVO[00].DigitalOut &= ~0x03 |
DO4 | 2 | DigitalOut.1 | SERVO[01].DigitalOut |= 0x02 | SERVO[01].DigitalOut &= ~0x03 |
DO5 | 1 | DigitalOut.2 | SERVO[00].DigitalOut |= 0x04 | SERVO[00].DigitalOut &= ~0x04 |
DO6 | 2 | DigitalOut.2 | SERVO[01].DigitalOut |= 0x04 | SERVO[01].DigitalOut &= ~0x04 |
Hodnoty analogových vstupů AN1, AN2 se objeví v proměnných SERVO[00].AnalogIn
a SERVO[01].AnalogIn
.
Aktualizace firmwaru¶
Firmware lze snadno aktualizovat pomocí programu Control Observer.
Stačí vybrat správný soubor v editačním poli Systémový soubor TGM a použít tlačítko [Write]
.
Soubor může být v počítači uložen pod libovolným názvem.
Při ukládání souboru na kartu SD použije TGZ+Motion správný název souboru.
Po přenosu souboru se zařízení automaticky restartuje.
Aktualizovaný firmware se uloží na kartu SD.
Soubor je možné uložit také přímo na SD kartu pomocí PC, v takovém případě musí být název TGMC.fw
a soubor musí být v kořenovém adresáři karty.
Viz také další kapitola o obsahu SD karty.
Může se stát, že se při zpětném čtení souborů ze zařízení se objeví chyba Device Offline
, zejména při použití protokolu FSP.
Obvykle to znamená, že použitý ethernetový adaptér nemá dostatek vyrovnávacích paměti (doporučuje se 32 nebo více).
Protokol FSP je určen pro výkonné adaptéry, konkrétně pro adaptéry PCIe.
Zařízení Profinet I/O¶
Zařízení Profinet I/O je ve výchozím nastavení zakázáno.
Použijte následující nastavení pro jeho povolení v souboru TGM.INI
:
Každé zařízení Profinet je specifikováno svou MAC adresou, IP adresou a názvem zařízení.
Tyto atributy by měly být v rámci sítě Profinet jedinečné.
Zatímco adresa MAC je pevně daná, název a adresu IP lze nastavit pomocí nástroje pro uvedení do provozu (TIA Portal, Proneta atd.).
Ve výchozím nastavení je název Profinet TGZ+Motion prázdný a IP adresa je nastavena na 0.0.0.0
.
Organizace modulů a slotů je dána konfiguračním souborem GSDML
.
K dispozici je devět slotů: 1 × DAP, 4 vstupní sloty (velikost 32, 64, 128 nebo 256 bajtů) a 4 výstupní sloty (se stejnými velikostmi).
Každý slot má přiřazený parametr, který udává offset dat k paměti PLC DATA.
Tento parametr lze nastavit pomocí nástroje pro uvedení do provozu nebo pomocí programu Profinet PLC.
Změna IP
Změnou IP adresy zařízení Profinet se změní i adresa servisního portu X11. To znamená, že může dojít ke ztrátě TCP/UDP nebo jiné komunikace. Řešením je použití stejné adresy pro servisní protokoly a pro Profinet nebo použití portu FSP (X12) pro přímou komunikaci s PC, nezávisle na síti Profinet.
Modbus TCP¶
Protokol Modbus TCP je ve výchozím nastavení vypnut.
Chcete-li jej povolit, použijte následující konfiguraci TGM.INI
:
Paměť PLC DATA se používá pro ukládání nebo příjem dat Modbus. Číslo registru Modbus se používá jako offset v paměti. Protože se čísla registrů počítají po jednom, je k dispozici násobič s výchozí hodnotou 4. Také lze použít globální offset pro posun dat Modbus v paměti DATA (výchozí hodnota 0). Doporučuje se, aby byl globální offset dělitelný číslem 4. Konečná pozice dat Modbus se vypočítá podle následujícího vzorce:
final_offset_to_data_memory = global_offset + (multiplier × modbus_register_number)
Globální offset a násobitel lze nastavit také v souboru TGM.INI
. Například:
Podporovány jsou následující příkazy Modbus:
příkaz | číslo |
---|---|
READ_COILS | 1 |
READ_DISCRETE_INPUTS | 2 |
READ_HOLDING_REGISTERS | 3 |
READ_INPUT_REGISTERS | 4 |
WRITE_SINGLE_REGISTER | 6 |
WRITE_MULTIPLE_COILS | 15 |
WRITE_MULTIPLE_REGISTERS | 16 |
Safe boot¶
Zařízení TGZ+Motion se normálně zavádí z karty SD.
V případě vadné karty nebo poškozeného firmwaru je možné zařízení spustit z interní flash paměti.
Vyjměte SD kartu a restartujte systém.
Bez SD karty trvá spuštění dlouho.
Systém načte výchozí obsah souboru INI
s IP adresou 192.168.1.188
.
Pokud je to možné, použijte port FSP, protože na straně počítače není nutné žádné nastavení.
Vložte novou SD kartu naformátovanou na FAT32 a nahrajte všechny potřebné soubory pomocí Control Observer: TGM.INI
a poté firmware TGZ+Motion.
Zařízení se automaticky restartuje a mělo by se správně spustit z SD karty.
Pomocí obslužného programu TGZ GUI správně nastavte parametry servozesilovače, jako jsou regulátory, typ motoru atd.
Uložte parametry na kartu SD.
Soubor TGM.INI
je uložen na kartě SD v přirozené textové podobě, takže v případě chybného nastavení je možné jej upravit přímo pomocí počítače.
Po vložení SD karty zpět do přístroje je nutné provést restart zařízení.