CustomParams считать до обнуления ?

Стартовая страница Форумы Разработка и интеграция CustomParams считать до обнуления ?

Просмотр 15 сообщений - с 1 по 15 (из 24 всего)
  • Автор
    Сообщения
  • #16217
    manjey73
    Участник

    Вопрос, можно ли как-то считать CustomParams до их обнуления при выполнении OnAddedToCommLine ???

    з.ы. в принципе место для хранения данных при перезапусках линии, но при добавлении линии и их возможности использовать они обнуляются при старте линии. Или я что-то делаю не так ?

    Речь о файлах Kp0xx.txt

    • Эта тема была изменена 3 года, 11 месяцев назад от manjey73.
    #16222
    manjey73
    Участник
          <LineParams>
            <Param name="ReqTriesCnt" value="2" descr="Количество попыток перезапроса КП при ошибке" />
            <Param name="CycleDelay" value="0" descr="Задержка после цикла опроса, мс" />
            <Param name="CmdEnabled" value="true" descr="Команды ТУ разрешены" />
            <Param name="ReqAfterCmd" value="true" descr="Опрос КП после команды ТУ" />
            <Param name="DetailedLog" value="true" descr="Записывать в журнал подробную информацию" />
          </LineParams>
          <CustomParams>
            <Param name="64_pass" value="111111" />
          </CustomParams>

    Поставлю вопрос иначе, можно ли сюда `<CustomParams>
    <Param name=»64_pass» value=»111111″ />
    </CustomParams>` записать новый параметр из KpLogic и передать серверу без его перезапуска, чтобы он сохранил новые данные из кода драйвера ?

    Или это утопия ? з.ы. ну не хватает сохраняемых данных для КР…..

    • Этот ответ был изменен 3 года, 11 месяцев назад от manjey73.
    #16227
    Mikhail
    Модератор

    Нужно написать свой метод SaveParams, который будет сохранять параметры в файл в папку Storage.
    В обработчиках OnCommLineTerminate и OnCommLineAbort вставить вызов метода SaveParams.
    А в OnCommLineStart вставить свой метод загрузки параметров LoadParams.

    #16228
    Mikhail
    Модератор

    Т.к. методы OnCommLineStart, OnCommLineTerminate и OnCommLineAbort вызываются для каждого КП, а классе сохраняемых параметров нужно завести признак загрузки и сохранения, чтобы не выполнять загрузку/сохранение несколько раз.

    #16231
    manjey73
    Участник

    Со своим файлом понятно, так если несколько КП, то каждый по очереди должен открыть, записать свои данные и сохранить, но насколько понимаю, одним файлом не полуится обойтись, Придется создавать файлы для линий связи ?

    Или как-то можно сделать так, чтобы для одного драйвера был единственный файл сохранения для всех КП сразу ? Куда в данном случае смотреть ?

    КП выполняются последовательно, если они на одной линии то это один поток, а если линий 2 и более то это несколько потоков. Можно ли в данном случае обойтись одном файлом ?

    #16233
    manjey73
    Участник

    Суть чтобы не плодить сущности в виде кучи файлов ради одной переменной. По принципу один драйвер, один файл для сохранения, независимо от количества КП, вызывающих данный драйвер.

    #16239
    manjey73
    Участник

    Для начала хочется понять, что происходит при вызове OnCommLineStart, OnCommLineTerminate и OnCommLineAbort

    Точно последовательное исполнение этих секций из списка КП на линии связи или есть нюансы ? ну как типа при 2-х КП на линии
    в OnAdded
    1. КП в списке номер 0 добавляется на линию
    2. КП в списке номер 1 добавляется на линию
    On LineStart
    3. КП в списке номер 0 стартует на линии
    4. КП в списке номер 1 стартует на линии
    OnLineTerminate
    5. КП в списке номер 0 останавливается на линии
    6. КП в списке номер 1 останавливается на линии

    Или в некоторых случаях такая последовательность может быть нарушена ?

    Линия связи есть один поток собственно ?

    • Этот ответ был изменен 3 года, 11 месяцев назад от manjey73.
    #16241
    manjey73
    Участник

    код, который работает в OnAddedToCommLine и добавляет CustomParams, не работает в OnCommLineStart переменная просто не создается.

    #16243
    Mikhail
    Модератор

    Проще сделать отдельный файл для каждого КП. В случае одного файла непонятно как собирать данные с различных КП для сохранения и как забирать считанные данные.

    В рамках одной линии связи последовательность вызова методов фиксирована. Можно вставить в них WriteToLog(имя метода) и точно её увидеть.
    Линия связи — один поток.

    код, который работает в OnAddedToCommLine и добавляет CustomParams, не работает в OnCommLineStart переменная просто не создается.

    Нужно смотреть в отладчике как он срабатывает.

    #16244
    manjey73
    Участник

    Отлично, если линия связи один поток и выполнение строго последовательно, мне этого хватит.

    Номер линии связи так и нельзя узнать из драйвера ? было бы полезным в будущем.

    Прочитать и записать данные вроде не проблема, forech в помощь, что-то похожее уже творил…

    Хочу сократить сущности в виде множества файлов. Хотя бы уменьшить их до количества линий связи…

    #16245
    manjey73
    Участник

    Блин, была возможность получить список всех КП на линии из драйвера, не могу найти где…

    #16246
    manjey73
    Участник

    CommLineSvc.Number — так понимаю это и есть номер линии связи ?

    Тогда второй вопрос остался, как получить список всех КП на линии ? без сортировки желательно.

    #16252
    manjey73
    Участник
    CommonProps.Count 1
    Номер КП из общих свойств 64
    CommonProps.Count 1
    Номер КП из общих свойств 65
    CommonProps.Count 2
    Номер КП из общих свойств 73

    Объясните такое поведение. в коде OnCommLineStart() вызывается GetMyDevice();

            private MyDevice GetMyDevice()
            {
                MyDevice devaddr = CommonProps.ContainsKey(address) ?
                    CommonProps[address] as MyDevice : null;
    
                if (devaddr == null)
                {
                    devaddr = new MyDevice();
                    if (!CommonProps.ContainsKey(address))
                    {
                        CommonProps.Add(address, devaddr);
                    }
                }
                return devaddr;
            }
    

    Почему счетчики CommonProps.Count в первых двух случаях 1, а в третьем 2 ?????

    При этом КП73 это вызов драйвера на один счетчик, а 64 и 65 это два КП для второго счетчика. Где засада ?

    #16253
    manjey73
    Участник

    а, блин, разобрался… у меня же по адресам приборов формируется CommonProps

    #16266
    Mikhail
    Модератор

    OK

Просмотр 15 сообщений - с 1 по 15 (из 24 всего)
  • Вы должны авторизироваться для ответа в этой теме.