MrPLC Member
  • Content count

  • Joined

  • Last visited

Community Reputation

20 Excellent


About AndreasW

  • Rank

Profile Information

  • Country Germany
  1. FX3U-ENET-ADP how to connect and read strings?

    Hi hewking, don't know kepware, but found this description of the Mitsubihshi Ethernet Driver (for kepware) see page 58ff, Appendix PLC Setup for FX3U Series PLC setup, so i would suggest to try it out, but i don't know if its works with the ENET-ADP module. In difference to the ENET module the ENET ADP module (left mounterd to plc) is only providing the ethernet interface (hardware interface) and supporting the Mitshubishi MC-Protocol as described in the manual, and is primary used to enable commmunictation with other mitsubishi devices (like hmi/robot controller) using the mitsubishi MC-protocol the ADP module/ Ethernet connections can't be programmed from the plc program, but an external device using the mc-protocol can be used to fetch data from the plc so, if  the Kepware driver uses/supports the MC protocol it should work. if the kepware drivers doesn't support mc protocoll, then you will need to use a ENET module. ps: the FX Configurator software is used to configure the ENET module but not the ENET ADP module to your questions: 4.) as far as i know yes only connection at the time 5.) don't know what DSL, DSH area means, as far as i know ther isn't a special adress range used to store string, strings ares stored at hthe reigsisters/variables      that are used in the program using the ASCII character encoding, e.g. string "ABCD" stored to D10 will be stored as      D10 (16bit) : 66 (ASCII b) ,65 (ASCII a) ;      D11 (16bit):  68 (ASCII d), 67 (ASCII c)        
  2. Screen switching problem

    Hi Woszu,  i am not shure if this works, but i would try the following: 1) assign a GOT internal device to the screen switching device for the superimpose window (e.G. GD101)  you can find this setting inside the System Tab "GOT Setting\Environmental Setting\Screen Switchiwing/Window"  2) use a range trigger on your first shown base window to write the screen number of your superimpose window to the screen switching device, if the device has a zero value. (to add a screen trigger right click the base window and select Screen Trigger action...) e.g.: Screen Trigger for the first shown base Window (Screen Trigger Action) TRIGGER SETTING: Trigger Type:   Range Data Type:      Unsigned BIN16 Trigger Device: GD101 (use the Screen Switching Device) Range:          0== GD101 (Expression -> A: ==, B: none) Operation Mode: Satisfied ACTION SETTING Action:         Data Set 16bit Points:        1 Data:           Unsigned BIN16 Device:        GD101 (use the Screen Switching Device) Fixed:          1 (use the screen number of the superimpose window) hope this works  
  3. Unknown operations

    hi simo99, I think you are observing the wrong data register, because the index register Z0 is written with a new value. The displayed value should come from register D753 (D750Z0, Z0=3) as shown in the screenshot. At the time of the calculation, however, Z0 should have the value 8 ((138-1)/16)=8 and the result of the last WOR instruction should therefore be in D758. I assume that Z0 is written at another place with the value 3 and the displayed actual value does not show the result of the calculation but the content of the data register D753. The result of the calculation should be in D758, have the registers D750- D758 displayed (watch list).   For me the calculation is as follows: [- D448 K1 D700] (D700= 137) [/ D700 K16 D704] (D704= 8, D705=9 (remainder) [MOV D704 Z0] (Z0= 8) [MOV K1 D708] (D708= 1) [SFL D708 D705] (D708= 1024) shift n=9 [WOR D708 D758] (Z0=8, D750Z0= D758)  
  4. Control high-speed counters

    for general information about the high-speed counters see chapter 26 (highspeed input/output function) and chapter 16 for the high-speed io functions the manuals are for the FX-series, if you have another plc type (Q/L/FX-series) you can find several manuals at ,   one hint: if you want to use the high-speed counter function for an input, be sure to use one of the fast inputs (x0-x4, depends on plc type) and properly setup the input-resspone time setting inside the configuration, i think the default is 10ms, wich is far to slow for an high-speed counter,        
  5. GX Works3 Projectlib Locked

    Hi FX-Zohir, you should have a look at the GX-Works 3 manual, see chapter 15.1 and 15.2 (PROTECTING DATA) if the library is protected by a password, then you have to authenticate the POU you want te edit (see page 458): Operating procedure 1. Select the POU to authenticate the block password, and click the [Authentication] button. 2. Enter the password on the "Password Authentication" screen, and click the [OK] button   if your project is secured by a key, you need to import the key-file inside the security-key-management window.(see chapter 15.2)  
  6. GOT HMI - Enable/Disable Serial Port

    Hi MarkusR, don't know if this will work but maybe you can use the Chanel Shutdown Controls GS539 to disable the corresponding chanel. The Special Registers are described inside the Screen Design Manual inside Chapter 12/GOT special registers
  7. MELSEC-L PID Control

    Hi Neverov, you can find this manual at for a list of other manuals for L-Series:    
  8. Subtraction with GX Works 3

    looks strange, but i think this is because PlsMem is now saved between the fb calls like it was intended. I think you have a problem with your PlsAct value: 1.) you wrote that the difference of PlsAct and PlsMem should be less than 500 (pulse) , but if i look at the both temporary values: PlsAct (Temp1) = - 903.443.592 (currente value) PlsMem(Temp2)= - 930.792.352 (last value) => PlsAct was increased by 27.348.760 between the fb calls, and PlsAct isn't changed inside the FB   2.) PlsAct gets negative, so i think that your actual Pulse counter exceeds the DWORD Range of +2.147.483.647 and then the values will be negative. And if your PlsAct value changes within the range of 27.348.760 this can happens easily after a short while. You can check/detect the overflow of PlsAct with the Carry-Flag (SM700), that will be set if addition or substraction exceeds the range limit, but this will only work if you use DADD or DSUB instructions to modify PlsAct, if you use D+/D- instruction to change PlsAct the Carry-Flag won't be set. I would check: - are all variables of type DoubleWord (Signed) ? - is the FB called only once per scan ? - check the calculation of PlsAct          
  9. Subtraction with GX Works 3

    i still think that "PlsActMemory" is always Zero when the function block is called, and that the value of PlsActMemory isn't stored between the functions calls, because this seems to be the only way that  "DeltaPls" is always calulated to the same value as "PlsAct". PlsDelta = PlsAct - PlsActMemory ([D- PlsAct PlsActMemory PlsDelt]) => PlsDelta = PlsAct - 0 => PlsDelta = PlsAct Maybe you can save the current value of "PlsAct" and "PlsActMemory" to some temporary variables before the [D- PlsAct PlsActMemory DeltaPls] instruction to see what values both variables have before the substraction takes place e.g.: ---|  SM400 | -------------------------------[DMOV PlsActMemory Temp1] ---|  SM400 | -------------------------------[DMOV PlsAct Temp2] as i wrote before PlsActMemory will be Zero when its defined as IN/OUT parameter and the the value is not passed again to the input signal of the function block. In this case the current value (PlsAct) first is stored in PlsActMemory by the [DMOV PlsAct PlsActMemory] but will be reset to zero with the next call of the function block.    
  10. Subtraction with GX Works 3

    looks like that your PlsActMemory is zero when the FB is called? if this FB is called and PlsActMemory is zero, your delta will be equel to PlsAct : "DeltaPls= PlsAct - 0 => DeltaPls= PlsAct"; like in your video if PlsActMemory is an IN/OUT variable do you set the saved output value of the FB to the input when calling your FB? if you don't set it, then PlsActMemory will set to zero when the fb is called
  11. Subtraction with GX Works 3

    hi Simo99, can you post a screenshot of your program and what values do you want to substract?  
  12. Subtraction with GX Works 3

    hi Simo99, just some thoughts: - did you use the DSUB/ D- instruction? if you use SUB/- instruction with DWORD the result is wrong? - is the second value realy smaller the first one?  you can check the Carry, Zero and Borrow Flag  ( SM700, SM8022 Carry When the operation result exceeds the upper limit of the data setting range, the carry flag is turned ON.,   SM8020 Zero When the operation result is 0, the zero flag is turned ON.   SM8021 Borrow When the operation result is less than the lower limit of the data setting range, the borrow flag is turned ON. ) - did you select DWORD inside your monitoring window ?  
  13. Table of Special Registers and Special Relays

    you can find several manuals for different PLC Types (Q/L/FX-serias)  at for a list of the special special register have a look at the Appendix inside the hardware design manual, eg. for Q-Series CPU see Appendix 2 and Appendix 3.    
  14. Byte to Word

    instead of shifting the bits you can use the swap instruction 1.) MOV HighByteValue  D1                 // move the High-Byte to D1 (this will be stored in the lower 8 Bit of D1) 2.) SWAP D1                                        // swap Hi/Lo of D1 (High-Byte-Value will stored in the upper 8 Bit of D1) 3.) WOR LowByteValue D1                  // OR the value of the Low-Byte of D1     
  15. FX5U Shift Dword

    Hello BL, do you really want to shift the bits of the counter in D0 or is it about reading multiple counter values and store them block by block? If you need to shift the bits of the counter (D0), this can be done with the SHL or SHR instruction, but I can't understand why you should shift bits of a counter. How many bits do you want to shift? If you need to swap high/low byte of the read counter you can use the DSWAP instruction. If you want to store multiple values (each after reading with dhcmov) you don't need a shift instruction. In this case you can the use the BMOV instruction. Alternatively you could use an index register e.g. Z1 and read the values after D0Z1.