PDA

Просмотр полной версии : ТРМ151



Mihail
08.10.2008, 16:26
Как при помощи Visual Basic 5.0 менять уставку в в трм 151 процессе работы если это вооще возможно. Люди поделитесь опытом и если возможно примерами.

Илья Глан
10.10.2008, 16:25
Общий алгоритм таков... качаете руководлство по прибору отсюда http://www.owen.ru/support/45592687, находите в неи параметр, который хотите менять, берете библиотеку для связи с приборами ОВЕН отсюда http://www.owen.ru/device/64305906 и пишите свой софт

Mihail
13.10.2008, 16:46
Спасибо за внимание к моему вопросу
Все что вы написали я уже проделал и в результате уставка становится в 0 а конкретное значение задать не получается.

Дмитрий Егоренков
15.10.2008, 15:41
рассказывайте, какое значение в какой параметр записываете, какой функцией, и какой результат возвращает функция. будет еще лучше, если вы пришлете мне кусок рабочего кода.


а вы правда Vb5 используете, а не Vb6?

Mihail
15.10.2008, 16:28
1.как просили кусок кода
адрес у прибора 24
Case 24

' res2 = WriteStoredDotS(24, 0, "SP.lu", 25, -1)
2. Я действительно использую Visual Basic 5.0

Дмитрий Егоренков
15.10.2008, 16:49
а что функция возвращает в res2?

Mihail
15.10.2008, 19:02
Ничего не возвращает и уставка становится равной 0
Если вы знаете как это делать то просто пришлите пример я кода. Я со своей стороны поподробнее опешу результат испытания.

Дмитрий Егоренков
15.10.2008, 20:35
Ничего не возвращает и уставка становится равной 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

Mihail
16.10.2008, 16:29
Спасибо большое завтра протестирую и сообщу о результатах.
Где найти подробное описание команды WriteStoreDot = OwenIO(adr, adr_type, 0, cmd, buf, sz)
Дайте адрес или само описание а то не очень в программирование но мне очень хочется научится.

Дмитрий Егоренков
16.10.2008, 16:57
все функции owen_io.dll есть в описании библиотеки. описание входит в поставку или может быть отдельно скачано здесь - http://www.owen.ru/device/64305906.

OwenIO() - универсальная функция для связи по протоколу овен. возвращаемое ей значение (код ошибки) присваивается в этой строке специальной переменной VB, название которой совпадает с именем функции. это значение станет кодом возврата функции WriteStoreDot().

Mihail
18.10.2008, 15:51
Функция res2 = WriteStoredDotS(24, 0, "SP.lu", 25, 0)
работает большое спасибо за помощь