Показано с 1 по 10 из 11

Тема: ТРМ151

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #8

    По умолчанию

    Цитата Сообщение от Mihail Посмотреть сообщение
    Ничего не возвращает и уставка становится равной 0
    так не бывает. функция возвращает код ошибки. полагаю, что у вас это -104 (размер поля данных не соответствует ожидаемому).

    параметр SP.Lu задает уставку для программы\шага\ПС и имеет сквозную индексацию от 0 до 239. то есть вызывать функцию надо так:

    res2 = WriteStoredDotS(24, 0, "SP.lu", 25, 0)

    это для первого ПС на первом шаге первой программы.

    и, наконец, из-за некоторого непонимания между прибором и owen_io.dll далеко не все значения можно записать этой функцией. поэтому предлагаю вам использовать такую замену:

    Код:
    'Универсальная функция для обмена с устройствами по протоколу OWEN
    Private Declare Function OwenIO Lib "owen_io" _
    (ByVal adr As Long, _
      ByVal adr_type As Long, _
      ByVal is_read As Long, _
      ByVal cmd As String, _
      ByVal params As String, _
      param_sz As Long) _
     As Long
    
    Private Function WriteStoredDot(ByVal adr As Long, ByVal adr_type As Long, _
        ByVal cmd As String, ByVal Value As Single, ByVal index As Integer) As Long
        
        Dim intval As Integer
        Dim sign As Integer
        Dim dot As Integer
        Dim sz As Long
        Dim buf As String
        
        If Abs(Value) * 100 <= 65536 Then
            intval = CInt(Value * 100)
            dot = 32
        ElseIf Abs(Value) * 10 <= 65536 Then
            intval = CInt(Value * 10)
            dot = 16
        Else
            intval = CInt(Value)
            dot = 0
        End If
       
        If intval < 0 Then
            sign = 128
            intval = -intval
        Else
            sign = 0
        End If
    
        If (intval < 16) Then
            buf = Chr(sign + dot + intval)
            sz = 1
        ElseIf intval < 256 Then
            buf = Chr(sign + dot)
            buf = buf + Chr(intval)
            sz = 2
        Else
            If intval \ 256 < 16 Then
                buf = Chr(sign + dot + intval \ 256)
                buf = buf + Chr(intval And &HFF)
                sz = 2
            Else
                buf = Chr(sign + dot)
                buf = buf + Chr(intval \ 256)
                buf = buf + Chr(intval And &HFF)
                sz = 3
            End If
        End If
    
        If index <> -1 Then
            buf = buf + Chr(index \ 256)
            buf = buf + Chr(index And &HFF)
            sz = sz + 2
        End If
    
        buf = buf + Space(15)
    
        WriteStoredDot = OwenIO(adr, adr_type, 0, cmd, buf, sz)
    End Function
    Последний раз редактировалось Дмитрий Егоренков; 16.10.2008 в 13:49.

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •