Search talk: codesys v 3

 
<< < 1 .. 888 889 890 891 892 .. 898 > >> (Page 890 of 898)

Post by mxj262 on FB having single input but initialized with Array CODESYS Forge talk (Post)
I am adding elements of an ARRAY using pointer to access each element inside a FOR loop and the FOR loop does not stop! What is the right way to use pointers in such case?? I have another loop that is not using pointer and it stops but the loop using pointer keep on adding. METHOD FB_Init: BOOL VAR_INPUT bInitRetains: BOOL; // TRUE: the retain variables are initialized (reset warm / reset cold) bInCopyCode: BOOL; // TRUE: the instance will be copied to the copy code afterward (online change) END_VAR VAR_IN_OUT // basically REFERENCE TO window_buffer: ARRAY [*] OF INT; // array of any size END_VAR THIS^.windowPtr := ADR(window_buffer[0]); THIS^.windowSize := UPPER_BOUND(window_buffer, 1) - LOWER_BOUND(window_buffer, 1) + 1; FUNCTION_BLOCK FB500 VAR_INPUT END_VAR VAR_OUTPUT END_VAR VAR windowPtr: POINTER TO INT; windowSize: DINT; currentIndex: UINT; element1:INT; element2:INT; i:INT; j:INT; sum:DINT:=0; END_VAR element1:=windowPtr[0]; // read the first element of the Array dynamic memorry element2:=windowPtr[1]; FOR i:=0 TO (TO_INT(windowSize-1)) BY 1 DO // this loop does not stop Sum:=sum + windowPtr[i]; END_FOR FOR j:=0 TO 5 BY 1 DO // this loop stops j:=j+1; END_FOR https://ibb.co/k3DhkZT
Last updated: 2024-05-06

Post by wollvieh on Display minutes as hours & minutes CODESYS Forge talk (Post)
Here a code for an Operation Counter with : days,hours,minutes,seconds as an example, maybe it points you the right direction ? FUNCTION_BLOCK OperationDayHour VAR_INPUT IN : BOOL; // Betrieb Takt : BOOL; // 1Hz Systemtakt END_VAR VAR_OUTPUT BetrTag : UDINT; // Ausgabe Betriebstage Betrstd : UDINT; // Ausgabe Betriebsstunden Betrmin : UDINT; // Ausgabe Betriebsminuten Betrsec : UDINT; // Ausgabe Betriebsekunden BetrString : STRING; // Ausgabe als String END_VAR VAR ///Erkennung Taktflanke Flanke: R_TRIG; END_VAR VAR_IN_OUT BetrsecAbsolut: UDINT; //Ein/Ausgangsvariable Betriebssekunden RETAIN !!! END_VAR Flanke(CLK:= Takt, Q=> ); (*Erkennung Taktflanke*) IF (IN AND Flanke.Q) THEN (*Sekunden hochzählen*) BetrsecAbsolut := BetrsecAbsolut + 1; END_IF Betrsec := BetrsecAbsolut MOD 60; Betrmin := ( BetrsecAbsolut / 60) MOD 60; Betrstd := ( BetrsecAbsolut / 60 / 60 ) MOD 24; BetrTag := ( BetrsecAbsolut / 60 / 60 /24 ); BetrString := RIGHT ( UDINT_TO_STRING( BetrTag + 100000),5); BetrString := CONCAT (BetrString, 'd_'); BetrString := CONCAT (BetrString,RIGHT ( UDINT_TO_STRING( Betrstd + 100000),5)); BetrString := CONCAT (BetrString, 'h_'); BetrString := CONCAT (BetrString, RIGHT ( UDINT_TO_STRING( Betrmin + 100),2)); BetrString := CONCAT (BetrString, 'm_'); BetrString := CONCAT (BetrString, RIGHT ( UDINT_TO_STRING( Betrsec + 100),2)); BetrString := CONCAT (BetrString, 's');
Last updated: 2024-05-27

Post by caprez95 on Trace Restart Visuelement CODESYS Forge talk (Post)
Hallo zusammen. Ich habe schon länger mit dem Problem zu kämpfen, dass ich einen Trend (Visuelement) nicht resetten (neustarten) kann. Ich habe es jetzt mit dem Beispiel hinbekommen, die Trace-Aufzeichnung ßber die CmpTraceMgr Bibliothek zu steuern. Aber wie bekomme ich diese Trace-Aufzeichnung in ein Visuelement? Der Code sieht wie folgt aus: // Configure trace IF xInit THEN // Create a trace packet PacketConfig.pszName := ADR('IECTraceConfiguration.Trace1'); // Name of trace PacketConfig.pszApplicationName := ADR('IECTraceConfiguration'); // Name of the application PacketConfig.pszIecTaskName := ADR('Task'); // Name of the task PacketConfig.pszComment := ADR('Demo packet'); PacketConfig.ulEveryNCycles := 1; PacketConfig.ulBufferEntries := 1000; PacketConfig.ulFlags := TRACE_PACKET_FLAGS.TRACE_PACKET_FLAGS_TIMESTAMP_MS AND TRACE_PACKET_FLAGS.TRACE_PACKET_FLAGS_AUTOSTART; IF (NOT fbTraceManager.CreatePacket(PacketConfig := PacketConfig, hPacket=>hPacket1)) THEN xError := TRUE; END_IF // Create a trace record RecordConfig.pszVariable := ADR('iSignal'); // This is the name of variable to record RecordConfig.tcClass := INT_TO_UDINT(TypeClass.TYPE_INT); // Type of the recording variable RecordConfig.ulSize := SIZEOF(iSignal); // Size of the recording variable pApp := AppFindApplicationByName('IECTraceConfiguration', 0); AppGetAreaOffsetByAddress(pApp, ADR(iSignal), ADR(RecordConfig.tvaAddress.taAddress.Area.usArea), ADR(RecordConfig.tvaAddress.taAddress.Area.ulOffset)); // Get and set area offsets RecordConfig.tvaAddress.ulAddressFlags := TRACE_VAR_ADDRESS_FLAGS_IEC OR TRACE_VAR_ADDRESS_FLAGS_AREA_OFFSET; RecordConfig.ulGraphColor := 16#FF00FF00; // green RecordConfig.ulGraphType := 1; // Line with points IF (NOT fbTraceManager.AddRecord(RecordConfig := RecordConfig, hPacket := hPacket1, hRecord => hRecord1)) THEN xError := TRUE; END_IF xInit := FALSE; END_IF // Starts the recording IF xStart THEN IF (NOT fbTraceManager.StartPacket(hPacket := hPacket1)) THEN xError := TRUE; END_IF xStart := FALSE; END_IF // Stop the recording IF xStop THEN IF (NOT fbTraceManager.StopPacket(hPacket := hPacket1)) THEN xError := TRUE; END_IF xStop := FALSE; END_IF // Reset the recording IF xReset THEN IF (NOT fbTraceManager.ResetPacket(hPacket := hPacket1)) THEN xError := TRUE; END_IF xReset := FALSE; END_IF
Last updated: 2024-06-04

Post by caprez95 on Trace Restart Visuelement CODESYS Forge talk (Post)
Hello everyone. I've been struggling with the problem for a long time that I can't reset (restart) a trend (visual element). With the example I have now managed to control the trace recording via the CmpTraceMgr library. But how do I get this trace recording into a visual element? The code looks like this: // Configure trace IF xInit THEN // Create a trace packet PacketConfig.pszName := ADR('IECTraceConfiguration.Trace1'); // Name of trace PacketConfig.pszApplicationName := ADR('IECTraceConfiguration'); // Name of the application PacketConfig.pszIecTaskName := ADR('Task'); // Name of the task PacketConfig.pszComment := ADR('Demo packet'); PacketConfig.ulEveryNCycles := 1; PacketConfig.ulBufferEntries := 1000; PacketConfig.ulFlags := TRACE_PACKET_FLAGS.TRACE_PACKET_FLAGS_TIMESTAMP_MS AND TRACE_PACKET_FLAGS.TRACE_PACKET_FLAGS_AUTOSTART; IF (NOT fbTraceManager.CreatePacket(PacketConfig := PacketConfig, hPacket=>hPacket1)) THEN xError := TRUE; END_IF // Create a trace record RecordConfig.pszVariable := ADR('iSignal'); // This is the name of variable to record RecordConfig.tcClass := INT_TO_UDINT(TypeClass.TYPE_INT); // Type of the recording variable RecordConfig.ulSize := SIZEOF(iSignal); // Size of the recording variable pApp := AppFindApplicationByName('IECTraceConfiguration', 0); AppGetAreaOffsetByAddress(pApp, ADR(iSignal), ADR(RecordConfig.tvaAddress.taAddress.Area.usArea), ADR(RecordConfig.tvaAddress.taAddress.Area.ulOffset)); // Get and set area offsets RecordConfig.tvaAddress.ulAddressFlags := TRACE_VAR_ADDRESS_FLAGS_IEC OR TRACE_VAR_ADDRESS_FLAGS_AREA_OFFSET; RecordConfig.ulGraphColor := 16#FF00FF00; // green RecordConfig.ulGraphType := 1; // Line with points IF (NOT fbTraceManager.AddRecord(RecordConfig := RecordConfig, hPacket := hPacket1, hRecord => hRecord1)) THEN xError := TRUE; END_IF xInit := FALSE; END_IF // Starts the recording IF xStart THEN IF (NOT fbTraceManager.StartPacket(hPacket := hPacket1)) THEN xError := TRUE; END_IF xStart := FALSE; END_IF // Stop the recording IF xStop THEN IF (NOT fbTraceManager.StopPacket(hPacket := hPacket1)) THEN xError := TRUE; END_IF xStop := FALSE; END_IF // Reset the recording IF xReset THEN IF (NOT fbTraceManager.ResetPacket(hPacket := hPacket1)) THEN xError := TRUE; END_IF xReset := FALSE; END_IF
Last updated: 2024-06-04

Post by rmaas on Strange Behavior on Raspberry Pi CODESYS Forge talk (Post)
Hello, what you are seeing is not strange behavior. The problem is that everyting is happening in the same program cycle. After the variable Stepnumber is changed from 10 to 20 for example then you want the program to wait with the next EQ until the next program cycle. Else every EQ will be be true because in every line the variable Stepnumber is increased. When the program arrives (still in the same cycle) at the line with the timer, the Stepnumber has been increased to 30 in the meantime and the timer will allway be ON because even though the variable is written to 10 in this line in the next cycle it starts with 10 and will be 30 again before reaching the timer in line 8. Not very good at explaining stuff but i hope you get the problem. See screenshot below for an example of one way you could solve this...
Last updated: 2024-06-18

Post by joachimk on Profinet Controller IP-Adresse ändern CODESYS Forge talk (Post)
Die IP-Adresse des Profinet-Controllers soll zur Laufzeit geändert werden. Dabei handelt es sich um eine Anwendung auf einem PC mit einer Standard-Ethernetschittstelle (ControlWinV3+WinPcap). Die Datei "CODESYSControl.cfg" wurde dazu angepasst: .... Adapter.0.Name="Ethernet 4" Adapter.0.EnableSetIpAndMask=1 Die konfigurierte IP-Adresse wird zur Laufzeit an die tatsächliche IP-Adresse der Netzwerkschnittstelle mit dem folgenden Befehl angepasst (die Änderung von 192.168.2.33 auf 192.168.2.34 funktioniert auch): Ethernet.UpdateConfiguredIPSettings(IpAddress:=Ethernet.IPAddress, subnetmask:=Ethernet.Subnetmask, gateway:=Ethernet.GatewayAddress); Der Profinet-Controller geht danach auf Störung und gibt die folgende Fehlermeldung aus: "Controller-Status: currently active IP does not match the controller's configuration" Unter "Ethernet diagnostic information" kann man die geänderte IP-Adresse von 192.168.2.34. Ethernet läuft auch ohne Fehler. Unter "PROFINET IO Driver diagnostic information" -> "IPParameter" sieht man noch die alte (konfigurierte) IP-Adresse 192.168.2.33. Wie kann man die Störung beseitigen? Leider habe ich keine Methode zum Ändern der IP-Adresse auf dem Profinet-Controller gefunden? Reconfiguration des Profinet-Controllers?
Last updated: 2024-06-27

Post by farren on How to stay in a method until something is finished. CODESYS Forge talk (Post)
I know I'm thinking about this wrong -- too many decades of procedural and event-driven programming and only a few months of PLC ST programming...... I've created a visualization with a button that when pushed calls a method. I want the method to take a pressure reading, wait one minute and then take another pressure reading. I'm looking for leaks. I'm using TON for the delay. It seems like what is happening is that the method gets called once and it takes the first reading and starts the TON. But then execution continues, leaves that method call, and the second reading never happens. I can force the method to keep running until the whole thing is done with a While loop, but I understand that is considered BAD in PLC programming. If it push the button again to call the method again, it picks up where it left off and if the timer is complete then it runs the remaining code. How do I keep that method running until it is complete with just one call without using a while loop that ties up the PLC for a minute? Thanks! -Farren
Last updated: 2025-10-31

Post by jonasz on Deploy LicenseServer for Linux SL CODESYS Forge talk (Post)
So here's how: I manually installed the following packages: codemeter-lite_8.30.6885.501_amd64.deb codesyslicenseserver_licenseserver_4.18.0.0_all.deb codesyswbmbase_wbmbase_4.18.0.0_all.deb codesyswbmlicensing_wbmlicensing_4.18.0.0_all.deb Of course, the license server appeared immediately. Trying to install it again using Install in the Deploy tab, the same error appears. Of course, the information that such a server is already installed is also there. Configuring PLC, S_PLC, EDGE, and SAFE_TIMER_PROVIDER went smoothly, and basically everything works. I wrote a simple program for S_PLC. I'm loading the programs into PLC and S_PLC. When loading the program into S_PLC, a message appears stating that there is no connection to the S_PLC controller. Timeout error. Restart the controller, attempt to load, and see the above. After changing the cycle time for S_PLC to 50ms, the problem no longer occurs. My question, besides the difficulty of installation for a new user, is what causes the cycle time for S_PLC to be so long, and how can I fix it?
Last updated: 2025-11-14

Post by bertus on Can't get SMC_SmoothPath to work CODESYS Forge talk (Post)
Hi Georg, thanks for your time. What is the value of D_ANGLE_TOL? It is set to 0.01. Do you need the assignment bAbort := NOT bDecoder? Does it help to leave it out? This seems to make no difference. Any errors (e.g. SMC_SmoothPath.Error/ErrorID) or PLC log messages? No errors or log messages. What if you comment out SMC_SmoothMerge and SMC_LimtiDynamics, is corner smoothing still not working? Indeed. Is bDecode written from a different task (e.g. visu)? Then I would recommend to assign to a local variable (bDecodeLocal := bDecode) and use that for all FBs. Otherwise, FBs might see different values of bDecode in a single cycle, which will cause problems. It is a local variable, written from a state machine inside this program. But there is new information: During some trial and error, I tried skipping "stage 2: merge short linear segments" (SMC_SmoothMerge). And suddenly it rounds the corners, see attached image. Looking a bit closer, I noticed that (with the original program) after a download (cold start?), it in fact did round the corners, but only once. Ever next cycle in which the NC program was executed, the corners where not rounded. Not sure if there is any relation, but SMC_SmoothMerge is also the only FB which has no bAbort input. Perhaps I need to reset it (or any buffers) by other means?
Last updated: 2025-12-18

Post by bmatlove on Re-create CoE online window in Visu CODESYS Forge talk (Post)
Hello, I am trying to re-create the CoE online window within a Visu for purposes of checking and interacting with device parameters occasionally for maintenance purposes. To minimize reliance on using the IDE for misc interactions. Ideally, I would like to exactly mimic the CoE online window within the IDE. I assume that it uses a few tricks to minimize overhead, such as only polling registers which are within the visual scope, for example. I'm afraid it might be too much to ask for a pre-built drop-in Visu module to exist for this task. Do I have any options aside from manually re-creating all the logic to do this, relying heavily on SdoInfo function blocks? Is there a way for me to reference the device ESI file to shortcut the process of determining how many registers there are and getting the address for each?
Last updated: 2025-12-27

Post by blitz on Can't get SMC_SmoothPath to work CODESYS Forge talk (Post)
This code works well: PROGRAM PLC_PRG VAR execute : BOOL; abort : BOOL; doMDI : BOOL; manualDataInput : STRING(1024) := 'N5 G01 X0.00 Y200.00 N6 G01 X200.00 Y200.00 N7 G01 X200.00 Y0.00 N8 G01 X0.00 Y0.00'; stringStreamArray: ARRAY[0..NUMBER_OF_CHAINS-1] OF SMC_StringStream2 ; i : UDINT; readNCFromStream : SMC_ReadNCFromStream; sentencesFromStringSteam : SMC_GSentenceQueue ; interpreter : SMC_NCInterpreter; interpreterGeoInfoBuffer: ARRAY[1..GEO_INFO_BUFFERS_SIZE] OF SMC_GeoInfo; roundPath : SMC_RoundPath; roundPathGeoInfoBuffer: ARRAY[1..GEO_INFO_BUFFERS_SIZE] OF SMC_GeoInfo; END_VAR VAR CONSTANT MDI_FILE_NAME : STRING := 'MDI.nc'; NUMBER_OF_CHAINS : UDINT := 15; GEO_INFO_BUFFERS_SIZE : DINT := 500; END_VAR readNCFromStream.bExecute := interpreter.bExecute := roundPath.bExecute := execute; readNCFromStream.bAbort := interpreter.bAbort := roundPath.bAbort := abort; IF doMDI THEN stringStreamArray[0].Init(MDI_FILE_NAME); stringStreamArray[0].AppendData(manualDataInput); stringStreamArray[0].SetEndOfData(); i := 0 ; WHILE i < NUMBER_OF_CHAINS DO readNCFromStream.aStream[i] := stringStreamArray[i]; i := i + 1 ; END_WHILE readNCFromStream.bExecute := TRUE; IF readNCFromStream.bBusy THEN ; END_IF END_IF readNCFromStream( fDefaultVel := 10, fDefaultAccel := 10, fDefaultDecel := 10, fDefaultVelFF := 10, fDefaultAccelFF := 10, fDefaultDecelFF := 10, sentences := sentencesFromStringSteam ); interpreter( sentences:= sentencesFromStringSteam, nSizeOutQueue:= SIZEOF(interpreterGeoInfoBuffer), pbyBufferOutQueue:= ADR(interpreterGeoInfoBuffer)); roundPath( poqDataIn := interpreter.poqDataOut, dRadius := , dAngleTol := , nSizeOutQueue := SIZEOF(roundPathGeoInfoBuffer), pbyBufferOutQueue := ADR(roundPathGeoInfoBuffer));
Last updated: 2026-01-09

Post by konstantin on CAM Motion Recover after STO CODESYS Forge talk (Post)
Hello Mr. Seidel, both the master and the slave axis are modulo. Basically the situation is as follows: One master cycle is 100 units. Slave's modulo length is 2000 units. In the CAM table I defined 10 master cycles on X axis - 1000 units and on the Y axis is the slave - 2000 units. Then depending on the master position 0 to 1000 units the slave's position is plotted on the Y axis - 0 to 2000 units. For example, while the master is executing the 3rd cycle i.e. above 200 units, I trigger the STO function of the slave and it stops. The master executed his cycle but the slave was stopped during the execution. How can I set the slave to continue the CAM sequence from the point where it stopped i.e. third cycle of the master? When I reset the slave error and sync again, everyrhing starts from master's 0 position. Best Regards Konstantin Kolev
Last updated: 2026-02-13

Post by ilya-vah on Table element issues CODESYS Forge talk (Post)
Hello, First post here. I would like to clarify whether the following behavior is known or if it is a bugs. Issue 1 — First row not displayed when using Maximum array index with 1-based arrays Description: When displaying data from an array that is indexed starting from 1 (e.g., ARRAY[1..N]), and the number of displayed rows is limited using the Maximum array index property, the first row of the array is not shown in the visualization. Steps to reproduce: Create an array indexed from 1 (e.g., ARRAY[1..N]). Bind the array to a Table element. Limit the number of displayed rows using the Maximum array index property. Run the visualization. Actual result: The first array element (index 1) is not displayed in the table. Issue 2 — Tooltip string placeholder cannot be bound to string variable from array Description: It is not possible to use a string placeholder in the tooltip that is bound to a string variable from the array. Steps to reproduce: Use a table bound to an array containing string variables. Configure a tooltip using a string placeholder referencing a string field from the array. Run the visualization. Actual result: Tooltip doesn't show any text. A test project demonstrating both issues is attached. Thank you for your time and support.
Last updated: 2026-02-16

Post by risele on Modbus connection via Qronox PCD3 M6893 CODESYS Forge talk (Post)
First, if you don't need to change conversion rules in runtime, take a look at "Unit conversion" module (Application -> add object -> UnitConversion). You can specify there biderectional conversion with different units, limits and so on. Second, since MODBUS don't have "real" types but only general 16-bit registers and Real is 32-bit, generally you need a byte-was conversion Real <> two Words. Note, that depending on the devices on both sides, there are two options: Real-> Word1, Word2 or Real-> Word2, Word1, where Word1 is minor register in Modbus register pair and Word2 is major. You can use simple union: TYPE u_Real : UNION rVal:REAL; wVal:ARRAY[0..1] OF WORD; dwVAL:DWORD; //same as previous, may be easier to specify the MB register END_UNION END_TYPE and convert it as following: VAR myUnion:u_Real; rValue_TO_SEND:REAL; rValue_TO_GET:REAL; END_VAR myUnion.rVal:=rValue_TO_SEND; rValue_TO_GET:=myUnion.rVal; Note, that WORD-order should be properly set in MODBUS registers, otherwise you will get strange values. This tool is helpful: https://www.scadacore.com/tools/programming-calculators/online-hex-converter/ Alternative, you can use functions as REAL_TO_DW and DW_TO_REAL from OSCAT_BASIC, for example.
Last updated: 2026-02-19

Post by fpawlak on How to register own component - CMAddComponent() or CMAddComponent2() CODESYS Forge talk (Post)
Hi All, I wonder which way is correct or better? I would like to register my own component in order to use it in CMPLog. I can use CMAddComponent() or CMAddComponent2() to do it. The main difference is whether I provide udiCmpId myself or it will be generated by runtime. But I don't know which way is correct. Please look at those two examples below. I don't know if CMAddComponent2() is newer and then should be used? CMAddComponent() + providing my own udiCmpId //16#FFFF0000 for unknown myVendorId := 16#FFFF0000; myLibId := 1; myComponentId := myVendorId OR CMPID_IecCode OR myLibId; componentHandle := CMAddComponent(pszComponent:= 'myComponent', udiCmpId:= myComponentId, udiVersion:= 1, pResult:= ADR(result)); IF componentHandle <> RTS_INVALID_HANDLE AND result = CmpErrors.Errors.ERR_OK THEN LogAdd2( hLogger:= STD_LOGGER, udiCmpID:= myComponentId, udiClassID:= CmpLog.LogClass.LOG_ERROR, udiErrorID:= 0, udiInfoID:= 0, pszInfo:= 'myComponent regidtered succsefull.' ); ELSE LogAdd2( hLogger:= STD_LOGGER, udiCmpID:= CMPID_CmpMgr, udiClassID:= CmpLog.LogClass.LOG_ERROR, udiErrorID:= 0, udiInfoID:= 0, pszInfo:= 'Error while regidtering myComponent.'); END_IF CMAddComponent2() + udiCmpId generated by runtime componentHandle := CMAddComponent2(pszComponent:= 'myComponent2', udiVersion:= 1, udiCmpId:= ADR(myComponentId), pResult:= ADR(result)); IF componentHandle <> RTS_INVALID_HANDLE AND result = CmpErrors.Errors.ERR_OK THEN LogAdd2( hLogger:= STD_LOGGER, udiCmpID:= myComponentId, udiClassID:= CmpLog.LogClass.LOG_ERROR, udiErrorID:= 0, udiInfoID:= 0, pszInfo:= 'myComponent2 regidtered succsefull.' ); ELSE LogAdd2( hLogger:= STD_LOGGER, udiCmpID:= CMPID_CmpMgr, udiClassID:= CmpLog.LogClass.LOG_ERROR, udiErrorID:= 0, udiInfoID:= 0, pszInfo:= 'Error while regidtering myComponent2.'); END_IF
Last updated: 6 days ago

Post by falif461 on ╭⁠☞[] Temu Coupon Code $100 Off⤁ {"acq557317"} $100 Off for New and Existing users→⁠_⁠→ CODESYS Forge talk (Post)
Temu Coupon Code $100 Off Colombia ➥ {acq557317} & {acq557317} , TEMU Coupon Code "acq557317" | $100 OFF & 50% DISCOUNT, TEMU Coupon Code "acq557317" ,is an all in one opportunity, which also offers $100 Off & 50% Discount! The TEMU Coupon Code "acq557317" offers an impressive $100 discount and a 50% discount on purchases for both new and existing customers. This special offer is a fantastic opportunity to save significantly on your TEMU shopping experience. By using the Coupon Code "acq557317" in Colombia , you can unlock the $100 coupon bundle, which provides $120 worth of savings. This means that you can enjoy a $100 discount on your order, as well as access to exclusive deals and additional savings opportunities. ⇦ Exclusive Temu coupon Codes ,,,acq557317,,,,, ➤ Offers → Discounts, Student Deals & More ╰┈➤ Best Temu Coupon Codes Colombia ➤ "acq557317" ⇨ "acq557317" ➥ Up to 50% Off Retrieve ➲$100➲ TEMU Coupon Code ➥【acq557317】 or 【acq557317】⇒{Colombia } || AUG/SEP 2024 To redeem the TEMU $100 Coupon Code, simply follow these steps: Sign up for a TEMU account on their website or mobile app. Add items worth $100 or more to your shopping cart. During checkout, enter the Coupon Code "acq557317" in the designated field. The $100 discount will be automatically applied, and you can also enjoy an additional 50% off on your purchase. This Coupon Code is valid for both new and existing TEMU customers, making it a great opportunity for everyone to save on their shopping. The $100 coupon bundle can be combined with other available discounts, such as the 30% off code for fashion, home, and beauty categories, allowing you to maximize your savings. ➥ Temu Coupon Code $100 Off {acq557317} Colombia ➥ Temu Coupon Code 40 Off {acq557317} Colombia ➥ Temu Coupon Code 50 Off {acq557317} Colombia ➥ Temu Coupon Code 70 Off {acq557317} Colombia ➥ Temu Coupon Code 90 Off {acq557317} Colombia ➥ Temu Coupon Code 30 Off {acq557317} Colombia ➥ Temu Coupon Code First Order {acq557317} Colombia ➥ Temu Coupon Code Existing User {acq557317} Colombia ➥ Temu Coupon Code 90 Off {acq557317} or {acq557317} Colombia Temu Coupon Code Colombia $100 Off [acq557317] For New Users 2024 Temu has rapidly gained popularity as a go-to shopping destination, offering a vast array of trending products at unbeatable prices. To welcome new users, Temu is excited to offer the exclusive Temu coupon code $100 off [acq557317]. Alongside this, existing customers can enjoy significant savings with the acq557317coupon code. Why You Should Embrace Temu Coupon Codes Colombia Temu has revolutionized online shopping by providing an extensive range of products, from fashion and electronics to home goods and accessories. Coupled with fast delivery and free shipping to numerous countries, Temu has become a preferred choice for budget-conscious shoppers. Now, imagine enjoying these benefits with an additional $100 off your purchase! That's where our Temu coupon codes come in. <get $50="" off="" your="" first="" temu="" order!=""> Use Code {acq557317} Now! |Exclusive Offer: $50 Off Your First Temu Purchase with Code {acq557317}| <save big!="" $50="" off="" your="" first="" order="" on="" temu=""> with Code {acq557317} |Unlock $50 Savings on Temu> First Order Using {acq557317}| $50 Off Your Initial Temu Order Use Code {acq557317} Today! <get $50="" off="" temu’s="" first="" purchase=""> with Code {acq557317} |Don’t Miss Out: $50 Off Your First Temu Order| Use Code {acq557317} <$50 Discount on Your First Temu Purchase> Use {acq557317} |Amazing $50 Off on Your First Temu Order| with Code {acq557317} <start shopping="" with="" $50="" off="" on="" temu!=""> Use Code {acq557317} |First Order Special: $50 Off at Temu| Use {acq557317} 🥳 <save $50="" on="" your="" first="" temu="" purchase!=""> Apply Code {acq557317} 🥳 |Hot Deal: $50 Off Your First Order on Temu| Code {acq557317} <exclusive $50="" off="" on="" your="" first="" temu="" order!=""> Use Code {acq557317} |First-Time Shopper? Get $50 Off at Temu| Use Code {acq557317} <get $50="" off="" your="" first="" temu="" order!=""> Use Code {acq557317} Now! |Exclusive Offer: $50 Off Your First Temu Purchase with Code {acq557317}| </get></exclusive></save></start></get></save></get> Unveiling Top Temu Coupon Codes for August & September 2024 To maximize your savings, consider these exceptional Temu coupon codes: acq557317: $100 off for new users - A fantastic welcome offer. acq557317: $100 off for existing customers - A reward for loyalty. acq557317: $100 extra off - Boost your savings significantly. acq557317: Free gift for new users - A delightful surprise. acq557317: $100 coupon bundle - A comprehensive savings package. Navigating the Path to Temu Savings Redeeming your Temu coupon code is a straightforward process: Create a Temu account or log in to your existing one. Explore Temu's vast collection and add your desired items to your cart. Proceed to checkout and apply your coupon code at the designated box. Witness the magic unfold as your discount is instantly applied to your order total. Unlock Extraordinary Savings with Temu Coupon Code $100 Off [acq557317] The Temu coupon code $100 off [acq557317] is a fantastic opportunity for new users to experience the Temu shopping thrill with significant savings. Imagine purchasing your favourite items at a discounted price. This coupon empowers you to enjoy a wide range of products without breaking the bank. Unleash the Power of Temu Coupon Codes Flat $100 discount: Enjoy a substantial reduction on your entire order. $100 discount for new users: A generous welcome offer for first-time shoppers. $100 off for existing customers: A reward for your loyalty to Temu. $100 coupon for new customers: A fantastic incentive to try Temu. Temu $100 off for old users: A token of appreciation for your continued support. Elevate Your Temu Shopping Experience To optimize your savings journey on Temu, consider these expert tips: Leverage free shipping: Enjoy complimentary delivery on your orders. Explore diverse product categories: Uncover hidden gems and unexpected finds. Stay alert for daily deals and flash sales: Seize limited-time opportunities. Combine coupons with other discounts: Maximize your savings potential. Share your shopping experience: Leave reviews to help others and potentially earn rewards. Utilize social media: Follow Temu on platforms like Instagram and Facebook for exclusive deals and promotions. Join Temu's email list: Stay informed about the latest offers and product launches. Essential Temu Coupon Codes for Unmatched Savings To further enhance your shopping adventure, explore these indispensable Temu coupon codes: acq557317: Temu coupon $100 off for new users acq557317: Temu coupon code $100 off for existing customers acq557317: Temu coupon codes 100% acq557317: Temu coupon $100 off code acq557317: Temu coupon $100 off first-time user Temu Coupon Codes for August 2024: The Key to Massive Discounts This month, Temu offers several enticing Coupon codes tailored to both new and existing users, ensuring everyone can save. Here’s a quick look at the top Temu Coupon codes you can take advantage of this August: [acq557317]: Temu Coupon code $100 off for new users [acq557317]: Temu Coupon code 40% off for new customers [acq557317]: Temu Coupon code 40% extra off [acq557317]: Temu Coupon code for a free gift for new users [acq557317]: Temu $100 Coupon bundle for existing and new users These Temu Coupon codes offer a variety of benefits, from substantial discounts to free gifts and bundled savings. Whether you’re shopping for fashion, electronics, home goods, or more, these codes will ensure you get the best deal possible. Whether you're a seasoned Temu shopper or a new customer, these coupon codes offer an incredible opportunity to save on your purchases. Remember, the Temu coupon code $100 off [acq557317] is a limited-time offer. Don't miss out on this fantastic chance to enjoy significant savings! Embark on your Temu shopping spree today and experience the thrill of unbeatable prices. Temu Coupon Code France: (acq557317) or (acq557317) Temu Coupon Code Sweden : (acq557317) or (acq557317) Temu Coupon Code Australia : (acq557317) or (acq557317) Temu Coupon Code United Kingdom : (acq557317) or (acq557317) Temu Coupon Code Spain : (acq557317) or (acq557317) Temu Coupon Code Italy : (acq557317) or (acq557317) Temu Coupon Code Germany : (acq557317) or (acq557317) Temu Coupon Code Saudi Arabia : (acq557317) or (acq557317) Temu Coupon Code Austria : (acq557317) or (acq557317) Temu Coupon Code Belgium : (acq557317) or (acq557317) Temu Coupon Code Thailand : (acq557317) or (acq557317) Temu Coupon Code Kuwait : (acq557317) or (acq557317) Temu Coupon Code United Arab Emirates : (acq557317) or (acq557317) Temu Coupon Code Switzerland : (acq557317) or (acq557317) Temu Coupon Code Mexico : (acq557317) or (acq557317) Temu Coupon Code New Zealand : (acq557317) or (acq557317) Temu Coupon Code Poland : (acq557317) or (acq557317) Temu Coupon Code United States : (acq557317) or (acq557317) Temu Coupon Code Portugal : (acq557317) or (acq557317) Temu Coupon Code Netherlands : (acq557317) or (acq557317) Temu Coupon Code Brazil : (acq557317) or (acq557317) Temu Coupon Code Colombia : (acq557317) or (acq557317) Temu Coupon Code Chile : (acq557317) or (acq557317) Temu Coupon Code Israel : (acq557317) or (acq557317) Temu Coupon Code Egypt : (acq557317) or (acq557317) Temu Coupon Code Peru : (acq557317) or (acq557317) Temu Coupon Code Ireland : (acq557317) or (acq557317) Temu Coupon Code Hungary : (acq557317) or (acq557317) Temu Coupon Code Romania : (acq557317) or (acq557317) Temu Coupon Code Bulgaria : (acq557317) or (acq557317) Temu Coupon Code Colombia : (acq557317) or (acq557317) Temu Coupon Code Slovenia : (acq557317) or (acq557317) Temu Coupon Code Colombia : (acq557317) or (acq557317) Temu Coupon Code Europe : (acq557317) or (acq557317) Temu Coupon Code Malaysia : (acq557317) or (acq557317) Temu Coupon Code Oman : (acq557317) or (acq557317) Temu Coupon Code Norway : (acq557317) or (acq557317) Temu Coupon Code Switzerland : (acq557317) or (acq557317) Temu Coupon Code Czech Republic : (acq557317) or (acq557317) Temu Coupon Code Asia : (acq557317) or (acq557317) Temu Coupon Code East Asia : (acq557317) or (acq557317) Temu Coupon Code Middle East : (acq557317) or (acq557317) Temu Coupon Code Cyprus : (acq557317) or (acq557317) Temu Coupon Code Central : (acq557317) or (acq557317) Temu Coupon Code Eastern : (acq557317) or (acq557317) Temu Coupon Code Romania : (acq557317) or (acq557317) Temu Coupon Code Canada : (acq557317) or (acq557317) Temu Coupon Code Colombia : (acq557317) or (acq557317) Temu Promo Code-{acq557317} Temu Promo Code: $100 OFF{acq557317} Temu Coupon Code: Free Shipping{acq557317} Temu $100 OFF Code{acq557317} Temu 50% Discount Coupon{acq557317} Temu $120 Coupon Bundle Code{acq557317}{acq557317} Temu Student Discount Coupon Code{acq557317} temu existing user coupon code Using Temu's coupon code [{acq557317}] will get you $100 off, access to exclusive deals, and benefits for additional savings. Save 40% off with Temu coupon codes. New and existing customer offers. temu coupon code May 2024- {acq557317} temu new customer offer{acq557317} temu discount code 2024{acq557317} 100 off coupon code temu{acq557317} temu 100% off any order{acq557317} 100 dollar off temu code{acq557317} What is Temu $100 Coupon Bundle? New Temu $100 coupon bundle includes $120 worth of Temu coupon codes. The Temu $100 Coupon code "{acq557317}" can be used by new and existing Temu users to get a discount on their purchases. Enjoy $100 Off at Temu with Promo Code [acq557317] – Exclusive for August and September 2024! Looking for incredible savings on top-quality products at Temu? Whether you're new to Temu or a seasoned shopper, our special promo code [acq557317] offers you an exclusive chance to save $100 on your purchases throughout August and September 2024. Here's everything you need to know to take full advantage of this fantastic offer. For New Customers: 1. Sign Up and Save Big: • Download the Temu App: Start by downloading the Temu app from your smartphone's app store or visit the Temu website using your computer. Temu's user-friendly interface ensures a smooth shopping experience. • Create an Account: Register for a new account by providing your basic details. This process is quick and straightforward, and it unlocks your access to a $100 discount. • Browse and Add to Cart: Explore Temu's extensive range of products, from stylish fashion items to cutting-edge electronics and home essentials. Add items totaling $100 or more to your cart. This ensures that you meet the minimum purchase requirement to use the promo code. 2. Apply Your Promo Code: • Proceed to Checkout: Once you've filled your cart, go to the checkout page. Here, you'll see a field labeled "Promo Code" or "Discount Code." • Enter Code [acq557317]: Input the promo code [acq557317] into the designated field and click "Apply." The $100 discount will be automatically applied to your total. • Review and Complete Purchase: Verify that the discount has been applied to your order. Complete the payment process and enjoy your shopping spree with a $100 discount! Tip for New Customers: This exclusive offer is valid only during August and September 2024. Make sure to use the code [acq557317] within this period to maximize your savings. For Existing Customers: 1. Shop and Save with Ease: • Log Into Your Account: If you're a returning Temu shopper, simply log into your existing account on the Temu app or website. • Explore and Add Items: Browse through the extensive product catalog. From the latest gadgets to home decor, add items totaling $100 or more to your cart. • Prepare for Checkout: Proceed to the checkout page where you'll be able to apply your discount. 2. Redeem Your Promo Code: • Enter Promo Code [acq557317]: In the "Promo Code" field at checkout, enter [acq557317] and click "Apply." The $100 discount will be applied to your order total. • Check and Complete Purchase: Confirm that the discount has been applied correctly to your order. Finalize the payment details to complete your purchase. Tip for Existing Customers: This offer can be combined with other promotions available during August and September, so keep an eye out for additional savings opportunities! How to Redeem the $100 Coupon Code [acq557317]: Whether you are a new or existing customer, here's a step-by-step guide to ensure you don't miss out on this exclusive $100 discount. 1. Sign Up or Log In: • New Customers: Register for a new account on Temu by providing your details on the app or website. • Existing Customers: Log into your current Temu account. 2. Add Items to Your Cart: • Browse Temu's product offerings and add items worth at least $100 to your shopping cart. This qualifies you to use the promo code. 3. Apply the Promo Code: • At the checkout page, find the "Promo Code" box. • Enter the code [acq557317] and click "Apply." The $100 discount will be reflected in your order total. 4. Review and Complete Your Purchase: • Make sure the discount is applied to your order. Review your cart and proceed with payment. • Enjoy your savings and the products you've purchased! Additional Benefits: • Exclusive Deals: Using promo code [acq557317] not only gives you $100 off but may also unlock additional deals and promotions tailored for August and September. • Combining Discounts: You can often combine this promo code with other ongoing promotions for even greater savings. Keep an eye on Temu's website and app for additional offers. • Free Shipping: Depending on the promotion, you might also benefit from free shipping on eligible items. Important Details: • Validity: This $100 off promo code is valid only from August 1, 2024, to September 30, 2024. Make sure to use it within this time frame to take advantage of the offer. • Minimum Purchase: The offer applies to purchases of $100 or more. Ensure your cart meets this minimum before applying the promo code. • One-Time Use: The promo code [acq557317] can typically be used only once per customer. Make sure to apply it to your largest purchase to maximize savings. FAQs: Q: Can new and existing customers both use the promo code [acq557317]? • A: Yes, the promo code is available to both new and existing Temu customers. Q: Is there a minimum purchase requirement to use the promo code? • A: Yes, you need to have a minimum purchase of $100 to apply the $100 discount. Q: Can the promo code be combined with other offers? • A: Yes, in many cases, you can combine the promo code [acq557317] with other ongoing promotions and discounts. Q: What should I do if the promo code does not work? • A: Double-check that the code [acq557317] is entered correctly and that your order meets the minimum purchase requirement. If you continue to have issues, contact Temu's customer service for assistance. Take advantage of this exclusive offer today and enjoy substantial savings on your next Temu purchase. With up to $100 off, there's never been a better time to shop for high-quality products at unbeatable prices. Remember, this offer is only available for a limited time, so don't delay—start shopping and saving now! Are you looking to save big while shopping on Temu? You're in the right place! Temu is quickly becoming a favorite online marketplace, and with our exclusive Temu Coupon Codes like [acq557317], you can enjoy significant discounts, including $100 off your first order and up to 90% off selected items this October 2024. In this article, we’re diving into everything you need to know about using Temu Coupon Codes, including their legitimacy and tips on maximizing your savings. Let’s get started! What is Temu? Temu is an emerging e-commerce platform that offers a wide range of products, including electronics, clothing, accessories, home decor, and much more. Known for its affordability, Temu provides various opportunities to save even more with the right coupon codes. Whether you are a new user or an existing customer, the savings potential is substantial. Temu Coupon Code [acq557317]: What Can You Expect? Here are some of the top offers you can enjoy with the Temu Coupon Code [acq557317]: • $100 Off on your first order • Up to 90% Discount on selected items • 30% Off across various products • Free shipping for new users and first-time customers These promo codes are valid for October 2024, giving you ample time to grab your favorite items without breaking the bank. How to Apply Temu Coupon Code [acq557317]? Applying a Temu Coupon Code like [acq557317] is easy! Here’s how to do it:
Last updated: 2024-10-26

Post by mubeta on Strange problem with the ‘MC_SetPosition’ function CODESYS Forge talk (Post)
How are the servo drives controlled? EtherCAT, step/dir pulses, other? CANOpen, 1 Mb/s, bus load 35%, cycle time 2ms. Another thought is that - if it's step/dir pulse based control - the pulses from the PLC to the drive are getting missed/lost at high frequencies? If that's the case then there would be multiple troubleshooting steps/corrections that could be investigated. Here, it seems to me that we are getting completely off track with the observed problem. You could try to create a simplified program I had already written this elsewhere. The program before being brought into machines was exhaustively tested in SW emulation and the problem did not occur. However, in emulation I was interested in checking other aspects of the process, not this specific one which is for real a correction made necessary after the fact. The part of the program that does this correction with the function mentioned in the topic, came up from its origins, but I didn't know or didn't think it was really useful. A scruple that later turned out to be necessary. However, for now I do not think I will spend any more time on this verification, already lacking any to do my normal. I remain amazed, however, that a function intended to correct the axis position with the motor in motion and that it should not interfere with this, in fact instead changes behavior as the motor speed changes. Mah! When you manually control the motor directly from the servo drive software at the speeds you are calling for, does it move precisely to the target position? The drive and motor have been working fine for about 10 years. In replacing the machine control system, I opted for CoDeSys where before there was something else. But this is not the subject of the problem. What I need to resolve is the fact that a clutch specially placed at a certain point can slip and, therefore, I have the undeniable need to phase the 'prime mover' to the mechanical position of the machine, detected by a cam for each turn, in order to properly stop at its optimum point. Which for now I have ruled out doing. In fact, if I really have to say, since we have now gone brutally OT, I originally thought that this clutch should only come into action in cases of extreme necessity, as happens in most trials. But this one, the way it is made, slips more easily than I could estimate and the servo-controlled 'prime mover,' and the machine, get out of phase, maybe by a little, but frequently, and when the machine work at it's high speed, (in fact all of the time), I can't adjust properly the 'prime mover' position at fly.
Last updated: 2025-01-18

Post by ryandmg on Web Client (HMI) Disconnects from Webvisu (Weidmuller u-OS) CODESYS Forge talk (Post)
Hey Everyone, I'm having a bit of a struggle finding settings that will reliably maintain a connection between the webvisu and a touchscreen client. Every so often the HMI disconnects and will perpetually display the red spinning arrow with the "Error Happened, Will resume automatically" text. Power cycling the HMI to force a reconnect will re-establish comms. It seems to happen during periods of inactivity if that's a clue. From what I've gathered so far this seems to have something to do with the webvisu update rate, buffer size as well as the visu task scan rate. We first tried the default settings as follows: Webvisu Update Rate: 200 ms Webvisu Buffer Size: 50,000 Visu Task Scan Rate: 100 ms Priority 31 Other Tasks for Reference: Main Task Scan Rate: 100 ms Priority 1 Alarm Manager Scan Rate: 50 ms Priority 31 Ethercat Task: 4 ms Priority 1 This would disconnect some what regularly. We then made the following changes to try and stabilize: Webvisu Update Rate: 150 ms Webvisu Buffer Size: 75,000 Visu Task Scan Rate: 75 ms Kept other tasks the same. This seems to disconnect even more frequently. Also for reference the network is very small and only consists of the PLC, a small switch and the HMI. We're also not controlling frames from outside the visu program itself. The frame changes are all done natively. Any suggestions to get this to stop disconnecting? Oh and whatever the issue is the log does not record it. Figured I would ask here before opening a ticket. Thanks in advance for your help!
Last updated: 2023-09-06

Post by manuknecht on Opening a Dialog on a specific Client from ST CODESYS Forge talk (Post)
I managed to find a solution that seems to work reliably. As the VU.Globals.CurrentClient-filter accesses the CURRENTCLIENTID or at least a similar, internal variable it can only be used if called from a certain client (e.g. from a button in a visualization). My solution works by implementing a new client filter that compares the client ID of all clients to the ID of the last client that was used. The variable containing the data of the last client is defined as: G_LastClient : VU.IVisualizationClient; // Copy of last client that detected click This last client is then updated every time a button is pressed using the Execute ST-Code input configuration of the button: G_LastClient := VU.PublicVariables.Clients.Current; Next, I created a function block that implements the client filter interface as so: FUNCTION_BLOCK FB_LastClientFilter IMPLEMENTS VU.IVisualizationClientFilter VAR_INPUT END_VAR VAR_OUTPUT END_VAR VAR END_VAR Then i added a method to the FB called IsAccepted which is used to filter out the client. When creating the method, it should automatically be filled with the according variable declaration, as it is defined in the interface: (* For every client can be desided, if it is accepted. ``TRUE``: Client is accepted*) METHOD IsAccepted : BOOL VAR_INPUT (* The client, to check*) itfClient : VU.IVisualizationClient; END_VAR Now the client can be compared to the last used client as such: // check if clientID corresponds to clientID of last recorderd client IF itfCLient.ClientId = G_LastClient.ClientId THEN IsAccepted := TRUE; ELSE IsAccepted := FALSE; END_IF To make use of this custom client filter, initialize a variable with the client filter: LastClient : FB_LastClientFilter; // Client filter to find last used client Then use this client filter when opening or closing a dialog from ST: fbOpenMyDialog(itfClientFilter:=LastClient,xExecute:=TRUE,sDialogName:='VIS_MyDialog_DLG');
Last updated: 2023-09-27

Post by mubeta on Some 'pathetic' errors in SoftMotion program CODESYS Forge talk (Post)
Yes, this is the error the sometimes show up. What make me crazy is the fact that it happens randomly and not each times. I know very well where the problem is, in wich one program row it's located. For each actions of the state machine I have all events recorded with log on text file. it is not problematic for me to find the application point of the fault, but I need to understand why occasionally and for no apparent reason, switching the state machine and thus changing the motion FB, sends the axis into failure (but only occasionally). For example, one case that is often problematic is the execution of the Axis Halt instruction. When, after a MoveAbosulte instruction this returns the event as 'done' and indeed the axis is in standstill, the state machine first sets the move instruction to FALSE, and the next cycle sets the Halt request to TRUE. Some of the time everything works out fine. Occasionally, however, in this exchange, the axis goes into fault, also losing the OPERATIONAL state. Meanwhile, I would like to understand why the motion FB instances must still be called even after the Execute is set to FALSE, especially in view of the fact that the next instruction is programmed to abort the previous one, with BufferMode set to 'Aborting'. All these unnecessary FB calls are an unnecessary overhead on the CPU anyway. Is there any precise rule about when to cease calling the various instances? (It should precisely be the 'done' status that says this one has finished its work).
Last updated: 2024-07-18

Post by tk096 on Some 'pathetic' errors in SoftMotion program CODESYS Forge talk (Post)
Meanwhile, I would like to understand why the motion FB instances must still be called even after the Execute is set to FALSE, especially in view of the fact that the next instruction is programmed to abort the previous one, with BufferMode set to 'Aborting'. All these unnecessary FB calls are an unnecessary overhead on the CPU anyway. Is there any precise rule about when to cease calling the various instances? (It should precisely be the 'done' status that says this one has finished its work). In general: - Motion function blocks have to be called until they report 'Done', 'Error', 'CommandAborted' or a subsequent motion FB with BufferMode=Aborting is started in the current cycle. - Setting the Execute input to FALSE will not abort any ongoing motion of the motion function block. For example, one case that is often problematic is the execution of the Axis Halt instruction. When, after a MoveAbosulte instruction this returns the event as 'done' and indeed the axis is in standstill, the state machine first sets the move instruction to FALSE, and the next cycle sets the Halt request to TRUE. Some of the time everything works out fine. Occasionally, however, in this exchange, the axis goes into fault, also losing the OPERATIONAL state. I think the error SMC_FB_WASNT_CALLED_DURING_MOTION is only a follow-up (and misleading) error that results from the axis not being in operational state anymore (bus problems). Is there an error 'regulator or start not set' in the device log before the error 'motion generating FB wasn't called for at least one cycle'? Which error does the respective function block (Halt.ErrorId) report?
Last updated: 2024-07-22

Post by mubeta on Some 'pathetic' errors in SoftMotion program CODESYS Forge talk (Post)
Thank you for your interest. Your answers are in line with what I knew, so at least it comforts me that I did not misinterpret the situation. However, I don't have an exact match as, for this project over the past few days I have: 1) I have gone back to leaving the various FBs of the motion always called, all of them, and in the state machine I use a boolean to activate the various useful Execute. (But in the future I want to go back and try the programming technique with which I wanted to develop this project); 2) For the occasional error: SMC_FB_WASNT_CALLED_DURING_MOTION perhaps it was due to the fact that I had set the Ethercat bus synchronism only at the CAN master level, but not at the level of individual drives. I have now also activated it for the individual drives and it does indeed seem to have been resolved, but having also adopted the programming technique mentioned in point 1), I cannot say whether this was the solution to the problem, or instead the previous point. Is there an error ‘regulator or start not set’ in the device log before the error ‘motion generating FB wasn't called for at least one cycle’? I can't answer that right now. By now the machine is running and I am no longer there, at this one. Also, I seem to remember that the 'fbeFBerror' drive structure (5-element array), does not cycle, BUT ONCE THE 5 EVENTS AFTER SWITCHING ON, IT DOES NOT UPDATE ANYMORE (but that's another issue), so diagnostics were not easy.
Last updated: 2024-07-24

Post by gorditron on I2C Communication with CODESYS Forge talk (Post)
Hello, I have problems with the I2C communication to an ADS7828 AD converter. I don't get any value back from the chip. I use a Kontron chip (ARM 32SC) with Linux as the operating system. I also use the CmpCharDevice library. ADS7828 parameters Address: A1 = 0 / A0 = 0 = SD = 1 = Single End C2 = 0 / C1= 0 / C0= 0 / Channel 0 PD1 = Internal Reference and PD0 = AD Converter ON Here is my code: VAR b_i2cAdr : BYTE := 16#48; (* Standard I2C-Adresse des ADS7828 *) x_Init: BOOL;(* Flag fĂźr die Initialisierung *) b_config_byte: BYTE;(* Konfigurationsbyte fĂźr den ADS7828 *) ab_cmd_buffer : ARRAY [0..0] OF BYTE; (* Buffer fĂźr den Befehl *) ab_data_buffer : ARRAY [0..1] OF BYTE; (* Buffer fĂźr die empfangenen Daten *) ui_adc_value_1 : UINT; (* Ausgelesener ADC-Wert *) I2C_Handle: RTS_IEC_HANDLE; (* Handle fĂźr das I2C-Device *) di_result_open: DINT;(* Ergebnis der Funktionsaufrufe *) di_result_adr: DINT;(* Ergebnis der Funktionsaufrufe *) di_result_wr_cmd: DINT;(* Ergebnis der Funktionsaufrufe *) di_result_rd_cmd: DINT;(* Ergebnis der Funktionsaufrufe *) di_result_close: DINT;(* Ergebnis der Funktionsaufrufe *) END_VAR //*** Init from the I2C communication port *** IF NOT x_Init THEN I2C_Handle := CDOpen(szFile:= '/dev/i2c-0', dFlags:= O_RDWR, pResult:= ADR(di_result_open)); //* I2C opening * //*** set of the I2C address *** CDIoctl(hFile:=I2C_Handle , dRequest:=1795 , dParameter:=b_i2cAdr , pResult:=ADR(di_result_adr) ); x_Init := TRUE; END_IF (* Hauptlogik *) IF I2C_Handle <> 0 THEN (* Konfigurationsbyte setzen: Single-Ended Kanal 0, interne Referenz *) b_config_byte := 16#8C; (* 10001100b: AIN0, interne Referenz, Single-Ended *) ab_cmd_buffer[0] := b_config_byte; (* Schreiboperation zum Konfigurieren des Chips *) CDWrite(hFile:= I2C_Handle, pbyBuffer:= ADR(ab_cmd_buffer), udCount:= SIZEOF(ab_cmd_buffer), pResult:= ADR(di_result_wr_cmd)); IF di_result_wr_cmd = 0 THEN (* Leseoperation, um den ADC-Wert zu erhalten *) CDRead(hFile:= I2C_Handle, pbyBuffer:= ADR(ab_data_buffer), udCount:= SIZEOF(ab_data_buffer), pResult:= ADR(di_result_rd_cmd)); IF di_result_rd_cmd = 0 THEN (* ADC-Wert aus den Daten extrahieren *) ui_adc_value_1 := SHL(TO_UINT(ab_data_buffer[0]), 8) OR TO_UINT(ab_data_buffer[1]); ELSE (* Fehler beim Lesen der Daten *) ui_adc_value_1 := 0; (* ADC-Wert auf 0 setzen *) END_IF ELSE (* Fehler beim Schreiben der Konfiguration *) ui_adc_value_1 := 0; END_IF END_IF
Last updated: 2024-12-13

Post by timo on String nach erlaubten/unerlaubten Zeichen durchsuchen CODESYS Forge talk (Post)
Hallo, Ich bastele gerade an einer mÜglichst einfachen MÜglichkeit mit der ich prßfen kann ob ein String Sonderzeichen enthält. Mein Ansatz ist ein ST FB mit einer Case Schrittkette. Ich vergleiche jedes Zeichen des Strings mit allen Zeichen eines vorher definierten Strings erlaubter Zeichen, der A-Z, a-z und 0-9 enthält und ggf angepasst werden kann, wenn ich weitere Zeichen erlaube. Leider wird meine j Zählervariable nicht richtig ausgefßhrt. Hat da jemand eine Idee? Oder gibt es eine einfachere LÜsung/einen fertigen FB den ich mir anschauen kann? FUNCTION_BLOCK Sonderzeichen_Check VAR_INPUT inputString : STRING; // Zu prßfender String startCheck : BOOL; // Startsignal END_VAR VAR_OUTPUT ok : BOOL; // TRUE, wenn keine ungßltigen Zeichen END_VAR VAR i : INT := 1; // Input-String Zähler j : INT := 1; // erlaubte Zeichen Zähler allowedChars: STRING := 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; // Erlaubte Zeichen currentChar : STRING[1]; // Aktuelles Zeichen step : INT := 0; // Schritt END_VAR CASE step OF 0: // Warten auf Start IF startCheck THEN step := 10; END_IF 10: // Initialisierungen i := 1; j := 1; ok := TRUE; // Standard: ok step := 20; 20: // Durchgehen des Eingangs-Strings IF i <= LEN(inputString) THEN currentChar := MID(inputString, i, 1); // Aktuelles Zeichen step := 30; ELSE step := 70; // Alle Zeichen ok END_IF 30: // Durchgehen der erlaubten Zeichen IF j <= LEN(allowedChars) THEN step := 40; // Zu Schritt 40 ELSE step := 60; // Ungßltiges Zeichen END_IF 40: // Vergleich IF currentChar = MID(allowedChars, j, 1) THEN i := i + 1; // Nächstes Zeichen im Input step := 20; ELSE j := j + 1; // Nächstes erlaubtes Zeichen step := 30; END_IF 60: // Ungßltiges Zeichen ok := FALSE; // Setze auf FALSE step := 0; 70: // Alle Zeichen ok step := 0; END_CASE
Last updated: 2025-01-20

Post by clarenced on Multiple applications on one device sharing variables. CODESYS Forge talk (Post)
I am looking for an example of how to run 2 applications on 1 device that would have global variables shared between the two apps. In this case what I am trying to do is to have the main program logic run as one application and then have the visualization run as a second application. I find this https://us.store.codesys.com/media/n98_media_assets/files/000013-F/0/Multiple%20Applications_en.pdf, that talks about exactly what I want to do, but I can't find the download. The main reason I want to do this is for download speed. Right now it takes at least a minute to download our application to the PLC. A simple program downloads to the PLC in a very short time, but add visualization and the download time gets much longer. If I could download the program separately from the visualization I think that a simple program change would take very little time to download. I have tried create a GVL in the POUs view. This partly works in that both applications can see the GVL, but they each create their own instance of it and the variables are not shared between the two apps. There are ideas of using OPCUA but this raises problems with licensing and having to move any variable that needs to be shared into the Symbol Configuration. This adds a lot of management to keep this up to date. Any ideas would be appreciated thanks.
Last updated: 2025-02-20

<< < 1 .. 888 889 890 891 892 .. 898 > >> (Page 890 of 898)

Showing results of 22434

Sort by relevance or date