Стартовая страница › Форумы › Разработка и интеграция › CustomParams считать до обнуления ?
- В этой теме 23 ответа, 3 участника, последнее обновление 3 года, 11 месяцев назад сделано Mikhail.
-
АвторСообщения
-
25.05.2020 в 15:41 #16217manjey73Участник
Вопрос, можно ли как-то считать CustomParams до их обнуления при выполнении OnAddedToCommLine ???
з.ы. в принципе место для хранения данных при перезапусках линии, но при добавлении линии и их возможности использовать они обнуляются при старте линии. Или я что-то делаю не так ?
Речь о файлах Kp0xx.txt
- Эта тема была изменена 3 года, 11 месяцев назад от manjey73.
25.05.2020 в 16:39 #16222manjey73Участник<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.
25.05.2020 в 17:21 #16227MikhailМодераторНужно написать свой метод SaveParams, который будет сохранять параметры в файл в папку Storage.
В обработчиках OnCommLineTerminate и OnCommLineAbort вставить вызов метода SaveParams.
А в OnCommLineStart вставить свой метод загрузки параметров LoadParams.25.05.2020 в 17:22 #16228MikhailМодераторТ.к. методы OnCommLineStart, OnCommLineTerminate и OnCommLineAbort вызываются для каждого КП, а классе сохраняемых параметров нужно завести признак загрузки и сохранения, чтобы не выполнять загрузку/сохранение несколько раз.
25.05.2020 в 17:34 #16231manjey73УчастникСо своим файлом понятно, так если несколько КП, то каждый по очереди должен открыть, записать свои данные и сохранить, но насколько понимаю, одним файлом не полуится обойтись, Придется создавать файлы для линий связи ?
Или как-то можно сделать так, чтобы для одного драйвера был единственный файл сохранения для всех КП сразу ? Куда в данном случае смотреть ?
КП выполняются последовательно, если они на одной линии то это один поток, а если линий 2 и более то это несколько потоков. Можно ли в данном случае обойтись одном файлом ?
25.05.2020 в 20:32 #16233manjey73УчастникСуть чтобы не плодить сущности в виде кучи файлов ради одной переменной. По принципу один драйвер, один файл для сохранения, независимо от количества КП, вызывающих данный драйвер.
25.05.2020 в 23:11 #16239manjey73УчастникДля начала хочется понять, что происходит при вызове OnCommLineStart, OnCommLineTerminate и OnCommLineAbort
Точно последовательное исполнение этих секций из списка КП на линии связи или есть нюансы ? ну как типа при 2-х КП на линии
в OnAdded
1. КП в списке номер 0 добавляется на линию
2. КП в списке номер 1 добавляется на линию
On LineStart
3. КП в списке номер 0 стартует на линии
4. КП в списке номер 1 стартует на линии
OnLineTerminate
5. КП в списке номер 0 останавливается на линии
6. КП в списке номер 1 останавливается на линииИли в некоторых случаях такая последовательность может быть нарушена ?
Линия связи есть один поток собственно ?
- Этот ответ был изменен 3 года, 11 месяцев назад от manjey73.
26.05.2020 в 09:40 #16241manjey73Участниккод, который работает в OnAddedToCommLine и добавляет CustomParams, не работает в OnCommLineStart переменная просто не создается.
26.05.2020 в 17:36 #16243MikhailМодераторПроще сделать отдельный файл для каждого КП. В случае одного файла непонятно как собирать данные с различных КП для сохранения и как забирать считанные данные.
В рамках одной линии связи последовательность вызова методов фиксирована. Можно вставить в них WriteToLog(имя метода) и точно её увидеть.
Линия связи — один поток.код, который работает в OnAddedToCommLine и добавляет CustomParams, не работает в OnCommLineStart переменная просто не создается.
Нужно смотреть в отладчике как он срабатывает.
26.05.2020 в 17:58 #16244manjey73УчастникОтлично, если линия связи один поток и выполнение строго последовательно, мне этого хватит.
Номер линии связи так и нельзя узнать из драйвера ? было бы полезным в будущем.
Прочитать и записать данные вроде не проблема, forech в помощь, что-то похожее уже творил…
Хочу сократить сущности в виде множества файлов. Хотя бы уменьшить их до количества линий связи…
26.05.2020 в 20:18 #16245manjey73УчастникБлин, была возможность получить список всех КП на линии из драйвера, не могу найти где…
27.05.2020 в 08:47 #16246manjey73УчастникCommLineSvc.Number — так понимаю это и есть номер линии связи ?
Тогда второй вопрос остался, как получить список всех КП на линии ? без сортировки желательно.
27.05.2020 в 13:19 #16252manjey73Участник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 это два КП для второго счетчика. Где засада ?
27.05.2020 в 13:24 #16253manjey73Участника, блин, разобрался… у меня же по адресам приборов формируется CommonProps
27.05.2020 в 17:23 #16266MikhailМодераторOK
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.