Forum Replies Created
-
AuthorPosts
-
manjey73ParticipantGetAnyBits(Val(1080), 3, 7)
Val(XXX) – Where is the XXX number of your channel00000111 is the number 7 in the bit representation
When you need to select 3 bits in a value, you need to make a logical AND with the bits you need, and depending on which bits from the beginning you want to compare, you need to shift the bits you need so that they turn out to be starting from the zero bit00001111 is the number 15, which will correspond to four consecutive bits
00000011 is the number 3, which will correspond to two consecutive bits
01010110 – Your certain number for checking 3 bits. You need to shift this representation to position 0 (n = 2) 00010101 and make AND with the number 7 (00000111)
manjey73Participant00111000
The 0th bit is on the right. You need to shift by 3
GetAnyBits(Val(XXX), 3, 7) like this
-
This reply was modified 1 year, 10 months ago by
manjey73.
manjey73Participantpublic double GetAnyBits(double val, int n, int mask = 1)
{
ulong ulVal = (ulong)val;
return (ulVal >> n) & (ulong)mask;
}I haven’t checked, but the mask should work by default. The mask is 1. Which fully corresponds to the getBit formula
You can set 3, 7, and so on.
n is the offset
manjey73Participantpublic double GetThreeBit(double val, int n)
{
ulong ulVal = (ulong)val;
return (ulVal >> n) & 7ul;
}Here the number 7 (00000111) is used as a mask
manjey73ParticipantIf you always need to pull out 2 bits each, then you can make one formula, just like getBit. If your pairs may differ, then you will need to make a formula and install it with your hands. Modify getBit into a different formula
public double GetTwoBit(double val, int n)
{
ulong ulVal = (ulong)val;
return (ulVal >> n) & 3ul;
}Here 3ul is the number 3 (00000011) and by shifting the bits by the right amount you make a logical one with two bits at once, and not one as in getBit. You can look at how much you need to shift in a calculator or even on a piece of paper.
-
This reply was modified 1 year, 10 months ago by
manjey73.
manjey73ParticipantPerhaps the username and password should still appear in the request, even if they are empty
manjey73ParticipantAnother option is to use the Auto-control Module and calculation channels for the values. But it seems to be superfluous here if Modbus is used
manjey73ParticipantHmm, sending different values from different buttons but to the same channel is a rare task. I remember there was such a problem, just related to the fact that it is impossible to specify a value when selecting “Send command immediately”
You need to make several calculation channels that will have their own formulas with different values to specify these channels in the buttons.
The Modbus device to which you are sending commands?
Add additional commands to the template that will lead to the same register and link them to the created channels.
manjey73ParticipantOnce you have indicated that the channel type is hex, write in the output formula of channel 111e and specify “Send command immediately” on the mnemonic and check.
If you need to send different values using different buttons, then you probably need to write a formula and use an enumeration.
manjey73ParticipantWhat do you enter when the command window opens and it works as it should?
manjey73ParticipantYes, it seems enough to specify the values in the output formula, but you have a value in hex format – 111e. You need to try, the output variable will also be double, you will probably need to convert it, for example, into a byte array, that is, use CmdData instead of Cmd
manjey73Participant@redass
When using the mnemonic circuit, there is a “Send command immediately” mode, by default the command sends a value of 0, which can be changed by the output formula of the channel at your discretion.
manjey73ParticipantI wrote examples when the scada script takes data from a file, for example. without creating a driver
manjey73Participantor if the code is very simple, try using it in scada scripts
manjey73Participantwrite a simple driver where your code, when going somewhere for the weather, will give you data as channel values.
-
This reply was modified 1 year, 10 months ago by
-
AuthorPosts