rajsiyer

MrPLC Member
  • Content count

    295
  • Joined

  • Last visited

Posts 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. 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

    NAT_HMI.jpg


  3. 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

     

    NAT_HMI.jpg


  4. 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


  5. 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

    Quote

     

     


  6. 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.

  7. 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.

  8. 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

  9. 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

  10. 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,

  11. 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.

  12. 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.
    1 person likes this

  13. 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.

  14. 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"

  15. 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.

  16. There are 2 tables in the DSN Named EM_AccessData 1. Table Cust_IDs is the set of Cust_Id. 2. Table Live_log which is where the data is logged every few minutes. Handles.. Handle hSQL is used to connect to the database. The SQLExec() for reading is done form the Cust_Ids table using StsSQL1 The SQLExec() for inserting record into the Live_log table uses StsSQL2 FUNCTION Log_EnergyMeters() STRING sCurId; STRING sCurRdg; STRING sCurPwr; STRING sDt; INT hSQL; // Handle for connect INT StsSQL1// Status showing exec- error Cons_Ids INT StsSQL2// status for Live_log execution hSQL = SQLConnect("DSN=EM_AccessData;UID=Admin;PWD=Iyer"); IF hSQL <> -1 THEN StsSQL1 = SQLExec(hSQL, "SELECT Cons_ID FROM Cons_IDs order by Cons_Id"); IF StsSQL1 = 0 THEN WHILE SQLNext(hSQL) = 0 DO sCurId = SQLGetField(hSQL, "Cons_ID");//Look up the Cons_IDs table and get each Cons_ID sDt = Date()+" "+ Time(); sCurRdg = TagRead(sCurID+"_CurRdg"); sCurPwr = TagRead(sCurID+"_kW"); StsSQL2 = SQLExec(hSQL, "Insert into Live_log(Dt_Time_, Consumer_ID, CurMtr_Rdg, Power_kW)VALUES('"+sDt+"','"+sCurId+"','"+sCurRdg+"','"+sCurPwr+"')"); IF StsSQL2 = 307 THEN Message("Error", SQLErrMsg(), 48); END SQLEnd(hSQL); SleepMS(20); END// Do... WHILE SQLEnd(hSQL); SQLDisconnect(hSQL); END//for StsSQL2 =0 or otherwise SQLDisconnect(hSQL); !Message("Error", SQLErrMsg(), 48); END// Outer If for StsSQL1 = or <> 0 END//Function

  17. Hi Friends, I am working on a small project that needs to log data from energy-meters (about 200) onto a SQL database. I have written a function for logging in Cicode that is connecting to a DSN with multiple tables. It gets the customer's Id, one by one in a loop from one table assigns the readings, and logs it to another table. Problem observed with my method is that the loop does not move beyond the first entry in the Cust_ID table. I suspect that there may be a need to use different handles for different tables. OR - The TagRead() function is blocking further execution of the loop. PS:- The use of SqlNext(hSql) has worked well in a similar function to load combo-boxes with All Cust_IDs. Something causes the While loop to end Greatly will appreciate any help in resolving the error. PS:- The use of SqlNext(hSql) has worked well in a similar function to load combo-boxes with All Cust_IDs. Something causes the While loop to end Greatly will appreciate any help in resolving the error.