Search the Community

Showing results for tags 'twincat3'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Found 7 results

  1. Hi all, New to the forum. I've been pretty much able to do the things I wanted with Beckhoff, but now I'm finally running into a problem I can't seem to solve alone. I'm trying to set-up Modbus RTU RS485 communication in Twincat3, using an EL6021. I've implemented a sample program from the Beckhoff website, but can't get it to work. I've got the feeling I need to properly set up the EL6021 but most information on the Beckhoff website is about the KL-series IO. Does anybody have experience with this? The strange thing is that, when I enable the function to read some slave's registers, BUSY is set and remains set. No timeout is triggered. I don't have a slave connected yet but I would at least expect to see something on the output of the terminal, and then a timeout. I've bridged TxD+ and RxD+, and TxD- and RxD- and set 8000:06 of the EL6021 TRUE, half duplex mode enabled). A scope connected to TxD+ and TxD- shows nothing. Code added below. I've added a GVL called 'Variable_Configuration' with the following: VAR_CONFIG     Main.MB.InData AT %IB0 : MB_KL6inData5B;     Main.MB.OutData AT %QB0 : MB_KL6outData5B; END_VAR And then the MAIN: PROGRAM MAIN VAR     bIoSyncMaster AT %I* : BOOL;     MB : ModbusRTUmaster_KL6x5B;     MBLedDriver : ARRAY[1..10] OF WORD;     tmpExecute : BOOL;     bError : BOOL;     bBusy : BOOL;     iErrorId: MODBUS_ERRORS;     iNoDatByteRead: UINT;     count: INT;     freebyte: INT;     TxError: INT;     TxBlocked: BOOL; END_VAR MB(     UnitID:= 41,     Quantity:= 4,     MBAddr:= 16#0020,     cbLength:= SIZEOF(MBLedDriver),     pMemoryAddr:= ADR(MBLedDriver),     Execute:= tmpExecute,     Timeout:= T#5S ,     BUSY=> bBusy,     Error=> bError,     ErrorId=> iErrorId,     cbRead=> iNoDatByteRead);      MB.ReadRegs(); count := MB.MBMaster.com.Buffer.Tx.count; freebyte := MB.MBMaster.com.Buffer.Tx.FreeByte; TxError := MB.MBMaster.com.Buffer.Tx.Error; TxBlocked := MB.MBMaster.com.Buffer.Tx.Blocked; tmpExecute:=FALSE;    
  2. RS485 with CX7080

    Hello i'm newbie. I have a problem with RS485 on CX7080. Busy always True and data=0. I don't know the reason. Please help me! Thank you!
  3. I am trying to create a simple `Hello World` Modbus TCP/IP program using Twincat3 and virtual PLC (PLC running locally on my computer).   I have set up a LabVIEW Modbus TCP/IP master + slave program (both of which are working see screenshots below).  I can send data between LabVIEW's master and slave programs. And also read the data from Python script (so I know for sure they are all working).  Now I have tried to create a Twincat3 program to set some registers using Beckhoff example What I have tried:  - I have tried changing the ipAddr parameter to: 'localhost', '192.168.88.1', '192.168.88.126'  - Also I have tried the nUnitID set to: 0, 1, 16#FF (16#FF as specified by Beckhoff docs) This is my Beckhoff code:     PROGRAM MAIN     VAR         ipAddr         : STRING(15) := '192.168.88.1'; //Tried also 192.168.88.126 and 192.168.88.1 'localhost'         M0 AT %MB0     : ARRAY [0..3] OF WORD;         nValue         : ARRAY [0..3] OF WORD;         fbWriteRegs : FB_MBWriteRegs;         bWriteRegs     : BOOL;     END_VAR           IF NOT bWriteRegs THEN         nValue[0]                := nValue[0]+1;         nValue[1]                := nValue[1]+1;         nValue[2]                := nValue[2]+1;         nValue[3]                := nValue[3]+1;                  bWriteRegs                 := TRUE;                  fbWriteRegs.sIPAddr     := ipAddr;         fbWriteRegs.nTCPPort     := 502;         fbWriteRegs.nUnitID        := 16#FF;             //Tried setting this to 0,1 and it also and didnt work ...         fbWriteRegs.nQuantity     := 4;         fbWriteRegs.nMBAddr     := 16#3000;         //Tried: 16#3000, 0, 1         fbWriteRegs.cbLength     := SIZEOF(nValue);         fbWriteRegs.pSrcAddr     := ADR(nValue);         fbWriteRegs.tTimeout     := T#5S;         fbWriteRegs                (bExecute:=TRUE);     ELSE                  IF NOT fbWriteRegs.bBUSY THEN             bWriteRegs             :=FALSE;             fbWriteRegs            (bExecute:=FALSE);         END_IF                  fbWriteRegs                (bExecute:=FALSE);     END_IF  What should I change in my code in order to make this example work? Thank you in advance for any support!   Info about LabVIEW programs:  I am using the Modbus TCP Master / Slave examples  The IP address is set to localhost and the port to 502 (which should match the IP address in my Beckhoff code)  I am 100% sure it works because I have also tried connecting to this program via Python script. Picture of my LabVIEW programs:
  4. How to use EtherCAT device

    I have a device which uses the ET1100, Beckhoff to control. I use software TwinCAT 2 to connect this device and it identified the name's EtherCAT I/O Heizungssteller 9 Kanal. But it appear error, it's ERR_PREOP and cannot change to OP. Error: 'check device state for SAFEOP'. AL Status '0x0012' read and '0x0004' expected. AL Status Code '0x0017' - Invalid sync manager configuration'  Anyone can support me how to fix the error, change to OP for EtherCAT device, or how to control this? I attach the image of this error. Please!    
  5. EEPROM Error

    Hello,I am Danneil. I had a problem with 1s EEPROM. I used the TWINCAT 3  online mode to control 1s Ready,JOG,MoveAbs all are ok. But I made a silly operation that I press the "update the EEPROM" function ,after that I can't control by TwinCAT3. Even I used the SysmacStudio ,there was an error 88 03 on 1s.  The ESI  files    From: https://www.fa.omron.co.jp/member/product/tool/23/esi/download.htm Is there a good way to solve?     Thank you!
  6. Weird Timer Behaviour

    Hello, I've been using a Beckhoff PLC and TwinCAT3 lately and I'm learning how it all works. Currently I'm using a ton timer in my program and I've noticed some weird behaviour. The timer.IN is set to true and afterwards I check for timer.Q in an IF statement. That statement should therefore only be true after the timer.PT delay value. However, the first time after I activate the configuration and timer.IN is set to true, timer.Q is immediately set to true for a very short amount of time. When I reset all values and try again without reactivating the configuration, this doesn't happen. I'm thinking that I don't initialse the timer in the correct way or something along those line. I have attached a code snippet. The problem I'm encountering is that the first time after I have activated the configuration and the tonTimeout.In is true. The following IF statement is also true without having run for the delay time. This sends my program to an error state. However, after resetting the values this doesnt happen anymore. Can anyone help me with this matter?
  7. Hello all, I'm new to Beckhoff and running a PLC with EtherCAT I/O slaves. If one of the slaves is disconnected from the network (power loss or network cable broken) the whole PLC freezes, is there a way of configuring ethercat such that it remains (partially) operational, thus showing me the I/O on the unaffected stations.