< návrat zpět

MS Excel


Téma: DDE server a makro rss

Zaslal/a 18.5.2011 14:02

Dobrý den,
prosím o radu jak se z makra spolehlivě dostanu na položky na DDE serveru.
Teď jsem nalinkoval položky do buněk v sešitu, komunikace se mi ale jednou za den padá.
Omlouvám se jestliže jsem odpověď na podobnou otázku si ve fóru přehledl.

Děkuji, Petr

Zaslat odpověď >

#005016
avatar
Jenom upřesním že jde o I/O server pro komunikaci s PLC Simatic S7. Potřebuji položky jenom číst.

Petrcitovat
#005027
avatar
Ahoj. Asi Ti moc neporadím. S DDE jsem pracoval před dlouhou dobou, a bylo to velmi, velmi nestabilní a nespolehlivé. Docela rychle jsem s tím přestal. Nejvíce mi vadilo, že jsem u I/O neměl stavy. To posílání taky nebylo nejlepší. Přešel jsem na DCOM ale v Delphi. Možná, že ve verzi Ex. 2003 a 2007 už to bylo lepší. Zkus si spustit správce úloh a nechej jej stále puštěný. Je možné, že se špatně uvolňuje paměť. Pak by se nějaké vlakno nabumbrlíkovalo pamětí do určité míry něž se restartuje, nebo než Ti spadne apod. Taky se podívej, jestli nemusí být někde Set xxx = nothing apod. DDE není přímo ve VBA ... je to jen volání z VBA a dále volání WinAPi. Pokud Ti to jede dlouho a pak lehne, pak bych se zaměřil na vytváření a uvolňování obj. R.citovat
#005037
avatar
Ahoj Romane a děkuji za odpověď.
Moje aplikace běží nepřetržitě a jednou za den zmrzne.
Napadlo mě zavírat aplikaci pak spouštět ji znovu. Ručně to jde, žádný problém. Ale když spouštím přes plánovač úloh, sešit se otevře v minimalizovaném okně a navíc, userform se neukáže vůbec, ale zůstane na liště zástupců, nehledě na to, že celá aplikace byla uložená v maximalizovaném okně. Čím by toto tak mohlo být?
Diky, Petrcitovat
#005044
avatar
Ahoj Petře. Možností je moc. Např.
- Je to jistě v EXCELu ??? Nemáš to kompilovanou aplikaci ... jen nevím jak to spouštíš, když musíš povolit makra, a nebo to máš vše vypnuté ??? Při startu z plánovače je vhodné zadávat jmeno a heslo pod kterým se úloha bude spouštět. Je to jako bys vytvořil separe instanci WIN. Takže i oprávnění s dalšími ... PLC ... musí být v pořádku.
- Máš jistotu, že zamrzne VBA. Co když Ti mrzne výstup z PLC. Nestačí občas resetovat komunikaci ??? Jen mě napadlo, když jen čteš, jestli se na PLC na něco nečeká, a pokud nic nedostane, pak funguje jen do naplnění a pak přestane komunikovat, protože je plný. To by odpovídalo tomu, že po odpojení Excelu od PLC dojde vlastně zrušení komunikace a navázaní nové.
- V plánovači taky můžeš spouštět jen batku ve které si ošetříš co a jak spouštět ... třeba přes [START /d:"cesta" /max app.exe /parametr] - já to preferuji ... nemusím vstupovat do ovl. pan. a navíc do batky se toho taky vleze více :). Pokud to nejde, pak máš možnost k programu nadefinovat PIF soubor a v něm to upravit podle požadavku. Taky je možné použít parametry excelu ... nevím název - možná že tam taky něco bude
- DDE jede přes "win_message" ... možná by stačilo volat po každém příkazu DDExxx navíc ProcessMessage apod.
- Z WIN_API bych doporučil ještě LastError32 nebo tak nějak. Je v něm číslo poslední chyby. Pokud Ti to zmrzne pak by toto číslo mohlo napovědět co se stalo.
- Těch možností proč to nejede vidím spoustu ... chce to nějak logovat celý proces a koukat se co se děje. Strašně špatně se to hledá. Nestabilita byla jedinný důvod proč jsem to zavrhnul. Zkus se taky podívat do doplňku, jestli v systému máš zaregistrovaný objekt PLC servru a co jsou zač - podle názvu objektu. Je možné aktivovat doplněk PLC servru a pomocí něj vyrobit Tvou aplikaci. U toho je ale problém, že z doplňku nepoznáš, jaké jsou tam procedury, funkce apod. Na to funguje ... co znám ... postup jak s tím vyd..at. V Delphi si najdeš tento doplněk a necháš si vygenerovat popis všech procedur, funkcí a konstant. Tyto jména můžeš použít ve VBA ... CreateObject ... bla bla + odkazování tečkou na vlastnosti objektu. Styl zápisu je jiný ale jména procedur apod. jsou stejné. To neplatí jen pro tento případ, ale pro případ všech doplňků apod. V podstatě můžeš z Excelu ovládat celý svůj PC ... :-)
- jen plácám ... uvažuji přes klávesnici. Ahoj. R.citovat
#005126
avatar
Ahoj Románe a děkuji za rozsáhlou odpověď.
Příčina zamrznutí aplikace je právě přerušení komunikace mezí IO serverem a Excelem. Vidím v diagnostice IO serveru, že Excel se nedotazuje na tyto proměnné. Pro to že nejde s aplikaci udělat nic než ji restartovat, nevidím způsob jak hledat příčinu. Možná v tomto případě již není až tak důležité proč k tomu dochází ale jak provést inicializací bez restartu aplikace? Existuje na to ve VBA povel nebo procedura?
Dále, narazil jsem na to že při použití dvou monitorů sešit Excelu po automatickém restartu otevře se na druhem, user form pak na prvním nehledě na to že aplikace byla naposledy uložená a zavřená na druhem monitoru. Proč user form nekotví dle pozice Excelu?
Diky, Petrcitovat
#005136
avatar
Ahoj Petře. Můžeš mi poslat to makro na PM ? R.citovat
#005142
avatar
Románe, na jakou adresu?
Petrcitovat
#005148
avatar
stivi@centrum.czcitovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje