Стартовая страница › Форумы › Разработка и интеграция › Объявление переменных в KpLogic
- В этой теме 72 ответа, 3 участника, последнее обновление 8 лет, 1 месяц назад сделано
Mikhail.
-
АвторЗаписи
-
02.07.2018 в 14:39 #9817
manjey73УчастникЕсли передавать данные через глобальные переменные, то все прекрасно работает только с одним прибором 🙂
Стоит подключить второй прибор и аля-улю…. усе пропало шеф! 🙂02.07.2018 в 15:00 #9818
manjey73УчастникЕсли пытаюсь сделать зависимый класс или наследуемый, как правильно…
например так в другом cs
public class CreateTelegram : KpMbusLogic
{}
То дает такую ошибку
Ошибка CS7036 Отсутствует аргумент, соответствующий требуемому формальному параметру «number» из «KpMbusLogic.KpMbusLogic(int)». KpMbusИ как тогда сделать наследуемый класс ???? Вроде тогда переменные можно обозначать как protected и они должны будут быть доступны в наследуемом классе. Или это уже другие дебри ?
02.07.2018 в 15:37 #9819Romiros
УчастникНаследование это не то. И создавать экземпляр KpLogic не надо.
Не должны другие классы гонять между собой шаблон. KpLogic должен вызывать публичные методы из других классов для корректировки devTemplate.
02.07.2018 в 16:05 #9820
manjey73УчастникЕсли другие классы не должны гонять шаблон то как тогда быть к KpLogic и KpView ?
Ведь все настройки выполняются в KpView.Вот банально — как передать private bool в другой cs , не делая его статическим ?
или массив байт, или float ?02.07.2018 в 16:25 #9821Romiros
УчастникKpLogic и KpView взаимодействуют через файл xml.
Через публичные методы.
В ваших cs файлах должны быть методы по созданию переменных в devTemplate. Вызывать их из KpLogic и всё.02.07.2018 в 16:25 #9822
MikhailМодераторНужно уточнить, какие классы драйвера должны видеть Ваш объект, о котором идет речь? Он должен быть виден из нескольких КП на линии связи или как-то ещё?
02.07.2018 в 16:27 #9823
MikhailМодераторкак передать private bool в другой cs
Передача происходит не в cs, а между объектами. Одному классу описанному в cs могут соответствовать как один так и множество созданных объектов. Ссылка на эти объекты есть у того объекта, который их создал. Чтобы разобраться, можно почитать по ссылке.
02.07.2018 в 16:30 #9824
MikhailМодераторНапример, ссылки на объекты КП хранятся в объекте линии связи, который является частью Коммуникатора.
Если Вы создадите новый класс из своего объекта КП, то именно этот объект будет видеть новый класс, а другие КП не будут его видеть (за исключением static).
02.07.2018 в 16:35 #9825
manjey73УчастникПросто хотел разбить код на несколько cs в одной dll. Пока делал со static то все работало как надо. Теперь удобство закончилось, так как так делать оказалось нельзя.
А у меня в другом cs шла обработка телеграммы и запись всех данных в шаблон.
Так же переменные шаблона использовались для сохранения всех значений при чтении.
После чего происходил возврат в основной cs (KpMbusLogic) и вывод всех значений в Scada (SetCurData).
Для обработки мне необходимо было несколько bool переменных передать, массив байт и собственно копию класса, где описаны все переменные.Сейчас вот банальную bool не понимаю как передать. ну или всю копию класса, чтобы проще было потом обрабатывать.
02.07.2018 в 16:57 #9826
manjey73УчастникПолучается что весь код необходимо писать в KpMbusLogic.cs и по другому никак ?
Потому что Коммуникатор вызвав DLL сделает все переменные только для этого экземпляра…02.07.2018 в 17:20 #9827Romiros
УчастникНе надо весь код писать в одном месте. Вы сами пишите, что в другом cs шла обработка телеграм. Вот и отправляйте их на обработку вызывая объект из другого cs и передавая ему данные из KpLogic
02.07.2018 в 17:37 #9828
manjey73УчастникВот я и не могу понять как передавать данные между двумя классами не используя static.
То есть банальная передача блока данных из одного класса в другой, обработка и возвращение обратно.static использовать нельзя, так как Коммуникатор, вызвав dll от КП другого прибора затрет эти данные.
То есть в другом классе не просто функции, там большая обработка, которая должна занести данные в переменные template отдельно созданного экземпляра еще в KpMbusLogic
-
Ответ изменён 8 лет, 2 месяца назад пользователем
manjey73.
02.07.2018 в 20:40 #9830Romiros
Участникотдельно созданного экземпляра еще в KpMbusLogic
У Вас несколько экземпляров KpMbusLogic?
02.07.2018 в 21:02 #9831
manjey73Участникв dll экземпляр один, но когда в Коммуникаторе мы создаем Опрос КП и в каждом указываем одну библиотеку, то ее вызовов становится ведь несколько.
Сейчас перенес все в KpMbusLogic, в том числе и код, который разбирает телеграмму, но получилась большая простыня кода, когда разные участки кода в разных cs в библиотеке удобнее.
Последовательность примерно такая.
KpMbusLogic создает экземпляр класса DevTemplate, считывает в него из xml данные (десериализация).
Далее в зависимости от требования инициализации опрашивает прибор и отправляет полученную телеграмму на разбор ху-из-ху…
При разборе в класс добавляются списки переменных
Если запросов несколько, то цикл повторяется — опрос, разбор, добавление списка переменных.
Далее происходит сериализация и запись xml, запрет инициализации.Если инициализация уже была, то читается xml, на основе списка переменных создаются теги а далее как и выше, только после разбора вывод переменных в Scada.
Вот разбор и хотелось бы вынести в отдельный класс. Но так как использовать глобальные переменные нельзя (первоначально так и работало, пока я не подключил второй прибор) то непонятно как класс разбора будет обрабатывать (читать и изменять) данные из экземпляра класса DevTemplate, созданного в KpMbusLogic ?
А заодно еще передавать дополнительные данные в зависимости от типов переменных обратно в KpMbusLogic, кроме DevTemplate и использовать часть вспомогательных переменных из KpMbusLogic.з.ы. в ПЛК на МЭК языках если делаешь функциональный блок, то
1. у блока можно сделать несколько выходов и передавать несколько различных данных в ответе
2. под каждый вызов блока ядро выделяет под переменные собственный блок памяти.
Два блока не мешают друг другу.
Думал тут в языке примерно так же, если несколько вызовов dll происходит… Либо я не понимаю как это реализовать ?02.07.2018 в 21:06 #9832
manjey73УчастникВот на счет protected указано, что наследуемый класс получает полный доступ к объявленным в родительском классе переменным, но чего-то у меня лыжи не поехали с ним. Не пойму как сделать наследуемый класс для проверки.
-
Ответ изменён 8 лет, 2 месяца назад пользователем
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.