5/18/2011 9:01 PM | |
Posts: 159 Rating: (3) |
Hello! I`m struggeling with similar problem. I have tried to put this code in a c-script (mouse click event on button), with no luck : struct Structure01 { unsigned Bit0: 1; unsigned Bit1: 1; unsigned Bit2: 1; unsigned Bit3: 1; unsigned Bit4: 1; unsigned Bit5: 1; unsigned Bit6: 1; unsigned Bit7: 1; } ,Object01; Object01 = (struct Structure01)GetTagByte("check2"); //Return-Type: BYTE if(Object01.Bit0); I have a checkbox (eight boxes), which is connected to a memory byte. I also have a button which has an mouse click event, to set a tag, if the checkbox is checked. In the mouse click event (c-script) I want to check if one of the checkboxes is checked, and then set another tag. How can I fetch the value of the different bits, in an if statement? Splitted from C code for getting bit from byte. |
Last edited by: O_Moderator at: 5/19/2011 8:39 AMnew subject after splitting |
|
This contribution was helpful to1 thankful Users |
5/19/2011 10:49 AM | |
Joined: 10/3/2010 Last visit: 9/20/2024 Posts: 1562 Rating: (191) |
Found this in old thread, you can try this in your code: to check if a bit is set or reset, use bitwise AND-operator "&"in "C". [code] WORD wValue; //tag wValue = GetTagWord("YourTagName"); if (wValue & 0x004){ //Bit 6 is set } else{ //Bit 6 is not set } [/code] bit number hexadecimal value Bit 0 0x0001 Bit1 0x0002 Bit2 0x0004 Bit3 0x0008 Bit4 0x0010 Bit5 0x0020 Bit6 0x0040 Bit7 0x0080 Bit8 0x0100 Bit9 0x0200 Bit 10 0x0400 Bit 11 0x0800 Bit 12 0x1000 Bit 13 0x2000 Bit 14 0x4000 Bit 15 0x8000 check multiple using bitwise OR-operator [code]WORD wValue; //tag wValue = GetTagWord("YourTagName"); if (wValue & (0x0004 | 0x0001)){ //0x0005 //Bit 0OR Bit 6 is set } else{ //Bit 0 AND Bit 6 are not set } [/code] Good luck |
B r g d s , |
|
This contribution was helpful to1 thankful Users |
5/19/2011 11:54 AM | |
Joined: 3/6/2008 Last visit: 2/5/2021 Posts: 139 Rating: (18) |
Hi, some answersare in /tf/WW/en/Posts/10865#top There is my contribution for code which is on one line:
Jaromir Hladik DEL a.s. Strojirenska 38 591 01 Zdar nad Sazavou http:\\www.del.cz |
Jaromir Hladik |
|
This contribution was helpful to1 thankful Users |
5/19/2011 5:22 PM | |
Posts: 159 Rating: (3) |
Thanx jaromir!! Lots of really handy tricks. |
5/27/2011 10:22 AM | |
Posts: 12 Rating: (2) |
Hi, Testermax! I wrote some macros for you, haven't tested them in runtime yet, but they should work.. You should add this code into [b]APDEFAP.H[/b] (located in YourProjectFolder\Library) so you can use them in any function or action in your project: // -------------------- Begin ----------------------------- #define GetBit(Value, BitNum) \ ((Value) & (1 << (BitNum)) != 0) #define ChangeBit(Value, BitNum, Bit) \ { \ unsigned SavedBitNum = (BitNum); \ Value &= ~(1 << (SavedBitNum)); \ Value |= ((Bit) != 0) << SavedBitNum; \ } #define Vt_Byte BYTE #define Vt_Word WORD #define Vt_DWord DWORD #define ChangeBitTag(TagName, TagType, BitNum, Bit) \ { \ Vt_##TagType TagValue = GetTag##TagType(TagName); \ Vt_##TagType SavedBitNum = (BitNum); \ TagValue = (Vt_##TagType)(TagValue & (1 << SavedBitNum)); \ TagValue = (Vt_##TagType)(TagValue & (((Bit) != 0) << SavedBitNum)); \ SetTag##TagType(TagName, TagValue); \ } // -------------------- End ----------------------------- GetBit returns TRUE if bit number BitNum is set in Value. SetBit replaces Bit (FALSE or TRUE) with number BitNum in value of variable Value (note that Value must be l-side). ChangeBitTag replaces Bit (FALSE OR TRUE) with number BitNum in value of tag named TagName. Type of tag is one of following: Byte - for unsigned 8 bit tags Word - for unsigned 16 bit tags DWord - for unsigned 32 bit tags. P.S. Ensure that NO spaces placed after '\' symbols in ChangeBitTag definition!! And use that macros in any function or action, for example: For example: [code] #define TAG "My_Tag" DWORD MyValue = GetTagDWord(TAG); if (GetBit(MyValue, 10)) { // Do Something if 10th bit is set. } [/code] [code] #define TAG "My_Tag" DWORD MyValue = GetTagDWord(TAG); // Sets 0th bit ChangeBit(MyValue, 0, TRUE); // Resets 2th bit ChangeBit(MyValue, 2, FALSE); // Do something with MyValue [/code] [code] // Sets 15th bit in tag named "MyTag_32bit" (unsigned 32 bit tag). ChangeBitTag("MyTag_32bit", DWord, 15, TRUE); // Sets 3th bit in tag named "MyTag_16bit" (unsigned 16 bit tag). ChangeBitTag("MyTag_16bit", Word, 3, TRUE); // Resets 1th bit in tag named "MyTag_8bit" (unsigned 8 bit tag). ChangeBitTag("MyTag_8bit", Byte, 1, FALSE); [/code] Here is modified apdefap.h (in zip archive). Before replacing original apdefap.h ensure that it doesn't contain user code. AttachmentAPDEFAP.zip (472 Downloads) |
Last edited by: Alexey_Spb at: 5/27/2011 10:42 AMLast edited by: Alexey_Spb at: 5/27/2011 10:37 AMLast edited by: Alexey_Spb at: 5/27/2011 10:24 AM |
|
This contribution was helpful to2 thankful Users |
4/27/2014 7:20 PM | |
Joined: 7/20/2007 Last visit: 9/19/2024 Posts: 43 Rating: (4) |
Hi, WinCC- C function to Set/Get a individual bit from byte,word, dword. How to install this read in this article. Thanks for you time! |
plc.nanospic.com |
|
This contribution was helpful to1 thankful Users |
4/28/2014 12:59 PM | |
Posts: 340 Rating: (6) |
new question is splittet to symbol and operator in C script |
8/1/2015 1:31 PM | |
Joined: 12/27/2013 Last visit: 9/24/2024 Posts: 22 Rating: (0) |
Dear all, Kindly give same example in VB Script it may help to me |
8/3/2015 7:25 AM | |
Joined: 2/21/2014 Last visit: 8/13/2024 Posts: 652 Rating: (348) |
try WinCC V7.3 Scripting: VBS, ANSI-C, VBA https://support.industry.siemens.com/tf/ww/en/posts/scripts/64105/?page=0&pageSize=10 and https://support.industry.siemens.com/cs/mdm/102777678?c=70765906699&t=1&s=wincc" scripting&lc=en-WW
|
Last edited by: HarrY ji at: 8/3/2015 7:27:13 AMYou can always use "Rate" and "To Thank" button to appreciate my efforts in helping you :) |
|
Follow us on