Объявление переменных в KpLogic

Стартовая страница Форумы Разработка и интеграция Объявление переменных в KpLogic

Просмотр 15 сообщений - с 16 по 30 (из 73 всего)
  • Автор
    Записи
  • #9817
    manjey73
    Участник

    Если передавать данные через глобальные переменные, то все прекрасно работает только с одним прибором 🙂
    Стоит подключить второй прибор и аля-улю…. усе пропало шеф! 🙂

    #9818
    manjey73
    Участник

    Если пытаюсь сделать зависимый класс или наследуемый, как правильно…
    например так в другом cs
    public class CreateTelegram : KpMbusLogic
    {

    }
    То дает такую ошибку
    Ошибка CS7036 Отсутствует аргумент, соответствующий требуемому формальному параметру «number» из «KpMbusLogic.KpMbusLogic(int)». KpMbus

    И как тогда сделать наследуемый класс ???? Вроде тогда переменные можно обозначать как protected и они должны будут быть доступны в наследуемом классе. Или это уже другие дебри ?

    #9819
    Romiros
    Участник

    Наследование это не то. И создавать экземпляр KpLogic не надо.

    Не должны другие классы гонять между собой шаблон. KpLogic должен вызывать публичные методы из других классов для корректировки devTemplate.

    #9820
    manjey73
    Участник

    Если другие классы не должны гонять шаблон то как тогда быть к KpLogic и KpView ?
    Ведь все настройки выполняются в KpView.

    Вот банально — как передать private bool в другой cs , не делая его статическим ?
    или массив байт, или float ?

    #9821
    Romiros
    Участник

    KpLogic и KpView взаимодействуют через файл xml.
    Через публичные методы.
    В ваших cs файлах должны быть методы по созданию переменных в devTemplate. Вызывать их из KpLogic и всё.

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

    Нужно уточнить, какие классы драйвера должны видеть Ваш объект, о котором идет речь? Он должен быть виден из нескольких КП на линии связи или как-то ещё?

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

    как передать private bool в другой cs

    Передача происходит не в cs, а между объектами. Одному классу описанному в cs могут соответствовать как один так и множество созданных объектов. Ссылка на эти объекты есть у того объекта, который их создал. Чтобы разобраться, можно почитать по ссылке.

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

    Например, ссылки на объекты КП хранятся в объекте линии связи, который является частью Коммуникатора.

    Если Вы создадите новый класс из своего объекта КП, то именно этот объект будет видеть новый класс, а другие КП не будут его видеть (за исключением static).

    #9825
    manjey73
    Участник

    Просто хотел разбить код на несколько cs в одной dll. Пока делал со static то все работало как надо. Теперь удобство закончилось, так как так делать оказалось нельзя.

    А у меня в другом cs шла обработка телеграммы и запись всех данных в шаблон.
    Так же переменные шаблона использовались для сохранения всех значений при чтении.
    После чего происходил возврат в основной cs (KpMbusLogic) и вывод всех значений в Scada (SetCurData).
    Для обработки мне необходимо было несколько bool переменных передать, массив байт и собственно копию класса, где описаны все переменные.

    Сейчас вот банальную bool не понимаю как передать. ну или всю копию класса, чтобы проще было потом обрабатывать.

    #9826
    manjey73
    Участник

    Получается что весь код необходимо писать в KpMbusLogic.cs и по другому никак ?
    Потому что Коммуникатор вызвав DLL сделает все переменные только для этого экземпляра…

    #9827
    Romiros
    Участник

    Не надо весь код писать в одном месте. Вы сами пишите, что в другом cs шла обработка телеграм. Вот и отправляйте их на обработку вызывая объект из другого cs и передавая ему данные из KpLogic

    #9828
    manjey73
    Участник

    Вот я и не могу понять как передавать данные между двумя классами не используя static.
    То есть банальная передача блока данных из одного класса в другой, обработка и возвращение обратно.

    static использовать нельзя, так как Коммуникатор, вызвав dll от КП другого прибора затрет эти данные.

    То есть в другом классе не просто функции, там большая обработка, которая должна занести данные в переменные template отдельно созданного экземпляра еще в KpMbusLogic

    • Ответ изменён 8 лет, 2 месяца назад пользователем manjey73.
    #9830
    Romiros
    Участник

    отдельно созданного экземпляра еще в KpMbusLogic

    У Вас несколько экземпляров KpMbusLogic?

    #9831
    manjey73
    Участник

    в dll экземпляр один, но когда в Коммуникаторе мы создаем Опрос КП и в каждом указываем одну библиотеку, то ее вызовов становится ведь несколько.

    Сейчас перенес все в KpMbusLogic, в том числе и код, который разбирает телеграмму, но получилась большая простыня кода, когда разные участки кода в разных cs в библиотеке удобнее.

    Последовательность примерно такая.
    KpMbusLogic создает экземпляр класса DevTemplate, считывает в него из xml данные (десериализация).
    Далее в зависимости от требования инициализации опрашивает прибор и отправляет полученную телеграмму на разбор ху-из-ху…
    При разборе в класс добавляются списки переменных
    Если запросов несколько, то цикл повторяется — опрос, разбор, добавление списка переменных.
    Далее происходит сериализация и запись xml, запрет инициализации.

    Если инициализация уже была, то читается xml, на основе списка переменных создаются теги а далее как и выше, только после разбора вывод переменных в Scada.

    Вот разбор и хотелось бы вынести в отдельный класс. Но так как использовать глобальные переменные нельзя (первоначально так и работало, пока я не подключил второй прибор) то непонятно как класс разбора будет обрабатывать (читать и изменять) данные из экземпляра класса DevTemplate, созданного в KpMbusLogic ?
    А заодно еще передавать дополнительные данные в зависимости от типов переменных обратно в KpMbusLogic, кроме DevTemplate и использовать часть вспомогательных переменных из KpMbusLogic.

    з.ы. в ПЛК на МЭК языках если делаешь функциональный блок, то
    1. у блока можно сделать несколько выходов и передавать несколько различных данных в ответе
    2. под каждый вызов блока ядро выделяет под переменные собственный блок памяти.
    Два блока не мешают друг другу.
    Думал тут в языке примерно так же, если несколько вызовов dll происходит… Либо я не понимаю как это реализовать ?

    #9832
    manjey73
    Участник

    Вот на счет protected указано, что наследуемый класс получает полный доступ к объявленным в родительском классе переменным, но чего-то у меня лыжи не поехали с ним. Не пойму как сделать наследуемый класс для проверки.

Просмотр 15 сообщений - с 16 по 30 (из 73 всего)
  • Для ответа в этой теме необходимо авторизоваться.