JW

Forum Replies Created

Viewing 15 posts - 1 through 15 (of 93 total)
  • Author
    Posts
  • in reply to: Entering number from browser #10257
    JW
    Participant

    You will need to create an extra output channel to do that.
    https://rapidscada.net/doc/content/latest/en/software-configuration/using-formulas.html

    Create an output channel, maybe also use same channel number 112 as follow
    Command Type: Standard
    Formula Used: True
    Fomula: SetVal(112,Cmd)

    Button settings
    Action: Send command
    Input Channel: empty
    Output Channel: 112

    in reply to: Rapid SCADA 6 Beta #10248
    JW
    Participant

    Any plan for PlgNotification?

    in reply to: Rapid SCADA 6 Beta #10044
    JW
    Participant

    Installation and Basic Test:
    1. Installation on both Windows 10 and Ubuntu 20.04 Tested OK.
    2. A bug of WebApp not refreshing after switching between views on Firefox seems no longer there.

    A few suggestion For ScadaAdmin App:
    1. Make the search and replace function applicable for the enable (checkbox) fields.
    2. Is it possible to copy an array / list from excel and paste it to the ScadAdmin table? at least for the number and text field, such as channel name, formula.
    3. The linux pack no longer has ScadaAdmin. In v5 I can use mono to run ScadaAdmin GUI to modify settings and upload projects. Is there any features that allow user to at least upload a project from Linux desktop or command line?

    some know bug /limitation on v5 I am going to test.
    1. On V5 if the formula used channel exceed ~1.5k, the server will crash.
    2. On V5 if the reading of 1 device exceed ~4k, communicator will not be able send to to server.

    in reply to: Basic Scada Functions #9802
    JW
    Participant

    I’m not sure if I understand you correctly. Do you mean create a template for 1 machine (with pictures, texts, buttons), then apply the template to multiple machine?

    Now there is no such function. I use a workaround for similar requirements.

    The scheme .sch file is actually XML file. I create 1 set of the machine manually, then write a script to edit the .sch file, copy and multiple the manually created one, and change x-y coordinates, input channels and etc…

    in reply to: Modbus Comm Bug #9720
    JW
    Participant

    What does the following log mean? No reply within “Timeout” period or “Delay” period? Or socket throws an exception or receive an empty message?
    8. Receive (0 / 7):
    9. Communication error!

    I still get this error from time to time, even the communication line is connecting to a virtual device on localhost. Sometimes it never happened in months, sometimes it happened a few times in an hour.

    in reply to: How to make Led blinking #9712
    JW
    Participant

    the trick is set two “ON” states for your led, and toggle between them.
    set a led with condition
    0; 1; 2 for silver; light green; green.

    assume you have multiple led, they should blink at the same time.

    step 1, defind a function in formula, which is the value of second of current time.
    ———
    double Second(DateTime dt){
    double en_dt = EncodeDate(dt);
    double s = Math.Truncate(en_dt * 24 * 60 * 60) % 60;
    return s;
    }
    ——–

    you can have 1 input channel for device status, e.g. Cnl 1001
    0; 1 for off; on

    then you setup an other channel for led, e.g. 1002,
    set formula
    Val(1001)==0?0:Val(1001)+Second(DateTime.Now)%2

    then the value will toggle between 1 and 2 every second when the device is on, and remain 0 when the device is off.

    in reply to: Modbus Comm Bug #9709
    JW
    Participant

    For error handling, in case any request and reply sequence get messed up, I am thinking the following approach.

    after the error of line 7 and 8, I would run and wait an additional loop of sock.recv() for a period (maybe same time of timeout), and then discard of all the data of this recv. in the above case, it would get line 12 and line 16 and so on.

    then send a new request of line 11, then the reply should be correct from now on.

    in reply to: 关于ScadaServer进程内存占用率过高的问题 #9708
    JW
    Participant

    客户端是长时间开着浏览器查看GUI吗?

    在测试环境试试不使用SQL转存模块,看看有没有这个问题?

    看看以下几个日志有没有异常。
    SCADA/ScadaServer/Log/ScadaServerSvc.log
    SCADA/ScadaWeb/log/ScadaWeb.log
    SQL模块应该也有个单独的日志

    in reply to: Modbus Comm Bug #9707
    JW
    Participant

    Hi Mikhail,

    Recently when I implementing a TCP protocol, I encounter a problem with similar symptoms of this Modbus issue.

    I am going to use the Modbus error as example. I label the following error message with line number.
    ————————————–
    1. Request element group “ch1.011”
    2. Send (12): 05 42 00 00 00 06 01 03 04 4C 00 64
    3. Receive (7 / 7): 05 42 00 00 00 CB 01
    4. Receive (202 / 202): 03 C8 42 0A 8A 3D 42 0A E6 66 42 0B 41 89 42 0B 9C AC ….
    5. OK!
    6. Request element group “ch1.012”
    7. Send (12): 05 43 00 00 00 06 01 03 04 4C 00 64
    8. Receive (0 / 7):
    9. Communication error!
    10. Request element group “ch1.012”
    11. Send (12): 05 44 00 00 00 06 01 03 04 4C 00 64
    12. Receive (7 / 7): 05 43 00 00 00 CB 01
    13. Incorrect MBAP Header data!
    14. Request element group “ch1.012”
    15. Send (12): 05 45 00 00 00 06 01 03 04 4C 00 64
    16. Receive (7 / 7): 03 C8 42 IA FC EE 42
    17. Incorrect MBAP Header data!

    18. 2021-01-11 23:28:40 Disconnect from 127.0.0.1
    ————————————–

    Line 7 sent a request(05 43) but did not get proper reply.
    Line 11 sent a new request(05 44). then line 12 receive data(05 43), but which is the reply of header of line 7 request(05 43). it was considered incorrect because it did not match with line 12 request.
    Line 15 sent a new request again. then line 16 receive data, which is the body of the reply of header of line 7 request(05 43). it was considered incorrect again because it did not match with line 12 request nor the header format.

    The reason I got this error is as follow. (I guess the Modbus driver may have similar issue but not sure).

    For such small amount of data, I assumed it will be always receive at 1 try.
    So I use sock.recv(7) to get header, then calculate the length of data from header, e.g. 0xCB = 203, the reset of data should be 203-1=202, then I use sock.recv(202) to get the rest of the data body.

    But I found very rarely, it will only get e.g. maybe 100 bytes of data on sock.recv(202) or 5 bytes on sock.recv(7). This will not only create 1 error of incomplete reply, but also messed up the following sequence.

    So I changed to use a while loop to receive data, to make I received the proper length of data. something like the sudo code below.

    recv_data = bytearray()
    while recv_data_length < expected_length:
    recv_data += sock.recv(expected_length-recv_data_length)

    in reply to: 关于ScadaServer进程内存占用率过高的问题 #9704
    JW
    Participant

    哪个版本的SCADA?

    28000点中,使用函数的有多少? 我以前测试的情况是超过12000点使用函数,scadasever会崩溃,后来版本更新,好像可以使用更多一些。

    我也有很多项目是2万点以上,但是大部分是没有函数的,暂时没有遇到这个问题。

    另外可以检查自定义函数里面是否有不停创建新对象。

    in reply to: 报警里的 Undefined是什么意思 #9552
    JW
    Participant

    可以考虑以下几个措施同时采用

    1. 对应的Channel不勾选Event on undefined;
    2. Instance -> Server -> Saving parameters -> Unreliable on inactive 选择 disable, 或者根据需要设置1小时等长时间;
    3. 对应的Channel设置以下公式,如果返回值是nan,会保留上一轮的值而不更新返回的值。
    double.IsNaN(Cnl)?Val():Cnl

    in reply to: 报警里的 Undefined是什么意思 #9393
    JW
    Participant

    读取或计算得出的Val为NaN的话,会自动设置对于Stat为0,是某个版本开始加入的特性。

    in reply to: 报警里的 Undefined是什么意思 #9392
    JW
    Participant

    不要勾选Input channel的Event on undefined。

    例如Modbus通信偶尔某次获取不到内容,对应通道Stat会变成0,如勾选了上述选项,会出现undefined事件。然后下次通讯成功获取信号后,会出现Normal事件。

    in reply to: Auto control module settings #9387
    JW
    Participant

    tested both solutions, decided to use 2nd one.

    the 1st one is more elegant but create a lot of log in auto control module event canceling the cmd.
    the 2nd one is cumbersome when need to control a lot of relay points, but no other side effects.

    in reply to: Send command with button #9386
    JW
    Participant

    changing the value of input channel doesn’t send command to linked output channel.

    if you need auto sync, you will need auto control module.

    if you just want to send cmd to device and set value of an input channel at the same time once you press a button, you can create a formula

    int CmdExample(int c, int v)
    {
    SetVal(c,v);
    return v;
    }

    set the device and cmd number of out channel 60000 same as out channel 21094
    and enable formula of out channel 60000,
    CmdExample(11094,5)

Viewing 15 posts - 1 through 15 (of 93 total)