Стартовая страница › Форумы › Разработка и интеграция › Смещение данных между устройствами
- В этой теме 28 ответов, 3 участника, последнее обновление 1 год назад сделано Mikhail.
-
АвторСообщения
-
02.12.2023 в 22:29 #30479manjey73Участник
Вопрос, что в коде Коммуникатора отвечает за передачу данных в Сервер и что может влиять на смещение данных между устройствами?
Суть, ошибка чтения одного устройства, данные между устройствами смещаются.
02.12.2023 в 23:03 #30480manjey73УчастникВозможности подключиться к ПК нет, пока требуется понимание, если Session в драйвере завершается корректно и нет вылета с ошибкой по исключению, что может повлиять на смещение данных при ошибке чтения одного из устройств?
Или наоборот, если ошибка Сессии произошла в коде драйвера по исключению.
03.12.2023 в 18:00 #30481JurasskParkУчастникВопрос, что в коде Коммуникатора отвечает за передачу данных в Сервер и что может влиять на смещение данных между устройствами?
Суть, ошибка чтения одного устройства, данные между устройствами смещаются.
Я вам отвечу. Когда я писал свой драйвер, ошибка была в том, что при запуске коммуникатора конфигурация передавалась дальше, потому что режим чтении конфигурации был не в классе и без readonly.
P.S. Потом мне мозги вправили и я так больше не пишу код. 🙂
03.12.2023 в 22:24 #30482manjey73УчастникА немного подробнее?
Я вроде не использую общие данные линии для передачи параметров и чтения шаблонов.
К тому же ошибок нет, если все приборы читаются (если я правильно понял), смещение происходит после того, как происходит ошибка чтения какого-то прибора, а на это может влиять только КоммуникаторК тому же в конце кода Session есть такие строки
stopwatch.Stop(); Log.WriteLine(Locale.IsRussian ? "Получено за {0} мс" : "Received in {0} ms", stopwatch.ElapsedMilliseconds); FinishSession();
То есть если в логе есть такие строки, то не должно быть смещения данных между устройствами
DeviceData.Set — по идее в рамках сессии должен отправлять данные только своему связанному с сервером устройству. А отправляет какому-то соседнему.
Вот и интересует, если ошибка происходила по длине ответа, ошибке CRC или еще какой, что может повлиять на то, что последующий опрос следующего устройства может заставить DeviceData.Set отправить данные в другое устройство, а не в то, которое опрашивается?03.12.2023 в 23:00 #3048303.12.2023 в 23:20 #30485JurasskParkУчастникА немного подробнее?
namespace Scada.Comm.Drivers.DrvModbusJP.Logic { /// <summary> /// Implements the device logic. /// <para>Реализует логику устройства.</para> /// </summary> internal class DevModbusJPLogic : DeviceLogic { /// <summary> /// Name configuration file /// <para>Название файл конфигурации</para> /// </summary> private readonly string shortFileName; /// <summary> /// Path configuration file /// <para>Путь до файла конфигурации</para> /// </summary> private readonly string projectFileName; /// <summary> /// Project configuration /// <para>Конфигурация проекта</para> /// </summary> private readonly Project project; /// <summary> /// Initializes a new instance of the class. /// </summary> public DevModbusJPLogic(ICommContext commContext, ILineContext lineContext, DeviceConfig deviceConfig) : base(commContext, lineContext, deviceConfig) { this.deviceNum = deviceConfig.DeviceNum; this.driverCode = DriverUtils.DriverCode; this.shortFileName = DriverUtils.GetFileName(deviceNum); this.projectFileName = Path.Combine(CommContext.AppDirs.ConfigDir, shortFileName); this.project = new Project(); // load configuration string errMsg = string.Empty; project.Load(projectFileName, out errMsg); if (errMsg != string.Empty) { Log.WriteLine(errMsg); } } } }
Проект project в формате private readonly и public override void OnCommLineStart() не используется.
- Этот ответ был изменен 1 год назад от JurasskPark.
03.12.2023 в 23:25 #30487JurasskParkУчастникDeviceData.Set — по идее в рамках сессии должен отправлять данные только своему связанному с сервером устройству. А отправляет какому-то соседнему.
Вот и интересует, если ошибка происходила по длине ответа, ошибке CRC или еще какой, что может повлиять на то, что последующий опрос следующего устройства может заставить DeviceData.Set отправить данные в другое устройство, а не в то, которое опрашивается?Ну тут надо наблюдать. В моем варианте Устройство(Device) получало рандомно чужую конфигурацию (могло получить, а могло и нет) и данные шли от двух устройств.
Хотя если у каждой квартиру — разные устройства, то они последовательно при чтение xml перезаписали конфигурацию. Так что сходится.
04.12.2023 в 00:04 #30488manjey73Участникxml шаблона у них совершенно один. Это вообще один и тот же прибор, только их несколько на одной линии. где-то 160
- Этот ответ был изменен 1 год назад от manjey73.
04.12.2023 в 01:19 #30490JurasskParkУчастникШаблон один. А адреса разные.
Я пока в логах не удостоверился с помощью логирования, что действительно конфигурация прочитаная не совпадает с адресом устройства, тоже поверить этому не мог.Драйвер ваш или стандартный Modbus?
Просто если ваш, можете добавить в цикл опроса запись текущего адреса устройства. И тогда будет понятно, конфигурация его или нет.04.12.2023 в 09:26 #30491manjey73Участникдрайвер мой MBus, но я пока не могу понять, как мне сделать имитацию ситуации. Так как у меня один счетчик всего на руках с этим протоколом, а люди подключили 160 счетчиков.
Я бы мог понять смещение, если бы в логах вылетало исключение по NET6 например до окончания кода драйвера Session, но так как в логах он пишет «Получено за ХХХХ мс» :
А дальше только завершение Сессии, то становится непонятным, откуда берется смещение данных и типа данные одного счетчика передаются в Сервер другому счетчику????Вот это и есть загадка. Вот и хотелось бы, чтобы Михаил прояснил исходя из понимания своего кода Коммуникатора, что может вызывать подобное и где мне искать причину такого поведения?
04.12.2023 в 09:28 #30492manjey73УчастникВедь DeviceData.Set передает данные устройству согласно тегам устройства.
04.12.2023 в 13:06 #30496JurasskParkУчастникДобавьте в запись лога, текущий адрес устройства при передаче данных. 🙂
Ну и ждем Михаила. 🙂04.12.2023 в 14:32 #30500MikhailМодераторДрайвер пишет данные в свой объект DeviceData. Дальше Коммуникатор передаёт эти данные «источникам данных» для дальнейшей передачи.
04.12.2023 в 14:34 #30501MikhailМодераторКаждое устройство имеет свой экземпляр DeviceData, поэтому данные не перемешиваются.
Какой тип канала связи?
P.S. у меня не открываются скриншоты на ibb.co почему-то.04.12.2023 в 14:48 #30502manjey73Участникв первой ссылке на конце не хватает N на конце, криво скопировал.
Сейчас да, почему-то не открывает, ошибка 504Тип канала связи как понял TCP клиент у пользователя.
Стоит GSM модем вроде. -
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.