Сообщение от
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