Forum Replies Created
-
AuthorPosts
-
manjey73Participant
It seems there were publications on the Russian forum. As far as I understand, there is a difficulty only in transferring the database
manjey73ParticipantTip: upgrade to version 6, it is somewhat more flexible
manjey73ParticipantOn the 5th version, there is no channel display as a HEX number, as in the 6th version. Most likely only using ASCII String with the corresponding transformations using formulas.
manjey73ParticipantThen you probably need a trigger to change the channel and specify “Send command” in the command.
And if necessary, use the formula in the command to check the value for the range 0-100 and, if it goes beyond the range, return Double.NaN to cancel the command
manjey73ParticipantTrigger parameters check Value. Edit Value = 15
Command Value = 15manjey73Participantpublic byte[] NewFreq1() { string tes = Encoding.UTF8.GetString(CmdData); uint teu = uint.Parse(tes)*100; byte[] teb = BitConverter.GetBytes(teu); return new byte[] { 0x00, 0x01, teb[1], teb[0]}; }
We use the Binary command type and enter 30 and so on in string mode (not Hex)
manjey73Participanttest script
public byte[] NewFreq1() { return new byte[] { 0x00, 0x01, CmdData[0], CmdData[1]}; }
Using string input, with the Binary command type, you can accurately convert the entered digits to uint and add them to the block of data being sent.
manjey73ParticipantSo it’s strange to me that when sending a Cmd command, it is a double, and in theory, returning a double formed from the required bytes, we should send something other than say 30, which we enter. But for some reason nothing happens.
However, if we use Binary, we can send anything in a byte array, but then we need to somehow convert the received value first into a string, then again into the required bytes, etc.
I don’t know if it is available for formulas in the 5th version of the ScadaUtils function to do this.
Via string here (not Hex) I haven’t tried it yet, there you can use the language to form an array according to the idea.manjey73ParticipantThe formula does not cause an error on the 5th version, but always sends 0 for some reason
manjey73Participantpublic double NewFreq() { byte[] freq = BitConverter.GetBytes((uint)Cmd*100); byte[] res = new byte[] { 0x00, 0x01, freq[1], freq[0], 0x00, 0x00, 0x00, 0x00 }; return BitConverter.ToDouble(res, 0); }
Return the command type to Standard and try the following formula
It may be necessary to play with the location of bytes in the array
byte[] res = new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x01, freq[1], freq[0] };
But in theory, the first option in the formula should workmanjey73ParticipantYou would change version 5 to version 6, some things are much simpler there
If I’m not mistaken, on the 5th version in Binary mode, when entering HEX, a byte array is returned, and this should be taken into account in the formula.
manjey73ParticipantWhen entering the value 30 in binary form, it is entered as a string and BitConverter cannot be applied here.
manjey73ParticipantFor the 5th version, the formula is likely to be different, since you are forced to enter a HEX value.
The 6th version is somewhat more flexible in terms of formula implementations
manjey73ParticipantOops, do you have Scada version 5? I don’t know if it’s possible to do this on the 5th version, I haven’t tried it before.
manjey73ParticipantMikhail, a person wants to drive just a frequency number, but at the same time he needs a command to be added to the byte array that allows changing this frequency. The formula that I have given is working, it is simply necessary to provide a command in the device template to get it. We did this with recording time in several registers.
-
AuthorPosts