InitScripts() use

Tagged: 

Viewing 15 posts - 1 through 15 (of 15 total)
  • Author
    Posts
  • #15892
    詹森
    Participant

    Hello, Why did I add code under InitScripts() under Server methods, such as writing 1 to channel 19, and SetData(19, 1, 1) didn’t work

    public override void InitScripts()
    {
    SetData(19, 1, 1);
    }

    Thank you!

    #15893
    詹森
    Participant

    As if there is no call, or how to use it

    #15894
    manjey73
    Participant
    // Set the default setpoint value.  
    // For channels of the Calculated/output type
    public CnlData GetDefaultData(double val)
    {
      return Stat() > 0 ? Data() : NewData(val, 1);
    }
    
    // For a channel with the Integer data type 
    public CnlData GetDefaultDataInt(long val)
    {
      return Stat() > 0 ? Data() : NewData(BitConverter.Int64BitsToDouble(val), 1);
    }

    If I understood correctly, you want to initialize some variables.
    Here are the formulas that Mikhail once proposed.

    Formulas are used in the Input. GetDefaultData(1)
    SetVal(CnlNum, Cmd) is used for the output formulas

    • This reply was modified 7 months, 3 weeks ago by manjey73.
    #15896
    詹森
    Participant

    Okay, thank you. That solved my problem, and I want to know more

    public override void InitScripts ()
    {

    }

    How to use this method? Thank you!

    #15898
    Mikhail
    Moderator

    If you use some variables in your scripts, you can initialize them in the InitScripts method, for example. It is called once when Server starts.

    #15903
    詹森
    Participant

    How to achieve that the initial value of the channel is 0 every time the program service restarts (even if the value of the last run is not 0, it is reset to 0), and why does the default initial value of channel 11 not write?

    public override void InitScripts()
    {
    SetData(11, 0, 1);
    }

    #15904
    manjey73
    Participant

    I may be wrong, but it seems enough to specify Val() in the input formula and SetVal(CnlNum, Cmd) in the output, and when the Server starts, the channel will be 0.0, and after entering your value

    For Calculated/Output channels

    • This reply was modified 7 months, 3 weeks ago by manjey73.
    #15911
    詹森
    Participant

    public override void InitScripts()
    {
    // Put your initialization code here
    // Поместите сюда код инициализации

    SetData(1153, 0, 1);
    SetData(1154, 0, 1);
    SetData(1155, 0, 1);
    SetVal(1031, 0);
    SetVal(1032, 1);
    }

    hello, I now call SetVal(), but it doesn’t have any effect.

    GetDefaultData(Val)

    Judging that the state is 1, I will not initialize it again, and I need the channel to default to 0 every time I turn on, what else can I do? Thank you for your help.

    #15912
    manjey73
    Participant

    Explain for which types of channels do you want to set the values to 0 when the server starts?

    Show the settings of these channels

    #15913
    manjey73
    Participant

    Perhaps InitScripts() is intended for other things. And at this point, formulas like setData may not be valid yet.

    #15914
    manjey73
    Participant

    If you look at CalcEngine.cs, then InitScripts() goes first and only then SetData.
    When the server is started, this code is compiled every time.
    Using SetData inside Initscripts, do you encounter any errors?

    #15915
    manjey73
    Participant

    I checked, there are no errors during compilation, but it seems to me that you are trying to use an internal formula even before the server starts processing formula data. Most likely InitScripts is intended for other things.

    #15916
    manjey73
    Participant

    Just create your own formula in the script table, in which you can initialize any variables.
    I was doing something similar to version 5 to simulate non-volatile variables through files.
    In a simple version, it looks like this

    bool initVal = false;
    public double InitValues()
    {
    if (!initVal)
    {
    SetData(1153, 0, 1);
    SetData(1154, 0, 1);
    SetData(1155, 0, 1);
    SetVal(1031, 0);
    SetVal(1032, 1);
    initVal = true;
    }
    return Convert.ToDouble(initVal);
    }

    And most importantly, place the channel with the call of this formula at the very first in the channel database.
    Moreover, the formulas in the channels themselves can be any.

    #15918
    Mikhail
    Moderator

    Probably channel data is not ready when InitScripts is called.
    What kind of channels do you need to initialize?

    #15922
    詹森
    Participant

    Okay, thank you. I thought this method would call itself, so I think I got it. Thank you

Viewing 15 posts - 1 through 15 (of 15 total)
  • You must be logged in to reply to this topic.