Post by alex-at-xana on EThercat Dynamic configuration
CODESYS Forge
talk
(Post)
Hi Everyone, For a fast monitoring system I am using Ethercat oversampling and timestamping inputs. As the customers has a lot of different configurations out in the field, we went for a dynamic Ethercat configuration. Already got the whole detection chain working but now I am stuck since two days in debugging the configuration. Here are my quesitons: I extended the dynamic config example for the EL3632 16#0E303052: //EL3632 pSlave^.SetDCSettings(TRUE,TRUE,80,80,TRUE,4000,0,0); pSlave^.AddSyncManager(16#1000,128,16#26,TRUE,3); pSlave^.AddSyncManager(16#1080,128,16#22,TRUE,2); pSlave^.AddSyncManager(16#1100,0,16#4,TRUE,1); pSlave^.AddSyncManager(16#1110,214,16#20,TRUE,0); pSlave^.AddFMMU(0,214,0,7,16#1110,0,1,1); pSlave^.AddFMMU(0,1,0,0,16#80D,0,1,1); xKnown := TRUE; This leads to a PLL Error for these devices. I double and triple checked the configuraton, but cannot find the issue. There seems to be one difference: the config dialog creates a startup parameter: 16#10F3:16#05, Name: Command_0, Value:0. Bitlen: 16, Stop on fault: false, jumpt at fault: false: next line: 0 a) I do not find information on how to set this in my code. Can you help me there? b) Without trying to set the value, I get a PLL error for these devices in the master log. Is the config wrong? c) Do I need to set the Master to Autoconfigure or Manual? I used autoconfigure for my tests. The stack creates input data addresses for the slaves input data range (pSlaves[i].InputData) which are different from those created when I use the Engineering tools dialogs to configure Ethercat. Specifically, the addresses seem to be aligned at 16 byte boundaries when they are created using the engineering tool, but may appear at uneven addresses when I use the script in dynamic config. I did not try to access ULINT at uneven addresses yet, but I am suspecting this may be a problem. Do I need to manually align the addresses ? Any help is appreciated...
Last updated: 2024-09-10
Post by struccc on Application failing to boot after system reboot
CODESYS Forge
talk
(Post)
I started to experience the same issue, after upgrading to 3.5.19 , and still persists with 3.5.20.3 , using CodesysControlWinV3 x64 on Windows. Unfortunately, this is a live application, normally it is running for months without interruption - so it was a surprise at the last cold start... It was not possible to go online with the original version, so I couldn't see the application, or system status, just the log message. First time I manually clean the Application from the PlcLogic directory (there was no coredump file in there), then I could start the runtime service, and do a fresh download, and set the bootproject. I could not try a cold system reboot - it's in a 24/7 production environment, and I was under heavy pressure to start... What I did, I have created a backup from the * complete * runtime directory, from the failed, and fixed version - before and after download. This directory in my case C:\ProgramData\CODESYS\CODESYSControlWinV3x64\55096128 - At the next shutdown, it was sufficient to copy back this backup completely, and could start the runtime service afterwards. Ugly, but local staff with some skills can do it without programming tool... I don't store any live data, configuration, log files, persistent data in this directory - the only reason I need this is to edit the CodesysControl... .cfg file.... And to see the logfiles in emergencies like this. The application concerned doesn't use any retain area. - exactly for these reasons - Maybe that is causing the problem with the newer runtime versions As far as I see, this problem occurs only if the power of the Windows PLC is interrupted without a proper shutdown. Unfortunately, this can happen sometimes. The newer versions, seems tp modify CodesysControl.cfg on the fly, and register the applications, and bootproject information after download. (I don't really see CodesysControl.cfg a proper location for this... but that's just my feeling) So now I had a look at CodesysCotrol.cfg on my laptop and I found: [CmpRetain] ;Retain.SRAM.Size=0x200200 ;Retain.SRAM.Address=0xFA3C5776 ;SimulateSRAM=1 [CmpApp] ;Bootproject.CreateOnDownload=0 ;Bootproject.StoreOnlyOnDownload=0 ;Bootproject.InvalidateByRename=1 ;Bootproject.InvalidateBySetting=1 ;Bootproject.InvalidateNever=0 ;PersistentForce=0 ;RetainType.Applications=InSRAM ;RetainType.Applications=OnPowerfail ;RetainType.Applications=None ;Exception.Hardware.GlobalStop=1 Application.1=MyTestAppNoRetain The last line appeared after download and boot project creation. Maybe... Should set RetainType.Applications=None? I wonder about all these settings, but... Will write separately about it. I hope this helps a little...
Last updated: 2024-11-21
Post by jonasz on Device diagnosis ( EtherCAT IO card )
CODESYS Forge
talk
(Post)
Hi, I'll link to the topic not wanting to start a new one. In the application I am building, I wanted to use the diagnostics described in the CAA Device Diagnosis library. In principle, everything is ok, except for the elements related to ModbusTCP. Despite the fact that ModbusTCP is taken into account in the documentation, it is not recognised via the interfaces. FUNCTION_BLOCK NET_HW_DIAG VAR_INPUT END_VAR VAR_OUTPUT END_VAR VAR (* Referencja do struktury z danymi dla HMI ASTRAADA.*) Visu: REFERENCE TO VISU; (* WskaĆșnik na mastera EtherCAT.*) pEtherCATMaster : POINTER TO IoDrvEtherCAT; (* WskaĆșnik na slave EtherCAT.*) pEtherCATSlave : POINTER TO EtcSlave; (* Interfejs dla wÄzĆa w drzewie urzÄ
dzeĆ.*) _itfNode: DED.INode; (* OgĂłlny interfejs magistrali. Zapewnia podstawowe informacje o magistrali polowej.*) _itfBus: DED.IBus; (* Interfejs urzÄ
dzenia. Zapewnia rozszerzone informacje o urzÄ
dzeniu (magistralowym).*) _itfDevice2: DED.IDevice2; (* OgĂłlny interfejs magistrali. Zapewnia podstawowe informacje o magistrali polowej.*) _itfStack: DED.IStack; (* Numer wÄzĆa w drzewie urzÄ
dzeĆ.*) uiNodes: UINT; (* Operator jest rozszerzeniem normy IEC 61131-3. W czasie wykonywania operator wykonuje konwersjÄ typu odwoĆania do interfejsu na inny typ. Operator zwraca wynik BOOL. WartoĆÄ TRUE oznacza, ĆŒe CODESYS pomyĆlnie wykonaĆ konwersjÄ. *) xQueryResultBus: BOOL; xQueryResultDevice2: BOOL; xQueryResultStack: BOOL; (* Struktura danych dotyczÄ
cych wÄzĆĂłw w drzewie urzÄ
dzeĆ.*) NetHwDiag: NW_HW_STAT; ModbusTcpClientDeviceInfo: IoDrvModbusTCP.DED.DEVICE_INFO; ModbusTcpClientDeviceState: IoDrvModbusTCP.DED.DEVICE_STATE; ModbusTcpDeviceInfo: IoDrvModbusTCP.DED.DEVICE_INFO; ModbusTcpDeviceState: IoDrvModbusTCP.DED.DEVICE_STATE; END_VAR (* Pobranie wskaĆșnikĂłw dla pierwszego mastera i pierwszego slave w sieci EtherCAT.*) pEtherCATMaster := g_pFirstMaster; pEtherCATSlave := pEtherCATMaster^.FirstSlave; (* Diagnostyka sieci EtherCAT.*) pEtherCATMaster := g_pFirstMaster; pEtherCATSlave := pEtherCATMaster^.FirstSlave; NetHwDiag.xConfigFinished := pEtherCATMaster^.xConfigFinished; NetHwDiag.xDistributedClockInSync := pEtherCATMaster^.xDistributedClockInSync; NetHwDiag.xError := pEtherCATMaster^.xError; NetHwDiag.xSyncInWindow := pEtherCATMaster^.xSyncInWindow; NetHwDiag.sLastMessage := pEtherCATMaster^.LastMessage; NetHwDiag.LastError := pEtherCATMaster^.LastError; (* Diagnostyka drzewa urzÄ
dzeĆ.*) uiNodes := 0; _itfNode := DED.GetRoot(); REPEAT NetHwDiag.asDeviceName[uiNodes] := DED.GetDeviceNameString(itfNode := _itfNode); xQueryResultBus := __QUERYINTERFACE(_itfNode,_itfBus); IF xQueryResultBus THEN _itfBus.GetBusInfo(buiInfo := NetHwDiag.aBusInfo[uiNodes]); NetHwDiag.aBusState[uiNodes] := _itfBus.GetBusState(); END_IF xQueryResultDevice2 := __QUERYINTERFACE(_itfNode,_itfDevice2); IF xQueryResultDevice2 THEN _itfDevice2.GetDeviceInfo(deiInfo := NetHwDiag.aDeviceInfo[uiNodes]); NetHwDiag.aDeviceState[uiNodes] := _itfDevice2.GetDeviceState(); IF pEtherCATSlave <>0 THEN pEtherCATSlave^(); IF pEtherCATSlave^.SlaveAddr = NetHwDiag.aDeviceInfo[uiNodes].idSystem THEN NetHwDiag.aAlStatus[uiNodes] := pEtherCATSlave^.ALStatus; pEtherCATSlave := pEtherCATSlave^.NextInstance; END_IF END_IF ELSE xQueryResultStack := __QUERYINTERFACE(_itfNode,_itfStack); IF xQueryResultStack THEN _itfStack.GetDeviceInfo(deiInfo := NetHwDiag.aDeviceInfo[uiNodes]); NetHwDiag.aDeviceState[uiNodes] := _itfStack.GetDeviceState(); END_IF END_IF uiNodes := uiNodes + 1; _itfNode := DED.GetNextNode(_itfNode); UNTIL _itfNode = 0 END_REPEAT (* Diagnostyka Modbus.*) Modbus_TCP_Client.GetDeviceInfo(deiInfo := ModbusTcpClientDeviceInfo); ModbusTcpClientDeviceState := Modbus_TCP_Client.GetDeviceState(); PAC_3200T.GetDeviceInfo(deiInfo := ModbusTcpDeviceInfo); ModbusTcpDeviceState := PAC_3200T.GetDeviceState(); Of course, you can take the easy way out and refer directly to the devices, but I wanted a reusable component. Any constructive help is very welcome Best regards Jonasz
Last updated: 2025-07-15
Post by ara32 on CODESYS 4 Linux:
CODESYS Forge
talk
(Post)
Hello! I managed to correctly launch CODESYS Developer Studio 3.5.17, almost all functionality works. The only issue remaining is that when connecting to a device and obtaining its public key, the NCryptEncrypt function is called, which is not fully implemented in the DLL source code, resulting in the connection not being established. Currently, the code of this function in the Wine repository looks like this: SECURITY_STATUS WINAPI NCryptEncrypt(NCRYPT_KEY_HANDLE key, BYTE *input, DWORD insize, void *padding, BYTE *output, DWORD outsize, DWORD *result, DWORD flags) { struct object *key_object = (struct object *)key; TRACE("(%#Ix, %p, %lu, %p, %p, %lu, %p, %#lx)\n", key, input, insize, padding, output, outsize, result, flags); if (flags & ~(NCRYPT_NO_PADDING_FLAG | NCRYPT_PAD_OAEP_FLAG | NCRYPT_PAD_PKCS1_FLAG | NCRYPT_SILENT_FLAG)) { FIXME("Flags %lx not supported\n", flags); return NTE_BAD_FLAGS; } if (flags & NCRYPT_NO_PADDING_FLAG || flags & NCRYPT_PAD_OAEP_FLAG) { FIXME("No padding and oaep padding not supported\n"); return NTE_NOT_SUPPORTED; } if (key_object->type != KEY) return NTE_INVALID_HANDLE; return map_ntstatus(BCryptEncrypt(key_object->key.bcrypt_key, input, insize, padding, NULL, 0, output, outsize, result, flags)); } The program crashes due to the NCRYPT_PAD_OAEP_FLAG flag. I'm not proficient in C++, but I attempted to add handling myself, and here's the result: SECURITY_STATUS WINAPI NCryptEncrypt(NCRYPT_KEY_HANDLE key, BYTE *input, DWORD insize, void *padding, BYTE *output, DWORD outsize, DWORD *result, DWORD flags) { struct object *key_object = (struct object *)key; TRACE("(%#Ix, %p, %lu, %p, %p, %lu, %p, %#lx)\n", key, input, insize, padding, output, outsize, result, flags); if (flags & ~(NCRYPT_NO_PADDING_FLAG | NCRYPT_PAD_OAEP_FLAG | NCRYPT_PAD_PKCS1_FLAG | NCRYPT_SILENT_FLAG)) { FIXME("Flags %lx not supported\n", flags); return NTE_BAD_FLAGS; } if (flags & NCRYPT_NO_PADDING_FLAG) { FIXME("No padding not supported\n"); return NTE_NOT_SUPPORTED; } BCRYPT_OAEP_PADDING_INFO oaepInfo = { 0 }; oaepInfo.pszAlgId = BCRYPT_SHA1_ALGORITHM; NTSTATUS status = BCryptEncrypt(key_object->key.bcrypt_key, input, insize, &oaepInfo, NULL, 0, output, outsize, result, flags); if (key_object->type != KEY) return NTE_INVALID_HANDLE; return map_ntstatus(BCryptEncrypt(key_object->key.bcrypt_key, input, insize, padding, NULL, 0, output, outsize, result, flags)); } Now, when calling the connection, it crashes with the error "bcrypt:BCryptEncrypt flags 0x4 not implemented." Can anyone help with enhancing this functionality or at least point me in the right direction?
Last updated: 2024-03-22
Post by honorzen543 on Kupongkod Temu [acu729640] 1,000kr Kupong För Befintlig Kund
CODESYS Forge
talk
(Post)
Kupongkod Temu [acu729640] 1,000kr Kupong För Befintlig Kund Introduktion Temu Ă€r en plattform dĂ€r du kan hitta fantastiska erbjudanden och produkter till rabatterade priser. Med vĂ„r Temu coupon code 1,000kr off kan du spara Ă€nnu mer pengar pĂ„ dina inköp. Vare sig du Ă€r ny kund eller en trogen anvĂ€ndare, Ă€r det hĂ€r koden för dig. VĂ„r exklusiva Temu kupongkod [acu729640] erbjuder maximala fördelar för vĂ„ra anvĂ€ndare i Sverige. Denna kod Ă€r utformad för att ge högsta möjliga besparingar för just er. Missa inte denna chans att spara stort pĂ„ dina favoritprodukter. Genom att anvĂ€nda vĂ„r Temu coupon 1,000kr off och Temu 100 off coupon code, lovar vi att din shoppingupplevelse blir bĂ„de roligare och billigare. Oavsett om du handlar klĂ€der, elektronik, eller hushĂ„llsartiklar, Ă€r detta erbjudandet som kan göra en verklig skillnad. Vad Ăr Kupongkoden För Temu 1,000kr Off? BĂ„de nya och befintliga kunder kan dra nytta av fantastiska förmĂ„ner genom att anvĂ€nda vĂ„r Temu coupon 1,000kr off pĂ„ Temus app och webbplats. Denna 1,000kr off Temu coupon gör det möjligt för alla att fĂ„ mer för sina pengar. [acu729640]: FĂ„ en fast rabatt pĂ„ 1,000kr pĂ„ ditt köp. [acu729640]: UpptĂ€ck ett kupongpaket pĂ„ 1,000kr för flera anvĂ€ndningar. [acu729640]: Njut av en fast rabatt pĂ„ 1,000kr för nya kunder. [acu729640]: Extra 1,000kr promo-kod för befintliga kunder. [acu729640]: Exklusiv 1,000kr kupong för anvĂ€ndare i "Sverige". Temu Kupongkod 1,000kr Off För Nya AnvĂ€ndare Nya anvĂ€ndare fĂ„r de högsta fördelarna genom att anvĂ€nda vĂ„r kupongkod pĂ„ Temus app. VĂ„r Temu coupon âSwedenâ 1,000kr off och Temu 1,000kr off for new users âSwedenâ Ă€r speciellt utformade för att vĂ€lkomna vĂ„ra nya kunder. [acu729640]: Fast 1,000kr rabatt för nya anvĂ€ndare. [acu729640]: Ett kupongpaket pĂ„ 1,000kr för nya kunder. [acu729640]: Upp till 1,000kr kupongpaket för flera anvĂ€ndningar. [acu729640]: Fri frakt över hela "Sverige". [acu729640]: Extra 30% rabatt pĂ„ valfritt köp för första gĂ„ngen anvĂ€ndare. Hur Man Löst In Temu 1,000kr Off Kupongkoden För Nya Kunder? För att anvĂ€nda Temu 1,000kr off och vĂ„r Temu coupon code âSwedenâ 1,000kr off for new users, följ dessa enkla steg: Skapa ett nytt konto pĂ„ Temus webbplats eller app. VĂ€lj dina önskade produkter och lĂ€gg dem i varukorgen. GĂ„ till kassan och ange koden [acu729640] i rabattkodssektionen. Klicka pĂ„ "AnvĂ€nd" för att se rabatten tillĂ€mpad pĂ„ ditt köp. Slutför din bestĂ€llning och njut av besparingen! Temu Kupongkod 1,000kr Off För Befintliga AnvĂ€ndare Ăven befintliga anvĂ€ndare kan ta del av förmĂ„ner genom att utnyttja vĂ„ra kupongkoder pĂ„ Temu-appen. VĂ„r Temu 100 off coupon code och Temu coupon code âSwedenâ för befintliga kunder erbjuder fantastiska rabatter. [acu729640]: 1,000kr extra rabatt för befintliga Temu-anvĂ€ndare. [acu729640]: Ett kupongpaket pĂ„ 1,000kr för flera inköp. [acu729640]: Gratis present med expressfrakt över hela "Sverige". [acu729640]: Extra 30% rabatt ovanpĂ„ befintlig rabatt. [acu729640]: Fri frakt till "Sverige". Hur Man AnvĂ€nder Temu Kupongkoden 1,000kr Off För Befintliga Kunder? För att anvĂ€nda Temu coupon code 100 euro off och Temu discount code âSwedenâ för befintliga anvĂ€ndare, följ dessa steg: Logga in pĂ„ ditt befintliga Temu-konto. VĂ€lj dina favoritartiklar och lĂ€gg dem i kundvagnen. Ange koden [acu729640] i rabattsektionen vid kassan. Klicka pĂ„ "AnvĂ€nd" och se rabatten tillĂ€mpas. FortsĂ€tt till betalningen och njut av de extra besparingarna! Hur Man Hittar Temu Kupongkoden 1,000kr Off? Du kan enkelt hitta och utnyttja Temu coupon code 1,000kr off first order genom att registrera dig för Temus nyhetsbrev. Följ Ă€ven Temus sociala mediesidor för att fĂ„ de senaste Temu coupons âSwedenâ. Besök dessutom betrodda svenska kupongsidor för att upptĂ€cka de senaste och fungerande Temu-kupongkoderna. Hur Fungerar Temu 1,000kr Off âSwedenâ Kuponger? VĂ„r Temu coupon code 1,000kr off first time user och Temu coupon code âSwedenâ ger dig direkta besparingar. NĂ€r du anger koden under kassan, dras rabatten automatiskt av frĂ„n din totala summa. Kupongen gĂ€ller för bĂ„de nya och befintliga kunder och kan anvĂ€ndas flera gĂ„nger. Hur Man TjĂ€nar Kuponger I Temu âSwedenâ Som Ny Kund? Du kan tjĂ€na kuponger med Temu coupon code âSwedenâ 1,000kr off och Temu 100 off coupon code first order genom att bli medlem i Temus belöningsprogram. Varje köp du gör genererar poĂ€ng som sedan kan bytas ut mot rabatter och kuponger. HĂ„ll ocksĂ„ koll pĂ„ speciella kampanjer som erbjuder extra poĂ€ng för specifika aktiviteter. Vilka Ăr Fördelarna Med Att AnvĂ€nda Temu Kuponger âSwedenâ? Genom att anvĂ€nda vĂ„r Temu 1,000kr off coupon code legit och coupon code for Temu 100 off kan du njuta av mĂ„nga fördelar: 1,000kr rabatt pĂ„ första ordern. 1,000kr kupongpaket för flera anvĂ€ndningar. 70% rabatt pĂ„ populĂ€ra artiklar. Extra 30% rabatt för befintliga Temu-kunder. Upp till 90% rabatt pĂ„ utvalda artiklar. Gratis present för nya anvĂ€ndare. Fri leverans i hela Europa. Temu Gratis GĂ„va âSwedenâ Och Speciell Rabatt För Nya Och Befintliga AnvĂ€ndare Med Temu 1,000kr off coupon code och 1,000kr off Temu coupon code âSwedenâ, finns det mĂ„nga fördelar att hĂ€mta. Dessa kupongkoder gör varje shoppingupplevelse minnesvĂ€rd. [acu729640]: 1,000kr rabatt pĂ„ första bestĂ€llningen. [acu729640]: Extra 30% rabatt pĂ„ alla artiklar. [acu729640]: Gratis gĂ„va för nya Temu-anvĂ€ndare. [acu729640]: Upp till 70% rabatt pĂ„ alla artiklar i Temus app. [acu729640]: Gratis gĂ„va med fri frakt i "Sverige". För- Och Nackdelar Med Att AnvĂ€nda Temu Kupongkod 1,000kr Off AnvĂ€ndningen av Temu coupon âSwedenâ 1,000kr off code och Temu free coupon code âSwedenâ 100 off har följande för- och nackdelar: Fördelar: Enkel att anvĂ€nda. Stor rabatt pĂ„ första köpet. Kombinerbar med andra erbjudanden. TillgĂ€nglig för alla anvĂ€ndare i Sverige. Inga extra avgifter. Nackdelar: BegrĂ€nsad till Temus plattform. Kan inte överföras till andra konton. GĂ€ller endast vissa produkter. Villkor För Temu 1,000kr Off Kupongkod 2024 Med vĂ„r Temu coupon code 1,000kr off free shipping âSwedenâ och Temu coupon code 1,000kr off reddit fĂ„r du en problemfri shoppingupplevelse. VĂ„ra kupongkoder har inget utgĂ„ngsdatum. Koderna Ă€r giltiga för bĂ„de nya och befintliga anvĂ€ndare i "Sverige". Inga minimiköp krĂ€vs för att anvĂ€nda vĂ„ra kuponger. GĂ€ller endast pĂ„ Temus produkter. Kombinerbar med andra kampanjer och rabatter. Final Note Sammanfattningsvis erbjuder vĂ„rt Temu coupon code 1,000kr off en utmĂ€rkt möjlighet för alla att spara pengar och fĂ„ mer vĂ€rde i sina inköp. Oavsett din shoppingvana, har vi en lösning för dig. Med vĂ„r Temu 1,000kr off coupon, sĂ€tter vi dig i fokus och hjĂ€lper dig att göra det mesta av dina shoppingupplevelser. Missa inte chansen att utnyttja dessa fantastiska rabatter! FAQs Of Temu 1,000kr Off Coupon 1. Kan jag anvĂ€nda koden [acu729640] flera gĂ„nger? Ja, du kan anvĂ€nda koden [acu729640] flera gĂ„nger för att fĂ„ rabatt pĂ„ dina inköp. Detta gör att du kan maximera dina besparingar varje gĂ„ng du handlar. Ăr Temu 1,000kr off coupon tillgĂ€nglig för alla produkter? Kupongen gĂ€ller för de flesta produkter pĂ„ Temus plattform. Dock kan vissa varor vara undantagna, sĂ„ kontrollera alltid villkoren för varje specifik artikel. Hur registrerar jag mig för Temus nyhetsbrev? Att registrera sig för Temus nyhetsbrev Ă€r enkelt. Besök Temus webbplats och fyll i din e-postadress i nyhetsbrevssektionen för att börja motta exklusiva erbjudanden och kupongkoder. Kan jag kombinera Temu coupon âSwedenâ 1,000kr off code med andra rabatter? Ja, i de flesta fall kan du kombinera vĂ„r kupongkod med andra rabatter, vilket ger dig ytterligare besparingar. Kontrollera dock alltid de specifika villkoren för att vara sĂ€ker. Hur fĂ„r jag gratis frakt med Temu-kupongen? För att fĂ„ gratis frakt, anvĂ€nd Temu coupon code âSwedenâ 1,000kr off under kassan. Rabatten kommer att inkludera fri frakt för dina kvalificerande inköp.
Last updated: 2024-10-26
To search for an exact phrase, put it in quotes. Example: "getting started docs"
To exclude a word or phrase, put a dash in front of it. Example: docs -help
To search on specific fields, use these field names instead of a general text search. You can group with AND or OR.