Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
05.05.2024, 16:55:40
 
Начало Помощь Поиск Войти Регистрация
Новости: Форум обновлен

+  Форум АО "ВЗЛЕТ"
|-+  Приборы ЗАО "Взлет"
| |-+  Отдел программистов
| | |-+  Сервер связи(использование функции ReadTimeArch)
0 Пользователей и 1 Гость смотрят эту тему. « предыдущая тема следующая тема »
Страниц: [1] Печать
Автор Тема: Сервер связи(использование функции ReadTimeArch)  (Прочитано 7924 раз)
resident
Пользователь
**

Харизма: 0
Офлайн Офлайн

Сообщений: 22


« : 02.09.2010, 10:43:50 »

Здравствуйте.
При чтении одной архивной записи часового архива приборов ТСРВ-22, 23 вопросов не возникает.
Но как я понимаю, есть возможность считывать сразу несколько записей.
Чтение одной записи:
mbcm.ReadTimeArch(2, 1, 1, 10, 7, 6, 3, 0, 0, GetStructureArchivalRecord)
где GetStructureArchivalRecord функция которая возвращает структуру архивной записи прибора. Работает правильно.
Третий аргумент функции отвечает (если я правильно понимаю) за количество записей.
Выдержка из документации ArchCount – Количество записей.
Я пробовал разные значения. Ответ один: mbcNotEnoughData = 16 Недостаточно данных.
Собственно вопрос, как правильно записать аргументы функции которая должна вернуть многомерный массив данных.
С Уважением "resident"
Записан
Денис Пономарев
Global Moderator
*****

Харизма: 6
Офлайн Офлайн

Сообщений: 74



« Ответ #1 : 03.09.2010, 12:14:33 »

В виду того, что в одном ModBus запросе не может быть больше 250 байт данных, то в случае длинных архивных записей (больше 125 байт каждая), получение записей от 2 и выше невозможно.
Записан
resident
Пользователь
**

Харизма: 0
Офлайн Офлайн

Сообщений: 22


« Ответ #2 : 04.09.2010, 13:28:21 »

Спасибо. Очень жаль, придется читать по одной.
Записан
resident
Пользователь
**

Харизма: 0
Офлайн Офлайн

Сообщений: 22


« Ответ #3 : 18.12.2010, 19:09:36 »

Скажите пожалуйста, правильно ли я делаю читая архивную запись суточного архива таким образом?

mbcm.ReadTimeArch(2, 1, 1, 10, 12, 1, 0, 0, 0, GetStructureArchivalRecord)

Используя при этом структуру архивной записи такую же как и при чтении часового архива. но часы, минуты и секунды выставляя в 0?

'Функция котрая возвращает структуру архивной записи ТСРВ
    Friend Function GetStructureArchivalRecord() As Array
        Dim i As Integer 'Счетчик
        Dim StructArchRec(72) 'Структура архивной записи

        StructArchRec(0) = VzljotSrv.MBDataType.dtUnsignedDoubleWord
        StructArchRec(1) = VzljotSrv.MBDataType.dtSingle
        StructArchRec(2) = VzljotSrv.MBDataType.dtSingle
        StructArchRec(3) = VzljotSrv.MBDataType.dtSingle
        For i = 4 To 11
            StructArchRec(i) = VzljotSrv.MBDataType.dtUnsignedDoubleWord
        Next i
        For i = 12 To 14
            StructArchRec(i) = VzljotSrv.MBDataType.dtSingle
        Next i
        For i = 15 To 22
            StructArchRec(i) = VzljotSrv.MBDataType.dtUnsignedDoubleWord
        Next i
        For i = 23 To 25
            StructArchRec(i) = VzljotSrv.MBDataType.dtSingle
        Next i
        For i = 26 To 33
            StructArchRec(i) = VzljotSrv.MBDataType.dtUnsignedDoubleWord
        Next i
        StructArchRec(34) = VzljotSrv.MBDataType.dtSingle
        For i = 35 To 36
            StructArchRec(i) = VzljotSrv.MBDataType.dtSignedWord
        Next i
        StructArchRec(37) = VzljotSrv.MBDataType.dtUnsignedDoubleWord
        StructArchRec(38) = VzljotSrv.MBDataType.dtUnsignedWord
        StructArchRec(39) = VzljotSrv.MBDataType.dtSingle
        StructArchRec(40) = VzljotSrv.MBDataType.dtSignedWord
        StructArchRec(41) = VzljotSrv.MBDataType.dtSignedWord
        StructArchRec(42) = VzljotSrv.MBDataType.dtUnsignedDoubleWord
        StructArchRec(43) = VzljotSrv.MBDataType.dtUnsignedWord
        StructArchRec(44) = VzljotSrv.MBDataType.dtSingle
        StructArchRec(45) = VzljotSrv.MBDataType.dtSignedWord
        StructArchRec(46) = VzljotSrv.MBDataType.dtSignedWord
        StructArchRec(47) = VzljotSrv.MBDataType.dtUnsignedDoubleWord
        StructArchRec(48) = VzljotSrv.MBDataType.dtUnsignedWord
        StructArchRec(49) = VzljotSrv.MBDataType.dtSingle
        StructArchRec(50) = VzljotSrv.MBDataType.dtSignedWord
        StructArchRec(51) = VzljotSrv.MBDataType.dtSignedWord
        StructArchRec(52) = VzljotSrv.MBDataType.dtUnsignedDoubleWord
        StructArchRec(53) = VzljotSrv.MBDataType.dtUnsignedWord
        StructArchRec(54) = VzljotSrv.MBDataType.dtSingle
        StructArchRec(55) = VzljotSrv.MBDataType.dtSignedWord
        StructArchRec(56) = VzljotSrv.MBDataType.dtSignedWord
        StructArchRec(57) = VzljotSrv.MBDataType.dtUnsignedDoubleWord
        StructArchRec(58) = VzljotSrv.MBDataType.dtUnsignedWord
        StructArchRec(59) = VzljotSrv.MBDataType.dtSingle
        StructArchRec(60) = VzljotSrv.MBDataType.dtSignedWord
        StructArchRec(61) = VzljotSrv.MBDataType.dtSignedWord
        StructArchRec(62) = VzljotSrv.MBDataType.dtUnsignedDoubleWord
        StructArchRec(63) = VzljotSrv.MBDataType.dtUnsignedWord
        StructArchRec(64) = VzljotSrv.MBDataType.dtSingle
        StructArchRec(65) = VzljotSrv.MBDataType.dtSignedWord
        StructArchRec(66) = VzljotSrv.MBDataType.dtSignedWord
        StructArchRec(67) = VzljotSrv.MBDataType.dtUnsignedDoubleWord
        StructArchRec(68) = VzljotSrv.MBDataType.dtUnsignedWord
        StructArchRec(69) = VzljotSrv.MBDataType.dtSingle
        StructArchRec(70) = VzljotSrv.MBDataType.dtUnsignedDoubleWord
        StructArchRec(71) = VzljotSrv.MBDataType.dtUnsignedDoubleWord
        StructArchRec(72) = VzljotSrv.MBDataType.dtUnsignedDoubleWord
        Return StructArchRec
    End Function

Дело в том что полученные данные полностью совпадают с часовой архивной записью на это время,
и теряется смысл чтения суточных архивов.
Пожалуйста подскажите что я делаю не так.

P.S

Года четыре назад господин BorisTheBlade мне выложил пример чтения архивов ТСРВ-20
на VB6. Но он подошел мне для чтения часовых архивов ТСРВ-22(23)

вот собственно этот пример:
Private Sub BtnTimeArchGet_Click() 'запрос на чтение индексного массива
  Dim b As Byte
  Dim i As Integer
  Dim l As Long
  Dim s As Single



  vari = Array(72) 'создание структуры данных архива (данная структура соответствует только прибору TSR - 020)
  ReDim vari(72) As Integer

          vari(0) = dtUnsignedDoubleWord
          vari(1) = dtSingle
          vari(2) = dtSingle
          vari(3) = dtSingle
          For i = 4 To 11
            vari(i) = dtUnsignedDoubleWord
          Next i
          For i = 12 To 14
            vari(i) = dtSingle
          Next i
          For i = 15 To 22
            vari(i) = dtUnsignedDoubleWord
          Next i
          For i = 23 To 25
            vari(i) = dtSingle
          Next i
          For i = 26 To 33
            vari(i) = dtUnsignedDoubleWord
          Next i
          vari(34) = dtSingle

          For i = 35 To 36
            vari(i) = dtSignedWord
          Next i

          vari(37) = dtUnsignedDoubleWord
          vari(38) = dtUnsignedWord
          vari(39) = dtSingle
          vari(40) = dtSignedWord
          vari(41) = dtSignedWord
          vari(42) = dtUnsignedDoubleWord
          vari(43) = dtUnsignedWord
          vari(44) = dtSingle
          vari(45) = dtSignedWord
          vari(46) = dtSignedWord
          vari(47) = dtUnsignedDoubleWord
          vari(48) = dtUnsignedWord
          vari(49) = dtSingle
          vari(50) = dtSignedWord
          vari(51) = dtSignedWord
          vari(52) = dtUnsignedDoubleWord
          vari(53) = dtUnsignedWord
          vari(54) = dtSingle
          vari(55) = dtSignedWord
          vari(56) = dtSignedWord
          vari(57) = dtUnsignedDoubleWord
          vari(58) = dtUnsignedWord
          vari(59) = dtSingle
          vari(60) = dtSignedWord
          vari(61) = dtSignedWord
          vari(62) = dtUnsignedDoubleWord
          vari(63) = dtUnsignedWord
          vari(64) = dtSingle
          vari(65) = dtSignedWord
          vari(66) = dtSignedWord
          vari(67) = dtUnsignedDoubleWord
          vari(68) = dtUnsignedWord
          vari(69) = dtSingle
          vari(70) = dtUnsignedDoubleWord
          vari(71) = dtUnsignedDoubleWord
          vari(72) = dtUnsignedDoubleWord

  If CbTypeArchTime.ListIndex = 0 Then ' чтение часового архива

    mbcm.ReadTimeArch 10, 1, 1, DateArch.Year - 2000, DateArch.Month, DateArch.Day, Val(TxHour.Text), 0, 0, vari

  End If

  If CbTypeArchTime.ListIndex = 1 Then ' чтение суточного архива

    mbcm.ReadTimeArch 10, 1, 1, DateArch.Year - 2000, DateArch.Month, DateArch.Day, 0, 0, 0, vari
  End If

  If CbTypeArchTime.ListIndex = 2 Then ' чтение месячного архива

    mbcm.ReadTimeArch 10, 2, 1, DateArch.Year - 2000, DateArch.Month, DateArch.Day, 0, 0, 0, vari

  End If

End Sub

Записан
resident
Пользователь
**

Харизма: 0
Офлайн Офлайн

Сообщений: 22


« Ответ #4 : 23.12.2010, 11:42:52 »

Все, разобрался!
Записан
Страниц: [1] Печать 
« предыдущая тема следующая тема »
Перейти в:  


Войти

© 1990—2016, АО «Взлет».
Все права защищены.
Контактная информация
Powered by SMF 1.1.13 | SMF © 2006-2011, Simple Machines LLC
Материалы, размещенные на сайте, охраняются законодательством об авторском праве. Перепечатка материалов допускается только со ссылкой на сайт.