Post by imdatatas on MC_CamIn did not work properly with SMC_FreeEncoder on SoftMotion 4.17.0.0
CODESYS Forge
talk
(Post)
Hello, I am facing a problem with the new Softmotion 4.17.0.0 version. Has anyone encountered a similar problem, what is the solution? I would be happy if you could share it. Problem description: -- "SMC_FreeEncoder" encoder axis is the master, -- The motor of the servo driver on the EtherCAT bus is the slave axis. -- When the MC_CamIn block executed, the InSync output is activated. However, although the master encoder axis position value changes, there is no movement in the slave servo axis! Test steps: 1-) EtherCAT servo axis installed, configured and motion test was performed with MC_Jog. No problem. 2-) Softmotion general axis pool > SMC_FreeEncoder was added and pulse amount configuration was performed. No problem. 3-) Incremental encoder actual count value was transferred to the "SMC_FreeEncoder.diEncoderPosition" variable as DINT under the ethercat task in every cycle and the encoder axis position value was observed. No problem. 4-) A simple CAM table with a 1:1 ratio was created under the project tree. (For example: Simply, when the encoder rotates 1 turn, the motor will rotate 1 turn.) 5-) The SMC_FreeEncoder axis enabled with MC_Power and brought to the StandStill state. 6-) The MC_CamTableSelect block was run with default input values ​​(all absolute) and only the Cam table name was specified. The Done output was seen successfully. No problem. 7-) The MC_CamIn block was activated with default input values ​​(absolute) and only the master encoder axis name, slave servo axis name, CamTableID input pins was specified and then "Execute" input set to TRUE. 8-) The InSync output information of the MC_CamIn block observed as TRUE. However, although the encoder axis value changed, the position value of the slave axis did not change at all, it did not move. It always remained at 0.0mm. 9-) When I repeated the same steps above, only changing the master axis to SM_Drive_Virtual instead of FreeEncoder and gave movement to the virtual axis, this time the slave axis moved successfully. However, when the same steps and operations are performed with the same IDE just downgrade SoftMotion version from 4.17.0.0 to 4.10.0.0, everything works normally and without problems as expected in MC_CamIn block with FreeEncoder master. (By the way, The used IDE version is Codesys V3.5 SP20patch3.) Best Regards Imdat
Last updated: 2024-11-11
Post by simotion on Variable indicating axis pending gearing or camming
CODESYS Forge
talk
(Post)
Is there a variable indicating that a gearing or camming operation is pending? For instance MC_Gearin has beeen triggered, but starting point of master axis to start the sychronisation movement is not reached yet, so the slave axis is just waiting for this. I should be able to differ between a pending and active gearing or camming
Last updated: 2023-11-28
Post by docker on Webvisu client connection monitoring
CODESYS Forge
talk
(Post)
Hi, i am interested in this thread and have tried a couple of the above examples in to determine remote webvisu access. I am having trouble getting the lastusage variable to refresh during runtime? It seems to only log the last usage at initialisation and that is it? how do i gain ongoing access to the time variable as the code is running? Thankyou.
Last updated: 2024-08-26
Global variable access by Programms and Modbus Devices (attach device to bus)
CODESYS Forge
talk
(Thread)
Global variable access by Programms and Modbus Devices (attach device to bus)
Last updated: 2024-07-18
How to manage variable types larger than 64 bits - Ethernet/IP
CODESYS Forge
talk
(Thread)
How to manage variable types larger than 64 bits - Ethernet/IP
Last updated: 2024-09-23
Making a Visu Element normally invisible and visible if variable is true
CODESYS Forge
talk
(Thread)
Making a Visu Element normally invisible and visible if variable is true
Last updated: 2025-06-06
one variable signed to modbus tcp server device and modbus serial device
CODESYS Forge
talk
(Thread)
one variable signed to modbus tcp server device and modbus serial device
Last updated: 2025-07-17
Persistent Retain Variable in Codesys - After download and restart the Device undiscoverable
CODESYS Forge
talk
(Thread)
Persistent Retain Variable in Codesys - After download and restart the Device undiscoverable
Last updated: 2022-11-22
Can't add 0.0x to an real variable with no larger than 1048576 ?????
CODESYS Forge
talk
(Thread)
Can't add 0.0x to an real variable with no larger than 1048576 ?????
Last updated: 2018-10-08
Showing nothing instead the %f in case another variable is empty
CODESYS Forge
talk
(Thread)
Showing nothing instead the %f in case another variable is empty
Last updated: 2022-05-19
Could I change the Visualization page showed by changing a variable?
CODESYS Forge
talk
(Thread)
Could I change the Visualization page showed by changing a variable?
Last updated: 2022-04-04
how to switch language by a variable NOT by mouse event?
CODESYS Forge
talk
(Thread)
how to switch language by a variable NOT by mouse event?
Last updated: 2012-11-25
How to get the clock on the computer to be variable in my pr
CODESYS Forge
talk
(Thread)
How to get the clock on the computer to be variable in my pr
Last updated: 2010-12-08
Problems with multiple variable names when connecting to Simumatik through OPCUA (ControlWin3)
CODESYS Forge
talk
(Thread)
Problems with multiple variable names when connecting to Simumatik through OPCUA (ControlWin3)
Last updated: 2021-05-04
Maximizing Struct type Variable in offline mode and adding comments to each element
CODESYS Forge
talk
(Thread)
Maximizing Struct type Variable in offline mode and adding comments to each element
Last updated: 2021-04-28
Visualization - writing to an array using a variable for the index
CODESYS Forge
talk
(Thread)
Visualization - writing to an array using a variable for the index
Last updated: 2019-01-18
How to change the variable in the structure after the point mark?
CODESYS Forge
talk
(Thread)
How to change the variable in the structure after the point mark?
Last updated: 2021-02-19
Wie kann ich einen Pointer to ULINT in eine variable Struktur verwandeln?
CODESYS Forge
talk
(Thread)
Wie kann ich einen Pointer to ULINT in eine variable Struktur verwandeln?
Last updated: 2021-11-23
Histogramm: Alarmwert mit Variable definieren (..." ist kein gültiger Wert für Single")
CODESYS Forge
talk
(Thread)
Histogramm: Alarmwert mit Variable definieren (..." ist kein gültiger Wert für Single")
Last updated: 2018-10-03
How to use __VARINFO within a function block to obtain the origin variable name?
CODESYS Forge
talk
(Thread)
How to use __VARINFO within a function block to obtain the origin variable name?
Last updated: 2022-03-15
Runtime variable that indicates a user is online to the code
CODESYS Forge
talk
(Thread)
Runtime variable that indicates a user is online to the code
Last updated: 2024-04-22
Post by aris-k on Pack TWO INT variable to one DINT variable
CODESYS Forge
talk
(Post)
You can try this setup: DINTVar := SHL(INT_TO_DINT (Low_Word_INT_Var),16) + INT_TO_DINT(High_Word_INT_Var);
Last updated: 2024-05-07
Post by trusty-squire on How can you get the active frame index from a frame
CODESYS Forge
talk
(Post)
If you are switching a frame based on the "Switch Frame Variable", then just use a variable that is accessible to your program to set your active frame. If you're trying to see which is the active visualization, then use the "CurrentVisu" variable. Note you'll need to enable this by checking it on in the Visualization Manager settings. If it's neither of those, you'll need to be more clear on how you're project is set up.
Last updated: 2025-03-11
Post by alessandro on SysMemCmp SysMemCpy
CODESYS Forge
talk
(Post)
VAR Data1:ARRAY[1..10] OF SINT ; Data2:ARRAY[1..10] OF SINT ; Data3:ARRAY[1..10] OF SINT ; Data4:ARRAY[1..10] OF SINT ; ex_1 : BOOL ; ex_2 : BOOL ; enable : BOOL :=0 ; END_VAR // PROGRAM // The scope of this example is compare and copy the values of two ARRAY only if some value is different using SysMemCmp and SysMemCpy. // In this 2 example we don't use a FOR cicle for do this, and pBuffer1 and pBuffer2 is just a pointer to ARRAY. See details in Library util.SysMem of Codesys // The compare funcion util.SysMem.SysMemCmp is bidirectional if Data1 chanege respect Data2 ex_1 go to 1 and if Data2 change respect Data1 also // but the copy function util.SysMem.SysMemCpy work only from source ARRAY pSrc:=ADR(Data1) to destination ARRAY pDest:=ADR(Data2) // Example 1 Full ARRAY compare and copy // This compare 2 different equal ARRAY and if there is some difference ex_1 go to 1 and if you give enable he copy Data1 in Data2 ex_1 := TO_BOOL(util.SysMem.SysMemCmp(pBuffer1:=ADR(Data1), pBuffer2:=ADR(Data2), udiCount:=SIZEOF(Data1))); IF ex_1 AND enable THEN util.SysMem.SysMemCpy(pDest:=ADR(Data2), pSrc:=ADR(Data1), udiCount:=SIZEOF(Data1)); END_IF // Example 2 Only selected area of the ARRAY compare and copy // This compare 2 different equal ARRAY starting from position number [3] for 4 byte in this case start at position [3] and finish at position number [6] // and if there is some difference only in area [3..6] of the ARRAY ex_2 go to 1 if you give enalbe he copy Data3[3..6] in Data4[3..6] // if something change in other array position[0..2] or [7..10] are ingnored ex_2 := TO_BOOL(util.SysMem.SysMemCmp(pBuffer1:=ADR(Data3[3]), pBuffer2:=ADR(Data4[3]), udiCount:=4)); IF ex_2 AND enable THEN util.SysMem.SysMemCpy(pDest:=ADR(Data4[3]), pSrc:=ADR(Data3[3]), udiCount:=4); END_IF // Attention udiCount input is intended in <byte> in the example 1 I pass to udiCount:=SIZEOF(Data1) for compare and copy the intere ARRAY and // SIZEOF pass the size of intere ARRAY in byte to the function input, in this 2 examples I used variable type SINT each one occupie 1 byte and one position in the ARRAY // and in the example 2 I pass udiCount:=4 for compare and copy only 4 position of Data3/4[3..6] if you want to extend this example and use it for an ARRAY OF WORD // remember that each WORD will occupe 2 byte (16 bit) and you will have to pass udiCount:=SIZEOF(Data1) if you need to compare intere ARRAY example 1 // but need udiCount:=(42) for the example 2 because need to compare and copy 4 word each occupie 2 byte (16 bit). // For REAL (32 bit) need udiCount:=SIZEOF(44) for LREAL or (64 bit) need udiCount:=SIZEOF(416) // a good rule is calculate the dimension of the ARRAY in byte without empty space at the end, multiple of data type number for variable bigger then 8 bit // Example : If you want to create an ARRAY for 5 REAL (32 bit) each occupie 4 byte the correct size is ARRAY[0..19] OF REAL 54=20 position. // NOTE : In the example the position of compare function util.SysMem.SysMemCmp is first and the copy function util.SysMem.SysMemCpy inside the IF is after // in one cycle of the program the two array is compared and if there is some difference and enable are copied. // If you move util.SysMem.SysMemCmp after the IF cycle he will copare the ARRAY in the current cycle but the copy of the value will do in the next cycle.</byte>
Last updated: 2025-10-24
Post by durallymax on Help understanding analog in-/outputs
CODESYS Forge
talk
(Post)
WAGO will use 0-32767 as the raw units. Note a value of 3 means over/under range. Map that IO however you please, then scale in your program using any of the available libraries or with your own simple y=mx+b scaling formula to get to the engineering units you desire. Inverse for the AO to get back to 0-32767.
Last updated: 2024-12-15
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.