Search the Community

Showing results for tags 'double word'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Found 21 results

  1. Dear reader, I am writing a C# program using the library  ‘EasyModbus’ that needs to communicate with Siemens WinCC via the connection type ‘Modicon modbus’ I have written a version using the ‘float’ data type in WinCC and that works perfectly. Here my code fragment: Method to convert ‘double’ to bytes in C#: public static byte[] DoubleToModbusFloat(double value) {     byte[] bytes = new byte[4];     float floatValue = (float)value;     int intValue = BitConverter.ToInt32(BitConverter.GetBytes(floatValue), 0);     bytes[0] = (byte)(intValue >> 24);     bytes[1] = (byte)(intValue >> 16);     bytes[2] = (byte)(intValue >> 8);     bytes[3] = (byte)intValue;     return bytes; } Call of the method and loading of the modbus registers in EasyModbus: Bytes = PublicCode.DoubleToModbusFloat(TmpDbl); int n = (int)ModbusStartAddress + ((i - 1) * 2); mb.ModServer.holdingRegisters[n + 1] = (short)((Bytes[0] << 8) + Bytes[1]); mb.ModServer.holdingRegisters[n + 2] = (short)((Bytes[2] << 8) + Bytes[3]); So far so good – this works fine. But I also want to be able to use the ‘Double’ data type in WinCC because I sometimes need more precision than the 7 figures of the ‘float’. I thought it would simply be a case of doubling up the code so I wrote: Method to convert ‘double’ to bytes in C#: public static byte[] DoubleToModbusDouble(double value) {     byte[] bytes = new byte[8];     long intValue = BitConverter.ToInt64(BitConverter.GetBytes(value), 0);     bytes[0] = (byte)((intValue >> 56) & 0xff);     bytes[1] = (byte)((intValue >> 48) & 0xff);     bytes[2] = (byte)((intValue >> 40) & 0xff);     bytes[3] = (byte)((intValue >> 32) & 0xff);     bytes[4] = (byte)((intValue >> 24) & 0xff);     bytes[5] = (byte)((intValue >> 16) & 0xff);     bytes[6] = (byte)((intValue >> 8) & 0xff);     bytes[7] = (byte)(intValue & 0xff);     return bytes; } Call of method and loading of the modbus registers in EasyModbus: Bytes = PublicCode.DoubleToModbusDouble(TmpDbl); int n = (int)ModbusStartAddress + ((i - 1) * 4); mb.ModServer.holdingRegisters[n + 1] = (short)((Bytes[0] << 8) + Bytes[1]); mb.ModServer.holdingRegisters[n + 2] = (short)((Bytes[2] << 8) + Bytes[3]); mb.ModServer.holdingRegisters[n + 3] = (short)((Bytes[4] << 8) + Bytes[5]); mb.ModServer.holdingRegisters[n + 4] = (short)((Bytes[6] << 8) + Bytes[7]); However, this code does not work correctly. I have tried all combinations of byte and word reversal, and whatever I do WinCC either displays nonsensical values or ‘####’ showing that it cannot display the value. I have tried reading as much documentation as I can but it still looks to me as if I am doing the right thing. Also, I have downloaded a number of ‘modbus master’ code examples, and they seem to be able to read the ‘Double’ from my program without any issues. In WinCC I also see that there are two types of double – ‘Double’ and ‘+/- Double’ – I am also unsure as to why this is – there is no ‘+/- Float’ data type, which seems inconsistent to me. I am obviously missing something, but cannot seem to discover what exactly. I hope that someone can point me in the right direction as to what I am doing wrong. Please see attached word file for a picture of the configuration of the connection in WinCC.   Thanks in advance for any help !, Dave Long Double trouble.docx
  2. Hi All, I am Data Transferring Arrays of WORD's from a HMI to NX PLC. This Transfer may be a variety of data types, Likely just UINT and STRING[20]. It will be Imported to NX as an Array of Word What im trying to do is Populate my Structure from this Array of Word. I can do this by mapping them individually just fine. But i was hoping i could add them automatically. Much like when you assign EthernetIP tags and can link them to a structure and User Offset the Bytes. But i cant seem to Link the Array of Word to the Structure e.g. SENSORS_STORED:=DATA_2_IN; Says its impossible Anyone have any ideas how i could Populate this structure from a WORD Array without manually mapping and Converting Each? SENSORS_STORED.Fixture_ID:=WORD_TO_UINT(DATA_2_IN[0]); For Example is a workable way but is long winded and was hoping there is a easier way Thanks in Advance Dann  
  3. I am working on something different. I have a Signal Speaker that uses binary inputs to play a certain song based on source configuration. I have to send 24v to the inputs of the speaker. I have 5 of them with 30 different configurations. I am currently trying to do this in ladder logic, RSLogix 5000. Steps done. 1. Assigned the 6 outputs tag names. This is so that I can shift the program to other machines if I have to and I just need to change the slot location, or if I have an output go bad I can move it with ease. This works. 2. I  created the 30 lines of  5 columns to match the binary method. This works.    a. I can manually toggle the output to cycle thru the binary table. 3. Currently working on the logic that when a particular alarm is activated... I turn on the outputs needed to match the binary table. The problem is destructive bit reference on the coils.  I was researching some but don't know what direction to go. How can I call the same output on different rungs? I have attached the .L5X to show what I have programmed. 4. I know the first rungs are wrong. That is what I am trying to fix. 5. Would there be a better way to address this, if so how? Any help would be greatly appreciated.     Speaker_Alarm.L5X Speaker_Alarm.L5X
  4. Hello, I am trying to have single press and double press etc. functionality in my PLC program where for example, single press will turn on the motor whereas double press will turn on the motor for 5 seconds. Is it possible to achieve using ladder logic in sysmac studio, if yes, how? Thank you in advance.
  5. Dword to Float on FX3GE

    Hello! I have a float number (HEX: 3CA01D0F) in Big Endian. It's 0.0195451062. I get it from the sensor and store it in a double word variable. Could you help me? How can I convert DWord to Float? If i use DFLT instruction, It treats DWord as an integer (1017126159) and just gives me 1.017126 e+009 Thanks in advance.
  6. Hi:         How to use data type Word to perform math function without converting to Int or Uint ?  -----> Error    26    The '+' operator is not supported by WORD data type.     thanks    
  7. Union

    Hello! I am trying to get hold of the bits in a word, i have read that union is the way to go. My problem is that i cant figure out how union works. I have made a union between a word (16bit) and an array(0...15). The way I understood this was that the word now automaticly updates the array so that when the least significant bit in the word should update array[00] and so on. This is not happening. When I monitor the variables I can see the word change, but nothing happens with the array. Have I misunderstood the consept and what should I do to get hold of the bits?
  8. Hello, I'm new to CX-Programming and I could really use your help. I want to make function block that will check the bit status from a word input variable. I made input variable and internal variable array of bool(32) and I thought I can just use the code example: array[1]:=word.1 etc... but it is not allowed in CX-programmer. My goal is rearranging  the bits status from the input word to the output word. I don't need just making the 0 to 1 or otherwise... Thank you in advance.
  9. Hello, CJ2M CPU-32 to IAI motion controller through ethernet/ip I'm working on programming electric actuators to pick up parts from a tray. I will have x (row) and y (column) coordinates that I need to update to move the actuators. So to go through the whole tray I would have to use nested loops. (below what i'm trying to achieve if i was doing it in C++)                                           6 Rows and 6 Columns, palettizing                                           data rows&columns DWORD (Row1,row2,row3...row6; col1,col2...col6)                                           c++ code                                           for i=0,i++,i<6;                                               rowData = row                                               for i=0,i++,i<6;                                                   colData = col                                                   execute movement                                                   wait for confirmation                                               end                                           end I have a way of doing it but it will require a lot of repetitive lines and typing every step, and I was wondering if there is a way on every iteration to increment the data location instead of the contents. In the picture below you can see the example where the goal is to copy data from D8100 to D8000, then in next step from D8102 to D8000, then from D8104 to D8000 and so on. So far in the documentation I was only able to find how to increment contents. Is it even possible to do what I want to?
  10. Greetings, so i create project for FX3U in GX Works2. In my program i use function in ST. That function return array with word(signed). I have a warning: ST FOR i_var := 0 TO n_i BY 1 DO TempNumbs := Numbs; TempDevSetsOnPerTime := DevSetsOnPerTime; QueueBySetOn[i_var] := 0; END_FOR; QueueBySetOn[1] := TempNumbs[n_i]; QueueBySetOn[3] := 1; FOR i_var := 0 TO n_i BY 1 DO IF (TempDevSetsOnPerTime[TempNumbs[i_var]] < MaxSetsOnPerTime) THEN QueueBySetOn[0] := TempNumbs[i_var]; QueueBySetOn[3] := 0; EXIT; END_IF; END_FOR; So, it realy funny, GXW cant return int? QueueBySetOn.gxw
  11. Hey everyone first post on here, does anyone know if it is possible to convert a string into a double integer. i am working with a dimensioner and it is sending me its box dimensions in a 12 char string (see attached picture). however i need this data as a double integer (it seems to just take the string length not the string value i have tried both dim_lengh and dim_length.data[0]). i have gotten it down to the point where i have the string split up into the dimensions i need but i dont know how to do the conversion. (box dims for reference are 21 X 15 X 14.8) Thanks in advance, Dr. Brule  
  12. Remote IO

    Hi friends , recently i ve been doing some diggings about remote IO cards, in my factory we have a CJ2m PLC and it communicates with remote IO cards with four numbered words (2080.00 , 2080.01, 2080.02....2080.15 ) and there were several dip switches on the IO cards, which were set but i can't understand what was the basis of that settings. So I'd like to know how these dip switches behave and what are the uses of them ?? and how is it possible to have 4 numbered word bits ?? pls help me someone to clarify this, i tried internet, but cudnt help myself !!!  thank you    Here I attach one of the pictures i took of one of the remote input cards.
  13. Hi, I have variable (named var1) with data type 'Word[Unsigned]/Bit String [16-bit]' with Array [0..7]. I want to put 16 variables with data type 'bit' in var1. Is there function for that? Also is it possible to put 16 variables (bit) like this: var1[0].0:=bit1; var1[0].1:=bit2 etc. I'm using GX Works 2 with CPU L02 Best Regards
  14. Hi, I have variable (named var1) with data type 'Word[Unsigned]/Bit String [16-bit]' with Array [0..7]. I want to put 16 variables with data type 'bit' in var1. Is there function for that? Also is it possible to put 16 variables (bit) like this: var1[0].0:=bit1; var1[0].1:=bit2 etc. I'm using GX Works 2 with CPU L02 Best Regards
  15. Hi I am having trouble programming something I thought would be simple. I am using Word Lamp to display 6 different images ie. 6 states.  I have 5 Command Buttons. When pressed each one causes a different image to be loaded . What I want is the 6th image to display when the command buttons are released and before they are pressed. Unlike Bit Button which has a momentary setting , Command Button can only set a state. I wish it had a momentary feature so the state value could  be set when pressed and return to 0 when released. I hope I am being clear with what my issue is .  Any help with this would be greatly appreciated. Jim
  16. Hi, I am using syswin and i am doing an exercise on saving and moving data. My challenge is am monitoring temperature from a sensor and the range is -20'C to 100'C from the 4-20mA sensor, after conversion and testing for positive and negative the values are stored in D205. (I have done the conversion and testing for positive and negative values only assigning of bit 15 in D205 is left) The simple program has to turn on Bit 15 if the value is supposed to be negative. 1000 0000 0000 0001, a simple approach to telling us this is -1’C.  0000 0000 0000 0001, is telling us this is 1’C. Bit 15 is going to be our Sign Flag, so we have to ensure that if the temperature is positive then  Bit 15 = 0, how can we do this make Bit 15 of D205 = 0? If the temperature is negative then  Bit 15 = 1, how can we do this make Bit 15 of D205 = 1? How can i turn on this bit inside a data word? for negative i thought i could just add #8000 to the values after conversion then storing in D205 but for positive values how do i ensure that bit 15 is 0? How could you approach this? Am a bit stuck, all thoughts and ideas are much appreciated if possible you could add a snapshot from syswin or cx-programmer. I have attached the WTANK.SWP file which can be opened in syswin or cx-programmer. Look in block Main 8 Temp Buffer, Network 3 Convert to 'C WTANK.SWP
  17. Hi Everyone, I have a PowerFlex 525, in Velocity Mode with a Encoder Card "25-ENC-1". We are controlling this drive via TCP/IP with a 1769-L32. Through the PLC if I try to toggle the Bit for "Pos Redefine" in A560 [Enh Control Word] it instantly turns back to 0. But through the Parameter List Editor I am able to toggle A560. For My function I need to have the drive in Velocity Mode, If I change the drive to Position Mode I am able to toggle "Pos Redefine"   Any Thoughts would be great      
  18. I have 14 alarms all addressed to word 200 i.e. 200.** and i want to monitor the state of bits in word 200 such that if one of them is on the coil 204.00 should turn on (Currently i am using the OR operator to turn on bit 204.00 but the task is to use a single instruction to monitor the sate of the 16 bits of a word by comparing it to an integer say #0). I was thinking of using compare to achieve this but i do not know how to compare a word say 200 to a an integer value #0 such that if DW200>#0 then 204.00=on. How can i achieve this and what instruction can i use, am new to omron plc's and am using syswin 3.4 and plc CPM2A. Any help or sample program to achieve the above is deeply appreciated.
  19. OR Word AND Word application

    Hi Im relatively new to PLC programming and focusing mainly on Siemens PLCs.  Can someone give me an example or why one would want to use OR Word (OW) and AND Word (AW).  I understand that this means it is combining the contents of accu1 and accu2.  But why would you want to OR/AND them. Thanks
  20. PAROCK1 for HMI/SCADA View File Now a software solution is available for your Modbus (MB) needs in Rockwell/Allen-Bradley Control Logix or Compact Logix (Clgx) family processors, instead of a traditional 3rd party hardware like Prosoft MVI-56, Molex SST-SR4-CLX-RLL etc.  It is an Add-on instruction (AOI) for PLC/PAC firmware v16 or later, (other solutions are available for pre v16 systems).  For hardware interface, use PLC’s channel 0 (serial) or TCP/IP Interface module(s) to have as many MB TCP/IP devices or serial devices.  (Some limits apply based on system configurations, Comm. settings depending on HW used.) Connect any MB Client/Master or Server/Slave device(s) to your CLgx PLC, including flow computers, analyzers, VFDs, Power Monitors, Level gauges, Smart I/O, etc.  All the MB public/native function codes are supported.  32-Bit integers/floats as single entity are supported with byte and word level swapping. A separate utility automates the data mapping to your PLC logic.  Features -Serial Master (BASIC required Option); TCP; Slave; Redundancy; More than 5000 accumulative registers; MB CFC (Custom/Private Function Code) Support; Data mapping too – Between PAROCK1 & your PLC logic; Packaged with Rockwell; TCP/IP Interface Module; Volume Discounts; Annual Support Requirements -Rockwell/AB-CLgx processor with v16 or later.  Contact PCI for earlier versions. -If using CPU’s Chan0, you cannot use Chan0 for any other user mode activity. You can use it for non-user mode activities -TCP/IP Interface Modules from Rockwell/AB supported, are: -1756-EN2xx ControlLogix® Ethernet/IP communication modules, firmware revision 5.007 or later -1756-EWEB ControlLogix Ethernet/IP web server module, firmware revision 4.006 or later -1768-EWEB CompactLogix Ethernet/IP web server module, firmware revision 1.002 or later -1769-L30ER, 1769-L30ERM, 1769-L30ER-NSE, 1769-L33ER, 1769-L33ERM, and 1769-L36ERM CompactLogix controllers, firmware revision 20.011 or later -1769-L24ER-QB1B, 1769-L24ER-QBFC1B, 1769-L27ERM-QBFC1B CompactLogix controllers, firmware revision 20.011 or later -1769-L16ER, 1769-L18ER, 1769-L18ERM CompactLogix controllers, firmware revision 20.011 or later Other Related Services/Items -Custom PLC Add-on instructions building -PLC upgrades, troubleshooting, applications -PC Windows, iOS5, Linux, Mobile devices Comm. Drivers -Custom development, Technology Transfer Services  -Other Non-AB communication drivers for serial or TCP  -Full control system integration, training, architecture design This driver can be conviniently used with Visual Studio in development of complete large scale complex HMI/SCADA Systems. It can be used to perform advanced reporting MES, analytics, IoT, Big data type apps. One example is available to download here For More Info Overview of Parijat Drivers: Click here  Additional supporting Info about Parijat Drivers:Click here Complete Related Driver options: Click here     Submitter Scadadoctor Submitted 03/10/16 Category Other PLC Demo Software
  21. How to take single bit form input WORD by Structured Text? Can i write somethink like: inVar[i]