Search talk: 0

 
<< < 1 .. 3 4 5 6 7 .. 15 > >> (Page 5 of 15)

Post by c3po on Von SNMP auf IIoT wechseln CODESYS Forge talk (Post)
Keine Antwort? Schade Γ΄.0 Dann versuch ich es mal im englischen Teil...
Last updated: 2024-08-21

Post by olemart on Set REFERENCE to 0 (null) when no longer used CODESYS Forge talk (Post)
Did you find out if this work?
Last updated: 2024-10-02

Post by abuckie on Getting raw value as full resolution for ADS1115 CODESYS Forge talk (Post)
I just found this and I am getting a value larger than 16 bit, around 81000 something. I am reading a 5 volt value and I am using level shifters for the i2c bus. This is how I have the channel configured: ADS1115.usiAddress := 16#48; ADS1115.ChannelConfigs[0].Active := TRUE; ADS1115.ChannelConfigs[0].PGA := FSR_6144mV; ADS1115.ChannelConfigs[0].InputMux := Single_0; RawAnalogValue := ADS1115.Channels[0].Value; It looks like every value is a multiple of 3. Any idea where to look to fix this? I think i found what I want to change in UpdateChannels Channels[FChannelNo].Value := INT_TO_REAL(WORD_TO_INT(LValue) * GetFullScaleRange(ChannelConfigs[FChannelNo].PGA)) / 2048.0; I try to edit it but I can't, sorry if this is a basic question, I am new to CODESYS.
Last updated: 2025-05-22

Post by dkugler on Reading a negative number CODESYS Forge talk (Post)
why not simply converting data type UINT to INT? Then avoid negative values with ... := MAX(0 , intTest); Good luck!
Last updated: 2025-05-28

Post by timvh on control loop library IIR filter CODESYS Forge talk (Post)
In the Control Loop Library package are multiple example projects, including one for the filters. Program containing: GVL.filterIIR( xEnable:= GVL.xEnableFilter, lrValue:= GVL.lrYOriginal, lrFilteredValue=> GVL.lrOutputIIR); GVL.filterFIR( xEnable:= GVL.xEnableFilter, lrValue:= GVL.lrYOriginal, lrFilteredValue=> GVL.lrOutputFIR); GVL.filterSOS( xEnable:= GVL.xEnableFilter, lrValue:= GVL.lrYOriginal, lrFilteredValue=> GVL.lrOutputSOS); GVL containing aCoefficientsA_IIR : ARRAY[0.. 4] OF LREAL := [1,-2.3695130071820376,2.31398841441588,-1.0546654058785676,0.18737949236818494]; aCoefficientsB_IIR : ARRAY[0.. 4] OF LREAL := [0.0048243433577162282,0.019297373430864913,0.028946060146297369,0.019297373430864913,0.0048243433577162282]; filterIIR : Ctrl.Filter_IIR := (palrCoefficientsA:= ADR(GVL.aCoefficientsA_IIR), udiSizeCoefficientsA:= SIZEOF(GVL.aCoefficientsA_IIR), palrCoefficientsB:= ADR(GVL.aCoefficientsB_IIR), udiSizeCoefficientsB:= SIZEOF(GVL.aCoefficientsB_IIR)); aCoefficientsB_FIR : ARRAY[0.. 5] OF LREAL := [0.01982722552692669,0.1325131219866022,0.34765965248647102,0.34765965248647107,0.13251312198660226,0.019827225526926694]; filterFIR : Ctrl.Filter_FIR := (palrCoefficientsB:= ADR(GVL.aCoefficientsB_FIR), udiSizeCoefficientsB:= SIZEOF(GVL.aCoefficientsB_FIR)); aCoefficientMatrix_SOS : ARRAY[0.. 1] OF Ctrl.FilterCoefficients_SOS := [(b0:= 1, b1:= 2, b2:= 1, a0:= 1, a1:= -1.048599576362609, a2:= 0.2961403575616683), (b0:= 1, b1:= 2, b2:= 1, a0:= 1, a1:= -1.320913430819428, a2:= 0.6327387928852787)]; lrG : LREAL := 0.004824343357716228; filterSOS : Ctrl.Filter_SOS := (paCoefficientMatrix:= ADR(GVL.aCoefficientMatrix_SOS), udiSizeCoefficientMatrix:= SIZEOF(GVL.aCoefficientMatrix_SOS), lrGain:= GVL.lrG); lrX : LREAL; lrYOriginal : LREAL; lrOutputFIR : LREAL; lrOutputIIR : LREAL; lrOutputSOS : LREAL; xEnableFilter : BOOL := TRUE;
Last updated: 2025-08-01

Post by gseidel on Using an Axis of an Axis Group in Torque Conctrol CODESYS Forge talk (Post)
Hi manuknecht, the axis group currently always writes the axis set torque values. If no dynamic model has been configured for the axis group, then the set torques are written to 0. The solution for your use case is to call SMC_GroupUpdate [0] before you call SMC_SetTorque on the axes. This way, the axis group will write 0 to the set torques in the call to SMC_GroupUpdate(), and SMC_SetTorque then will write the desired set torque. Best regards, Georg [0] https://content.helpme-codesys.com/en/libs/SM3_Robotics/Current/SM3_Robotics/POUs/AdministrativeConfiguration/Computation/SMC_GroupUpdate.html
Last updated: 2025-09-09

Post by saugat10 on Problem installing Multicore codesys control in raspberry pi 4 CODESYS Forge talk (Post)
I found the solution. I had to add the following line in /boot/config.txt file arm_64bit = 0
Last updated: 2024-02-07

Post by struccc on Release SP20 - Changes in behaviour? CODESYS Forge talk (Post)
Dear all, I've just started to migrate some of my ancient projects to SP20. There is one strange error (?) I have noticed so far. In a method call, depending on the circumstances I would like to return reference to an object, or an invalid reference: METHOD Add_EVT_OUT : REFERENCE TO FB_MSG VAR END_VAR IF __ISVALIDREF(refMSG_Entry) THEN Add_EVT_OUT REF= MANAGER.AddMsg_EVT_OUT( refMSG_Entry, _Get_EVT_Message(MSG_EVENT.OUT), _Get_EVT_AddCode(MSG_EVENT.OUT) )^; ELSE Add_EVT_OUT := 0; END_IF So far setting a reference variable to 0, did this. But now, the expression Add_EVT_OUT := 0; gives an error: [ERROR] DB_WTP_370: Add_EVT_ACK MSG_TRIGGER_EXT: C0032: Cannot convert type 'BIT' to type 'REFERENCE TO FB_MSG' Naturally... I can write: Add_EVT_OUT := DWORD#0; But is this the correct way? Is there any constant I could use instead, like "NULL"? Or this is totally wrong and to be avoided?
Last updated: 2024-03-24

Post by eschwellinger on Login problem with FileTransfer on Raspberry Pi 5 CODESYS Forge talk (Post)
maybe to add [CmpWebServerHandlerV3] CallVisuServicesDirectly=0 would help
Last updated: 2024-04-28

Post by k2saki on Table How to set row number from 1 ( not from 0) CODESYS Forge talk (Post)
Thanks ! That worked fine !
Last updated: 2024-06-03

Post by msegon on OPC UA Client failed to connect CODESYS Forge talk (Post)
Hi everyone, I would appreciate your help with a problem I've been working on for a few days but haven't been able to resolve. I'm trying to read data from Tridium Niagara 4.15 OPC UA Server, but I get the error BadCertificateInvalid. As far as I understand, you need to add a CA certificate somewhere to establish a secure connection, but I don't know where. 2025-10-27T09:06:43.247Z, 0x0000008d, 4, 0, 0, * ERROR: OpcUa_Channel_BeginConnect: Cannot create secure channel without certificates! 2025-10-27T09:06:43.247Z, 0x00001090, 4, 0, 0, * ERROR: Datasource: Error Failed (268468242) in state Connecting I tried communicating without encryption, but it doesn't find the point. Has anyone managed to establish encrypted OPC UA communication?
Last updated: 2025-10-28

Post by alexmserra on CAN and CANopen on Raspberry PI - steps or tutorial? CODESYS Forge talk (Post)
Good afternoon, how does the CANbus configuration look in Codesys, for example, network 0?
Last updated: 2025-12-09

Post by timvh on Converting each character to a string into ASCII CODESYS Forge talk (Post)
Nice puzzle for a Saturday afternoon :-). Here my suggestion: VAR sInput : STRING := 'R123'; byChar : BYTE; sOutput : STRING; i: INT; END_VAR sOutput := ''; IF LEN(sInput) = 0 THEN RETURN; END_IF FOR i := 0 TO LEN(sInput) - 1 DO byChar := sInput[i]; sOutput := Concat(sOutput, TO_STRING(byChar)); END_FOR
Last updated: 2024-11-09

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

Post by fabiodasilveira on PLC Shell commands via ST Code CODESYS Forge talk (Post)
Thank you, Bingo. I have added the instructions below to the CODESYSControl.cfg file, but they haven't changed anything. [SysSocket] Adapter.0.Name="ETH0" Adapter.0.EnableSetIpAndMask=1 Adapter.1.Name="ETH1" Adapter.1.EnableSetIpAndMask=1 Regarding your second suggestion, could you please expand a bit on that?
Last updated: 2025-03-03

Post by eaglealex on Length of string and Array of bytes CODESYS Forge talk (Post)
Thank you for your answer! I know that 0 will be the end of the string. I checked it. There is no 0 in array of bytes. I made screenshots. There is array of bytes, aborted string and the result of my test via online converter.
Last updated: 2025-04-02

Post by timvh on Reading multiple lines from csv file CODESYS Forge talk (Post)
Not sure, but maybe before you enter step 5, set i, lineindex and charIndex to 0. And the buffer variable should have a size bigger than 1 line. Additionally I think you should set bufferstart to 0 before you enter step 5. And in the OSCAT function you always point to the buffer address, but shouldn't this be (buffer + bufferstart)?
Last updated: 2025-07-23

Post by rajatdas2005 on Codesys Virtual control SL CODESYS Forge talk (Post)
Dear All, This is regarding Codesys Virtual control SL demo version. I am facing one issue. First I will describe the steps what I have followed till now. 1. In a PC I have Windows OS. Here Codesys IDE is installed, and also using the installer option of IDE I have also installed Codesys Virtual control SL. 2. A edge-gateway is also running in the same windows PC as local host. 3. Next I have a seperate PC with Ubuntu OS with docker installed. This machine is in the same network. 4. Now I have created a project in Windows machine using device "Codesys Virtual control SL". 5. In the Ubuntu machine I am running the Codesys Virtual control SL as docker and it is using the ubuntu machine network only. 6. Next using the localhost edge-gateway when I am searching the virtual control SL docker it is able to detect it. (screenshot attached) 7. But after creating the creadentials it is telling No Device is responding. 8. I have also checked the wireshark logs and able to see that in destination port 11740 data is coming. 9. From windows PC telnet ip 11740 is also working. 10. Ping is also working ===========================================LOGS ========================= sudo ss -tlnp | grep -E "(443|1217|4840|8080|11740)" LISTEN 0 10 10.135.114.142:4840 0.0.0.0: users:(("codesyscontrol.",pid=41864,fd=21)) LISTEN 0 10 172.18.0.1:4840 0.0.0.0: users:(("codesyscontrol.",pid=41864,fd=24)) LISTEN 0 10 172.17.0.1:4840 0.0.0.0: users:(("codesyscontrol.",pid=41864,fd=23)) LISTEN 0 10 127.0.0.1:4840 0.0.0.0: users:(("codesyscontrol.",pid=41864,fd=26)) LISTEN 0 10 192.168.122.1:4840 0.0.0.0: users:(("codesyscontrol.",pid=41864,fd=22)) LISTEN 0 5 0.0.0.0:11740 0.0.0.0: users:(("codesyscontrol.",pid=41864,fd=20)) LISTEN 0 128 0.0.0.0:8080 0.0.0.0: users:(("python3",pid=1280,fd=4)) LISTEN 0 10 172.19.0.1:4840 0.0.0.0: users:(("codesyscontrol.",pid=41864,fd=25))
Last updated: 2025-08-06

Post by gseidel on Cam Blending CODESYS Forge talk (Post)
Hi ustad41, cams can be buffered using the BufferMode input of MC_CamIn. If the end- and start-velocity of two buffered cams are not zero, there will be no stop. Not sure this answers your question. Cams can be changes on the fly by aborting the active cam. Please see [0] for details on switching cams. [0] https://content.helpme-codesys.com/en/CODESYS%20SoftMotion/_sm_cam_switch_between_cams.html Best regards, Georg
Last updated: 2025-09-08

Post by hfelek on *SOURCEPOSITION* App = [Application] area=0, offset = 0 on default example CODESYS Forge talk (Post)
Hello, I am trying to run CmpTemplate component provided by Codesys for version 3.5.17. I call MyExternalFunction from the component but I get error as shown below. I see component is loaded successfully on runtime logs. I feel like I am missing something basically.
Last updated: 2024-01-15

Post by timvh on Active alarm access in ST CODESYS Forge talk (Post)
See https://forge.codesys.com/forge/talk/Engineering/thread/280fdf4806/#9fe5 And https://forge.codesys.com/prj/codesys-example/alarm-manager/home/Home/ The application should contain: - an FB which implements AlarmManager.IAlarmFilterCriteria (see example - FB_AlarmFilterCriteria) - an FB which implements AlarmManager.IAlarmManagerClient (see example - FB_AlarmManagerClient) Then register the client and get the information through this client. VAR xInit : BOOL := TRUE; udiResult : UDINT; fbAlarmFilterCriteriaAll : FB_AlarmFilterCriteria; fbAlarmManagerClientAll : FB_AlarmManagerClient; itfAlarmManagerClientAll : IAlarmManagerClient := fbAlarmManagerClientAll; xAlarm1 : BOOL; xAlarm2 : BOOL; xWarning : BOOL; iNrOfAlarmsInAlarmList : INT; iNrOfActiveAlarmsInAlarmList : INT; paitfAlarm: POINTER TO ARRAY [0..0] OF AlarmManager.IAlarm; iAlarmIndex : INT; eAlarmState: AlarmManager.AlarmState; END_VAR IF xInit THEN xInit := FALSE; fbAlarmManagerClientAll.m_itfAlarmFilterCriteria := fbAlarmFilterCriteriaAll; // register alarm client to get updated about alarm status / changes udiResult := AlarmManager.g_AlarmHandler.RegisterClient(itfAlarmManagerClientAll, 0, 0); END_IF // Polling the number of alarms udiResult := AlarmManager.g_AlarmHandler.GetActiveAlarms(itfAlarmManagerClientAll, parritfActiveAlarms => paitfAlarm, iCountActiveAlarms => iNrOfAlarmsInAlarmList); iAlarmIndex := 0; iNrOfActiveAlarmsInAlarmList := 0; WHILE iAlarmIndex < iNrOfAlarmsInAlarmList DO eAlarmState := paitfAlarm^[iAlarmIndex].GetState(); IF eAlarmState = AlarmManager.AlarmState.Active OR eAlarmState = AlarmManager.AlarmState.ActiveAcknowledged THEN iNrOfActiveAlarmsInAlarmList := iNrOfActiveAlarmsInAlarmList + 1; END_IF iAlarmIndex := iAlarmIndex + 1; END_WHILE
Last updated: 2025-04-23

Post by timvh on Get Alarm status in Codesys CODESYS Forge talk (Post)
You are right, that you can use the GetState method, but it is not that simple. You first have to get a list of (filtered) alarms from the AlarmManager. You can find an example in Forge how to do this. See https://forge.codesys.com/prj/codesys-example/alarm-manager/home/Home/ Then you can go through this list to get the state of all the (filtered) alarms. See below the code which you could use. This is all based on the example from forge. Create a program: // This example shows how to access alarms via structured text. PROGRAM PLC_PRG VAR xInit : BOOL := TRUE; udiResult : UDINT; fbAlarmFilterCriteriaAll : FB_AlarmFilterCriteriaAll; fbAlarmManagerClient : FB_AlarmManagerClient; itfAlarmManagerClient : IAlarmManagerClient := fbAlarmManagerClient; xAlarm1 : BOOL; xAlarm2 : BOOL; xWarning : BOOL; iNrOfAlarmsInAlarmList : INT; iNrOfActiveAlarmsInAlarmList : INT; paitfAlarm: POINTER TO ARRAY [0..0] OF AlarmManager.IAlarm; iAlarmIndex : INT; eAlarmState: AlarmManager.AlarmState; END_VAR IF xInit THEN xInit := FALSE; fbAlarmManagerClient.itfAlarmFilterCriteria := fbAlarmFilterCriteriaAll; // register alarm client to get updated about alarm status / changes udiResult := AlarmManager.g_AlarmHandler.RegisterClient(itfAlarmManagerClient, 0, 0); END_IF // Polling the number of alarms udiResult := AlarmManager.g_AlarmHandler.GetActiveAlarms(itfAlarmManagerClient, parritfActiveAlarms => paitfAlarm, iCountActiveAlarms => iNrOfAlarmsInAlarmList); iAlarmIndex := 0; iNrOfActiveAlarmsInAlarmList := 0; WHILE iAlarmIndex < iNrOfAlarmsInAlarmList DO eAlarmState := paitfAlarm^[iAlarmIndex].GetState(); IF eAlarmState = AlarmManager.AlarmState.Active OR eAlarmState = AlarmManager.AlarmState.ActiveAcknowledged THEN iNrOfActiveAlarmsInAlarmList := iNrOfActiveAlarmsInAlarmList + 1; END_IF iAlarmIndex := iAlarmIndex + 1; END_WHILE See below some details about the function blocks: One function block should implement the IAlarmFilterCriteria interface. This can be empty except a few methods. FUNCTION_BLOCK FB_AlarmFilterCriteriaAll IMPLEMENTS AlarmManager.IAlarmFilterCriteria Method implementation (others related to interface are empty) METHOD AreAllAlarmClassesSelected : BOOL AreAllAlarmClassesSelected := TRUE; METHOD AreAllAlarmGroupsSelected : BOOL AreAllAlarmGroupsSelected := TRUE; METHOD GetPriorityFrom : USINT GetPriorityFrom := 0; METHOD GetPriorityTo : USINT GetPriorityTo := 255; The other function block should implement IAlarmManagerClient and get a reference to the FB which implements the IAlarmFilterCriteria FUNCTION_BLOCK FB_AlarmManagerClient IMPLEMENTS AlarmManager.IAlarmManagerClient VAR_INPUT itfAlarmFilterCriteria: AlarmManager.IAlarmFilterCriteria; END_VAR Method implementation (others related to the interface are empty) METHOD GetFilterCriteria : AlarmManager.IAlarmFilterCriteria // see VAR_INPUT for filter GetFilterCriteria := itfAlarmFilterCriteria; Off course you have to add the AlarmManager to your application and add some alarms to it.
Last updated: 2025-09-02

Post by jzhvymetal77 on IecVarAccessLibrary.IBaseTreeNode methon CODESYS Forge talk (Post)
I had this code working in a previous version of CoDeSys to read variables from a GVL that were added to the Symbol configuration. The problem now is that when I get the _IBaseTreeNode_Parent, it returns a valid interface, but none of the methods or properties work. If you monitor the _IBaseTreeNode in the watch window, it does show the correct child count. However, it fails at step 30, where the child count incorrectly returns zero. In the image, you can see that the watch window displays the correct value that the property should return. Attached is the full project code. FUNCTION_BLOCK Symbols_TO_STR VAR_INPUT i_sPath : STRING(255); i_diIndexChild : DINT; i_diIndexComponent : DINT; END_VAR VAR_OUTPUT q_diChildCount : DINT; q_diComponentCount : DINT; q_sName : STRING(255); q_sValue : STRING(255); q_sType : STRING(80); q_sErrorResult : STRING(80); END_VAR VAR uiStepCopy : UINT; uiStep : UINT; uiStepProcessCopy : UINT; uiStepProcess : UINT; _IBase : IecVarAccessLibrary.IBase; _pIIecVarAccess5 : POINTER TO IecVarAccessLibrary.IIecVarAccess5; _IIecVarAccess5 : IecVarAccessLibrary.IIecVarAccess5; _RTS_IEC_RESULT : IecVarAccessLibrary.RTS_IEC_RESULT; _udiResult : UDINT; _VariableInformationStruct : IecVarAccessLibrary.VariableInformationStruct; _IBaseTreeNode_Parent : IecVarAccessLibrary.IBaseTreeNode; _IBaseTreeNode_Child : IecVarAccessLibrary.IBaseTreeNode; _ITypeDesc_Child : IecVarAccessLibrary.ITypeDesc; _TypeDescAsUnion_Child : IecVarAccessLibrary.TypeDescAsUnion; _arIBaseTreeNode_Child : ARRAY[0..20] OF IecVarAccessLibrary.IBaseTreeNode; _TypeClass_Child : IecVarAccessLibrary.IBaseLibrary.TypeClass; _psSymbolName_Child : POINTER TO STRING; _sSymbolName_Child : STRING(255); _IBaseTreeNode_Component : REFERENCE TO IecVarAccessLibrary.IBaseTreeNode; _TypeClass_Component : IecVarAccessLibrary.IBaseLibrary.TypeClass; _ByteAddress_Component : __XWORD; _ByteOffset_Component : __XWORD; _sArrayIndexName_Component : STRING(20); _diArrayIndexCalc_Component : DINT; _diArrayIndexValue_Component: DINT; _psSymbolName_Component : POINTER TO STRING; _sSymbolName_Component : STRING(255); END_VAR uiStepCopy:=uiStep; uiStepProcessCopy:=uiStepProcess; CASE uiStep OF 10: // GET IBASE FROM CURRENT APP _IBase:= IecVarAccessLibrary.IecVarAccGetFirstInterface2(0); IF _IBase<>0 THEN uiStep:=20; ELSE q_sErrorResult:=CONCAT(UINT_TO_STRING(uiStep), ': IecVarAccGetFirstInterface2'); uiStep:=9000; END_IF 20: //QueryInterface IIecVarAccess5 from IBASE _pIIecVarAccess5 := _IBase.QueryInterface(IecVarAccessLibrary.ITFID_IIecVarAccess5, ADR(_RTS_IEC_RESULT)); IF _pIIecVarAccess5<>0 AND _RTS_IEC_RESULT=0 THEN _IIecVarAccess5 := _pIIecVarAccess5^; uiStep:=30; ELSE q_sErrorResult:=CONCAT(UINT_TO_STRING(uiStep), ': QueryInterface_IIecVarAccess5'); uiStep:=9000; END_IF 30: // Get IBaseTreeNode_Parent _IBaseTreeNode_Parent := _IIecVarAccess5.VarAccGetNode3(ADR(i_sPath), ADR(_VariableInformationStruct), ADR(_RTS_IEC_RESULT)); IF _IBaseTreeNode_Parent<>0 AND _RTS_IEC_RESULT=0 THEN q_diChildCount:=_IBaseTreeNode_Parent.ChildCount; uiStep:=40; ELSE q_sErrorResult:=CONCAT(UINT_TO_STRING(uiStep), ': IBaseTreeNode_Parent'); uiStep:=9000; END_IF 40: // Get IBaseTreeNod_Child IF(q_diChildCount-1>=i_diIndexChild AND i_diIndexChild >=0) THEN _IBaseTreeNode_Child := _IBaseTreeNode_Parent.GetChild(i_diIndexChild); IF _IBaseTreeNode_Child<>0 THEN uiStep:=50; ELSE q_sErrorResult:=CONCAT(UINT_TO_STRING(uiStep), ': IBaseTreeNode_Parent'); uiStep:=9000; END_IF ELSE q_sErrorResult:=CONCAT(UINT_TO_STRING(uiStep), ': i_diIndexChild OutBounds'); uiStep:=9000; END_IF
Last updated: 2025-08-20

Post by timvh on Device diagnosis ( EtherCAT IO card ) CODESYS Forge talk (Post)
You can get the state by just using the name of your node (same name as in device tree): VAR etcState: IoDrvEthercatDriverLib.ETC_SLAVE_STATE; END_VAR etcState := EJ1100.wState; Alternatively, you can iterate through the device tree to get the status of all (Ethercat) nodes. See here an example (no guarantee it works, just give as suggestion): PROGRAM P_IO_State VAR CONSTANT uiMAX_NR_OF_TERMINALS : UINT := 100; END_VAR VAR // general device diagnosis // can only be used when the Device - PLC Settings - Advanced settings - enable diagnosis for devices is enabled // this will add the DED library coupler: DED.INode; terminal: DED.INode; aDeviceState: ARRAY[0..uiMAX_NR_OF_TERMINALS - 1] OF DED.DEVICE_STATE; uiTerminalCount : UINT; uiIndex : UINT; // for each terminal check if it implements device diagnostics xQueryResult: BOOL; itfDevice : DED.IDevice2; xDiagAvailable: BOOL; eError: DED.ERROR; xEverythingOK: BOOL; END_VAR uiTerminalCount := 0; // start at the top of the device tree with the first EtherCAT coupler coupler := EtherCAT_Master.FirstChildNode; WHILE coupler <> 0 DO // for each coupler that is found start at the first terminal terminal := coupler.FirstChildNode; WHILE terminal <> 0 AND uiTerminalCount < uiMAX_NR_OF_TERMINALS - 1 DO // for each terminal that is found get the status through the device diagnosis interface xQueryResult := __QUERYINTERFACE(terminal, itfDevice); IF xQueryResult THEN aDeviceState[uiTerminalCount] := itfDevice.GetDeviceState(xDiagnosisInfoAvailable => xDiagAvailable, eError => eError); uiTerminalCount := uiTerminalCount + 1; END_IF terminal := terminal.NextSiblingNode; END_WHILE coupler := coupler.NextSiblingNode; END_WHILE uiIndex := 0; xEverythingOK := TRUE; WHILE uiIndex < uiTerminalCount DO IF aDeviceState[uiIndex] <> DED.DEVICE_STATE.RUNNING THEN xEverythingOK := FALSE; EXIT; END_IF uiIndex := uiIndex + 1; END_WHILE
Last updated: 2025-02-06

Post by jy77812 on MC_MoveCircularAbsolute Using Help CODESYS Forge talk (Post)
Dear People I’m trying to draw a circle using MC_MoveCircularAbsolute, but I keep encountering an error. The error message is SMC_CP_CIRCLE_CENTER_NOT_ON_BISECTOR. What I’m trying to do is simply draw a circle with a diameter of 20, starting from the point X=0, Y=0. I’ve set CircMode to center. It seems like a simple task, but the error keeps occurring, and it’s giving me a headache. I’d appreciate your help. I’ve also attached the program, so please provide any advice you can. I want to use the mode as the center. I've tried changing multiple coordinates and it won't run. Please help. sample stCirculAuxPoint.c.X := 20; stCirculAuxPoint.c.Y := 10; stCirculEndPoint.c.X := 20; stCirculEndPoint.c.Y := 30; fbMoveCircularAbsolute( AxisGroup := AxisGroup, Execute := xGroupCirculEx, CircMode := SMC_CIRC_MODE.CENTER, AuxPoint := stCirculAuxPoint, EndPoint := stCirculEndPoint, PathChoice := 0, Velocity := 50, Acceleration := 50, Deceleration := 50, Jerk := 50, CoordSystem := SMC_COORD_SYSTEM.MCS, BufferMode := 0, TransitionMode := 0, TransitionParameter := , OrientationMode := , VelFactor := , AccFactor := , JerkFactor := , TorqueFactor := , Name := , Done => , Busy => , Active => , CommandAborted => , CommandAccepted => , Error => , ErrorID => , MovementId => );
Last updated: 2025-06-04

<< < 1 .. 3 4 5 6 7 .. 15 > >> (Page 5 of 15)

Showing results of 375

Sort by relevance or date