rajsiyer

MrPLC Member
  • Content count

    295
  • Joined

  • Last visited

Everything posted by rajsiyer

  1. I have just started my youtube channel The Control Philosopher wherein I will regularly post topics of interest to people in this Automation community. So far, I have posted just 4 Videos  1. Connecting PLCs to MCCs  How to safely interface PLC IOs to Motor control Centres 2. Understanding the Basics of VFDs Part-1. The Very basics 3. Understanding VFDs Part-2 Covers Load Types, Energy saving principles 4. Understanding VFDs Part-3 Covers Selection, Configuration and Harmonics
  2. Hi,   I am attempting to download a Vijeo designer application to a remotely situated Magelis HMI over the cloud by means of a VPN. Vijeo designer's built-in help indicates that this is possible and has provided an example.  BTW, I am using Vijeo Designer basic v1.1 & the HMI model is GXU3512.   However, I find the fields for router IP and TCP port nos. all deactivated  
  3. I am attempting to download a Vijeo designer application to a remotely situated Magelis HMI over the cloud by means of a VPN. Vijeo designer's built-in help indicates that this is possible and has provided an example.  BTW, I am using Vijeo Designer basic v1.1 & the HMI model is GXU3512.   However, I find the fields for router IP and TCP port nos. all deactivated. How to get pass this roadblock? I'll appreciate any suggestions.   Thanks a million
  4. Thanks, but the settings for NATing the HMI appear to be disabled. I believe if the Use NAT check-box on vijeo-designer was available to be ticked and so also if the ports and public IP address of the router were configrued, we would have seen it on the local netework
  5. Hi friends, The scene is like this... I have some 200 energy meters whose readings are continuously logged at 15-min intervals into a logging table. The meter does not have any other value logged. Let's consider these readings as analog tags. However these tag values are continuously increasing to ever larger numbers. Thus we have a problem for display on trends. Customer now requires that the Citect shows usage trends for any meter for a specified period of the past. That is to say, the meter that he wishes to observe is selected - along with a period typically between 2 dates (perhaps also with a sampling period) - and the trend must appear. So in other words, given a single trend object, how do you make values appear for any selected tag on this trend. Perhaps this can be overcome by some genie/super-genie mechanism. My approach to this is...For the selected meter, I use SQL to query the 15 minute logged values (also taking into account the required sampling period) taking the reading on starting date as initial. All values thereafter are subtracted -within the SQL query- and the result of this query is kept in a 2 dimensional array(x for time, Y for value) or a new database table so that the trend displays values starting with zero. This much I can do with Cicode. After this, I need a method to display the values so obtained in a trend object. Essentially this is the same as feeding a trend object with a set of X & Y values that I have in the form of an array or in a database table. I shall greatly appreciate any help to meet the above objective. Thanks for looking in. With best wishes.
  6. Hi fellas... Thanks to Ken Moore, Bob Foot and Shanen here, I managed to communicate a ML1100 as Modbus master to read in data from energy-meters, which store parameters like KwH, KVAR, etc in their registers as a pair of 16-bit integers, so that a SCADA client could poll them as real numbers with decimal points. As many of you all know, the way one reads a real number stored at the register pair %MW90-MW91, would be to read the data as a Modbus item "40092 F". For example, in Excel one would have to write <=MODBUS|Topic_name! 400092 F> the F being the specifier for floating point data. To my chagrin I found that ML1100 does not read in floating point numbers. The registers in the energy meters are all 2 consecutive 16 bit integers. How does one go about displaying these register pairs as floating point numbers in Excel??. I would really, really appreciate anybody helping me out with this. There has to be a way around. Regards, best wishes Raj S. Iyer
  7. Hi Fellas,   Has anyone played with this ABB PLC and taken out data on its Ethernet port. The scene is like this.. This PLC communicates with a slave device on Ethernet and is also connected SCADA on the same network. (OPC on Iconics v9.32).  The slave device is a big endian. So we have set the ethernet port on the PLC to talk Big-Endian so that correct math can be done on the slave's data within the PLC. So far so good. Now the OPC server for Iconics does not have the Byte-swap feature. When we connect PLC to Iconics, it is displayed as swapped! So the question begs.. When a ethernet port is connected to an f Big endian slave and a little-endian Scada at the same time, how does one proceed?   Thanks a million for looking in and will appreciate any help/advice   Raj S. Iyer  
  8. Byte order (Little/Big Endian) on ABB PLC PM564-ETH

    Thanks for looking in Dan. You are right in every bit of what you say. However till date, I haven't found the byte order selection setting in the OPC server we're using for Iconics.. As you say, Indeed we're looking for it. Meanwhile we had to add a few rungs of code in the PLC to swap the problem variables that have to be shown on Iconics. Thanks
  9. Ni Hao a062549 Thanks a million. What I now understand is that Schneider has a small application created in C/VB that runs in the ibackground. However, in my case I was able to solve the problem by changing the firmware of the meter so that another address retained the value as 32 bit real. Thanks and all the best
  10. In my present project, I have to interface an energy meter that has its kWh count in 64 bit Double format. Now that Vijeo citect hasn't a facility to create tags of the "double' type I am looking for a work-around to this problem. Thanks for any help/advise in this matter
  11. Hi friends, I have about 60 on-off valves each with about 6 signals in my current project. Recently, I have learnt how to make a face-plate for this and connect the face-plate's property interfaces with tags needed for each valve. Now I wish to make a single pop-up screen to control these valves. When I click the face-plate of a given valve, its tags must be assigned to the pop-up screen that will have switches/lights for its control & status. Thanks for looking in and I shall appreciate all advice for implementing this.
  12. Hi friends, I am a little new to WinCC. I am using a WinCC RT Advanced license within TIA portal v13.1 I need a little help in my current project as described below. I am attempting to create a faceplate of a solenoid valve,, The "Valve" is a user-defined data-type with the following 4 elements 1. Cmd - or command. - Bool 2. Cls_Fb - or Closed -Feedback -Bool. 3. Aut - or Automatic Mode -Bool 4. FTC - Fails to close -Bool. I tried the following procedure as described in TIA portal help.. Method -1 1. I created a User-defined data type called Valve comprising of the above 4 bool elements. 2. In the graphics I made a image of solenod valve with one rectangle (solenoid) and one polygon for valve body. 3. Under the Faceplate Properties (See figure attached) I inserted a property ang gave it the data-type Valve as above. However, when I drag a property from the 'Contained objects list' to the interface side, it is not getting substituted. such as the Rectangle_1 's background color I try to associate with the interface property Valve.Cmd. It does not get assigned when dragged. Since this does not work I tried another approach, Method -2 I attempted to declare a variable tag of UDT type 'valve' in the faceplate's tab Tags. I found that it is not possible to declare a local variable of User-defined types here. Please guide me how to proceed. Thanks for looking in and best wishes for your success. Regards, Raj S. Iyer
  13. Hi friends, Can anybody tell me when to use a local-Static variable and when to use a Local Temp variable whilst creating a Function-Block in S7 -1500 using TIA portal. Thanks for looking in. Best wishes.
  14. Sinamics G-120 Drive on Profinet

    Jendha, Dobry Dehn. (The Slavic Dehn you use is the same as our Din in HIndi..) Good hindi, Actually I speak many languages though my mother tongue is Tamil in which I am illiterate! Actually, in my application I need only start/stop and speed control of pumps. Additionally, on SCADA/HMI I need to display the other things such as voltage and current. All said and done, I think using the technology objects and function blocks MC_power + MC_Movevelocity would be enough for the control of the pumps; For the display of voltage/current/power I think I have to configure a telegram on SW Starter/scout. There is another question that I've posted for you. Thanks
  15. Sinamics G-120 Drive on Profinet

    Dear Friends, In my present project, I have a S7-1500 PLC & 3 Nos, Sinamics VFDs(PM-240s) with Profinet ports.(CU-240E -2PN) The drives and PLCs are on the same Profinet network. I wish to know the essentials of controlling the command and speed reference of these drives directly from the PLC on profinet. Reading the help in TIA portal got me nowhere its all about Telegrams and things that I haven't figured out yet Thanks for looking in; I shall greatly value all help and advice.
  16. Sinamics G-120 Drive on Profinet

    Jenda, Thanks a lot.. Since the time of posting, I have read further into the subject. As I understand, TIA portal has Technology functions for connecting to the VFDs on Profinet. These are called TO_AxisPosition and TO_AxisSpeed. The first one is for using the VFDs in positioning applications such as conveyors and the second one is for basic ON/OFF + speed control as is the case with my present requirement. It appears to be fairly straight forward... 1. We begin by dragging the appropriate model of the VFD into the network/topology view and connect it to the Profinet port of the selected PLC. For any given model of VFD, there are certain Drive-Objects or DOs that can be dragged into 'slots' of the VFD module. For basic speed control, the DO with standard-telegram 1 is sufficient. 2. Next, in the "Program Blocks" folder, we have to add the corresponding Technology-Objects such as TO_AxisSpeed. This Technology-object is associated with the telegram we have selected in step-1 3. In the PLC-program, we use the corresponding function blocks such as MC_Power and MC_MoveVelocity and associate variables to these blocks so that we can control the drive. I believe that this is all there to it. But since you are mentioning the need for parametrization of the telegrams, I will certainly look into it. And One last question.. How do you configure the variables for Voltage, current, power, torque.. etc from the drive on Profinet in TIA Portal? Thanks and Dobry Dehn,
  17. Dear Nirav, You have to go by loading of the transformer. Typically, in control panels there are contactors, SMPS devices, Indicator lamps and some relays. Sometimes, there is a space-heater. Calculate the total consumption by adding up the wattage of all components on 230V side. For this, for each contactor, there are 2 VA ratings.. -1- The 'inrush currents' of each contactor (For small -relays this is insignificant) & -2 - The VA rating of the contactor when it is latched(closed, or sealed as others may say) The required VA(inrush) will be the square root of the sum of these 2 VA ratings. required inrush VA for each contactor.. = SQRT(VAlatched2 + VAinrush2 ). Also see the inrush capacity of the transformer at 90% Voltage. Typically This figure will be about 300-400%. See example below.. See how a 70VA X'mer gets 250VA is good enough for 250VA inrush.
  18. Thanks a lot Chelton.
  19. Hi friends, I have this need to declare a few arrays of string variables and intialize them with a particular value, in Citect. In citect, on the forms for variable declaration, there is a place given for entering the array-size. In the case of other data-types such as INT or REAL, entering a number here will imply that the declared variable is an array with the size mentioned in the Array-size. In the case of string variables, the array size represents the size of the string ie. one element for 2 characters. If we declare the size of the array as an extension of the variable name, such as StrVariable_array[30] then Citect throws up a compile error. We are of course able to declare an array of string variables in the cicode editor, but then this is not 'Global' for use as variable tags. So the question begs.. How do you declare an array of string variables, preferably using local variables. Thanks for looking in, regards and best wishes.
  20. Chelton, one more question for you, see the forums under a new topic
  21. Hi Guys, I wish to know if there is a method by which one can use string substitutions in Cicode functions.. It is a very useful thing, when used with structured tag names. In my current project, there are 200 Energy meters, each having 8 tags, hence 1600 tags. Each group of 8 tags has the same pattern ie <prefix> being the identity of a given meter. <prefix>_Vavg, <prefix>_Iavg, <prefix>_MaxkW, <prefix>_kWh, <prefix>_kVAr, <prefix>_kW, <prefix>_RunHrs I wish to log this data onto a SQL database table named "METER_LOG", carrying out the logging actions for each meter in a record, that has these fields(Columns) |Meter_Id |----|Vavg|---|Iavg|----|MaxkW|----|kWh|----|kVAr|----|kW|----|RunHrs| My goal now to do this in a loop, so that all the logging actions are done with a few lines of code. There is a table-"METER_IDs" that gives the list of all Meter_IDs or <prefix> And the code I wish to implement is a cicode function that would look like this.- It is not correct, I've used genie substitution syntax and that won't work here. FUNCTION LogAllMeters() int hSQL; string %Cur_ID%;// --This is the string that will be substituted in the loop hSQL = SQLConnect("DSN=<DSN_name>; UID =xxxx; PWD=yyyy"); IF hSQL <> -1 THEN Status = SQLExec(hSQL, "SELECT Meter_ID FROM METER_IDs ORDER BY Meter_ID"); IF Status = 0 THEN WHILE SQLNext(hSQL) = 0 DO // --Scan till the end of the list for all meters %Cur_ID% = SQLGetField(hSQL, "Meter_Id"); INSERT Into METER_LOG VALUES ( %Cur_ID%, %Cur_ID%_Vavg, %Cur_ID%_Iavg, %Cur_ID%_MaxkW, %Cur_ID%_kWh, %Cur_ID%-kVAr, %Cur_ID%_kW, %Cur_ID%_RunHrs); END SQLEnd(hSQL); SQLDisconnect(hSQL); END ELSE SQLDisconnect(hSQL); Message("Error", SQLErrMsg(), 48);END//----outer IF End// of FunctionI would greatly appreciate it if someone could guide me with a way to substitute strings so that the structured tags are correctly referenced inside the loop. Thanks a million for looking in.
  22. Hi guys, I am a little new to TIA portal. My question is whether it is possible to create structures of data (UDTs) and use them without addresses in the program? Or is it absolutely necessary to assign base addresses to all variables? thanks for looking in & will greatly appreciate any help Raj S. Iyer
  23. the purpose and concept of Data Block in Siemens

    I am now clear on this.. I come from using other PLCs where the distinction between variables and functions is handled better .. for example in Schneider's Unity-pro. The concept of data-blocks in the Siemens is the equivalent of either Function-block instances or merely data-structure instances. It is a little confusing for the newcomer to accept that the term data-block can be used to represent both. The generic words "variable" or "function" would have been better, instead of throwing them into a single descriptor called data-block. The distinction between them is made subsequently when the data-block is qualified either as a "Global-Data block" for mere UDT structures and "instance-Block" for instances of functions. At first reading, one is led to believe as if UDT's don't have instances! Unfortunate that the 'generic' description is not used. it only serves to confound the user. As far as variables go, PLC-tags in TIA portal need addresses. Now this isn't needed with data-blocks. I believe this is because, in addition to the function or variable's own name it also has an "address" %DBxy. To sum-up..Think in object oriented style.. 1. Global-Data Blocks..These are the "nouns". If you create a user data-types such as "Reactor" or Valve or "ingredient" you have to create the corresponding structure under "PLC data-type". This is needed for structured variables to be represented in dot-notation.. such as Reactor1.HeaderValve[7].OpenCmd = TRUE. Or LubeOilRecipe.Ingredient[11].CorrectionQty = 67.54. These could also represent arrays of user-defined data types. 2. For Instance-Data Blocks.. These are to be use for the "Verbs" Each function block that does something, has a behaviour. This is prototyped as a function-block. Suppose you've made a function block for temperature control that encapsulates the control behaviour.. This is defined as a function-block of type "Temp_Cont". Every instance of this for different temperature control, will be done by an Instance data-block of type "Temp_Cont"
  24. Hi Bryll, Thanks a lot for your prompt reply. I know about creating data types... Now my question is whether the instances of these data can be used without the assignment of address? So far I haven't been able to create any variable - elementary or User-defined without assigning addresses; in the PLC tag tables that is. However, in OB1, I have been able to create private variables starting with "#" Such as #int1 which is local to OB1, which implies that it could be global. Same rule applies to structured variables or user data types. And Bryll, I would like to understand data-blocks. If you create a structure and instantiate it, does it become an instance data-block.
  25. the purpose and concept of Data Block in Siemens

    But isn't this the same thing as a structure? or user-defined data-type. Most other PLCs I've worked with refer to this as an instance of the data-type.