Ответы в темах
-
АвторСообщения
-
JurasskParkУчастникВ итоге, получаю имя линии, путь до логов, получаю адрес файла для логов.
Отключаю детальное легирования и тоже получаю из свойств линии признак, что линия отключена.И уже в свойстве логирования проверяю, что если детальное логирование отключено, но у нас стоит в драйвера признак, что логировать надо, сам пишу в лог.
JurasskParkУчастникСегодня добил вопрос с детальным логом.
Если детальное логирование отключено, но
Запись была через Connection.Write(buffer, offset, count), то лог всë равно писался.
А вот если запись была через Connection.Write(buffer, offset, count, format, out log), то запись не производится.А у меня в Slave было именно простой первый Write.
JurasskParkУчастникМихаил, для закрепления темы и повторения.
1. Приходит команда, по которой мы определяем адрес устройства.
Библиотека понимает, что адрес устройства в полученной команде и адрес в конфигурации проекта совпадают, то мы всё равно делаем поиск через
LineContext.GetDeviceByAddress(address, out deviceLogic)?if(deviceLogic.NumAddress == address) { LineContext.GetDeviceByAddress(address, out deviceLogic); }2. Приходит команда, по которой мы определяем адрес устройства.
Библиотека понимает, что адрес устройства в полученной команде и адрес в конфигурации проекта НЕ совпадают, то мы делаем поиск через
LineContext.GetDeviceByAddress(address, out deviceLogic)?if(deviceLogic.NumAddress != address) { LineContext.GetDeviceByAddress(address, out deviceLogic); }3. Приходит команда, по которой мы НЕ можем определить адрес устройства, т.к. это команда установки связи.
Библиотека понимает, что адрес устройства в полученной команде и адрес в конфигурации проекта НЕ совпадают, но для установления связи нужно всё равно ответить.
LineContext.GetDeviceByAddress(address, out deviceLogic) — вызывать бессмылено, устройство мы не найдем.
Значит не вызываем?4. В каких случаях нужно вызывать requestArgs.TargetDevices.Add(deviceLogic)?
Каждый раз про получении данных от устройства?
Объясню сложность вопроса для себя.
Если пришли данные от устройства и мы не вызвали requestArgs.TargetDevices.Add(deviceLogic), то мы не узнали, что устройство подключилось новое.
Если мы каждый раз при получении команды, будет вызывать, то не будет ли количество TargetDevices стремится к бесконечности? Или они очищаются после каждого опроса через период времени?5. Нужно ли ReceiveIncomingRequest(Connection connection, IncomingRequestArgs requestArgs) завершать командами, при удачном выполнении
LastRequestOK = true;
FinishRequest();
SleepPollingDelay();
FinishSession();или ничего не должно быть?
JurasskParkУчастникFormat.
Там должно написано не float, а System.Float, не boolen, а System.Boolean итд.
Плюс как я помню, тип code и path были одни и теже.
Сначала один тег протестируйте.
1. Формат.
2. Потом после исправления формата, смотрите code и пропишите как адрес.
JurasskParkУчастникСамое интересное, что скрин забыл в начале темы прикрепить, как это выглядело 🙂
http://jurasskpark.ru/pubimg/up/17721692980db5c36.png
JurasskParkУчастникif (deviceLogic.NumAddress != request.UnitID) LineContext.GetDeviceByAddress(request.UnitID, out deviceLogic)Для информации.
Я попался на LineContext.GetDeviceByAddress.LineContext.GetDeviceByAddress — если int передать, то это поиск по адресу устройства.
LineContext.GetDeviceByAddress — если передать string, то это поиск по ip.А у меня стояло — LineContext.GetDevice — это поиск по номеру устройства.
P.S. Нашёл, когда отлаживал DrvDebug…
Точнее везде в начале темы я пишу LineContext.GetDeviceByAddress, но потом была вспышка на солнце и в коде уже было LineContext.GetDevice. 😀
JurasskParkУчастник/// <summary> /// Performs a communication session. /// </summary> public virtual void Session() { LastSessionTime = DateTime.UtcNow; LastRequestOK = true; Log.WriteLine(); Log.WriteAction(Locale.IsRussian ? "Сеанс связи с устройством {0}" : "Session with the device {0}", Title); }Получается, что в режиме Slave это идёт от Session.
JurasskParkУчастникКто-то мешает делать вывод в лог через таймер?
Или по условиям?Не понял про что речь.
Коммуникатор спамит 10 сообщений в секунду, что происходит сеанс связи. Я эти сообщения по умолчанию отключить не могу.
Могу только полностью отключить логирование и сам писать в файл, чтобы видеть только те сообщения, которые мне нужны.
JurasskParkУчастникНо моя идея, что Сеанс связи можно писать только, когда в буфере есть данные или произошло подключение. А каждую секунду по 10 раз писать о том, что Сеанс связи происходит — это растет лог и усложняет его анализ.
JurasskParkУчастникЧерез проект открываете папку Конфигурационные файлы (Config), нвходите так проект своего устройства DrvOpcClassic_#.xml и добавляете теги через блокнот.
<Item active=»true» path=»Путь до тега» name=»Название тега» tagCode=»Путь до тега» dataType=»Тип тега» isArray=»false» />
JurasskParkУчастникПровëл я эксперименты.
Итог:
1. Если Детальный лог отключен, то он не пишется в режиме сообщений Info, Action, Warning, Error не пишутся.
2. Если в файл line#.log записываю данные без Log.Write, то они тоже отображаются.
3. Количество Сеанс связи с устройством будет проходить если включен Детальное логирование. И получается, что я должен писать файл в line#.log самостоятельно, и выключив Детальное логирование, чтобы не видит Сеанс связи.
JurasskParkУчастникЯ решил написать драйвер DrvDebug.
Потому что у мне также интересно стало режим Mixer.)
JurasskParkУчастникIIS появиться, если вы через компоненты поставите Manager IIS.
JurasskParkУчастникТак и не разобрался как добавить свой тег.
Вспомните с чего всë началось?
Вы не знали как добавить тег в OPCClassic и какие его создать.
Вы через драйвер смогли подключиться к OWEN и посмотреть как теги после импорта сохраняются и как их можно создать?
Я, надеюсь, вы в моих словах не прочитали «вот есть Owen OPC и он вам прибор Матикон прочитает»?
Вы должны научиться создавать теги для драйвера руками, если приложение не может их создать.
JurasskParkУчастник1. Для скриншотов лучше использовать https://imgbb.com/, а то на данном хостинге слишком много 18+.
2. Установите любой бесплатный OPC-сервер, из адекватных OWEN OPC.
3. Добавьте в клиент пару тегов и посмотртие структуру.
4. На основе видимой структуры создайте один тег МЕТАКОНа и посмотрите будут ли идти по нему данные.http://jurasskpark.ru/pubimg/up/17716832770136ad8.png
http://jurasskpark.ru/pubimg/up/1771683333e60aca6.png
http://jurasskpark.ru/pubimg/up/1771683357330533d.png -
АвторСообщения