Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя
Показано с 11 по 20 из 22

Тема: Нет связи с ТРМ138

  1. #11

    По умолчанию

    Тогда я бы проверил какой-то известной и рабочей. Например Modbus Poll, ОВЕН OPC-сервером и им подобными.
    Для того, чтобы убедиться в том, что ТРМ корректно работает.
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net

  2. #12
    Пользователь
    Регистрация
    08.12.2014
    Адрес
    г.Тейково Ивановской обл.
    Сообщений
    275

    По умолчанию

    Цитата Сообщение от Aleksander8 Посмотреть сообщение
    У меня самописная программа.
    Если Вы работаете посредством функций WinApi то нужно открывать Com порт, настраивать его, удалять мусор и др.
    Правильно формировать запрос (в смысле формата данных). Хотелось бы посмотреть что к чему.

  3. #13

    По умолчанию

    Цитата Сообщение от kon48 Посмотреть сообщение
    Если Вы работаете посредством функций WinApi то нужно открывать Com порт, настраивать его, удалять мусор и др.
    Правильно формировать запрос (в смысле формата данных). Хотелось бы посмотреть что к чему.
    Я работаю через конвертер USB-RS485 "ОВЕН" АС4, с помощью функций WinApi. Сейчас смонтировано на столе. Мусора пока нет.
    Когда работал через конвертер RS232-RS485 АС3 и MsComm, проблем тоже не было. Всё работало в условиях сильных помех. Были ошибки связи. Придумал, как их обрабатывать.
    Я же написал, что всё заработало.
    Посмотреть не проблема. Только пишу на стареньком VB 6.0.

  4. #14

    По умолчанию

    Цитата Сообщение от Aleksander8 Посмотреть сообщение
    Только пишу на стареньком VB 6.0.
    Ура-ура! Я на нём тоже местами пописываю под настроение!
    В общем, лучше проверить ТРМку через сторонние программы. Чтобы исключить все версии.
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net

  5. #15

    По умолчанию

    Цитата Сообщение от Cs-Cs Посмотреть сообщение
    Ура-ура! Я на нём тоже местами пописываю под настроение!
    В общем, лучше проверить ТРМку через сторонние программы. Чтобы исключить все версии.
    Скоро выйдет релиз twinBASIC. Вычищают ошибки и дописывают кучу новых функций.
    Я писал для ТРМ201 и 202. Работало же. А ставить на комп ещё какие-то программы не хочется.

  6. #16
    Пользователь
    Регистрация
    08.12.2014
    Адрес
    г.Тейково Ивановской обл.
    Сообщений
    275

    По умолчанию

    Цитата Сообщение от Aleksander8 Посмотреть сообщение
    Я работаю через конвертер USB-RS485 "ОВЕН" АС4, с помощью функций WinApi. Сейчас смонтировано на столе. Мусора пока нет.
    Когда работал через конвертер RS232-RS485 АС3 и MsComm, проблем тоже не было. Всё работало в условиях сильных помех. Были ошибки связи. Придумал, как их обрабатывать.
    Я же написал, что всё заработало.
    Посмотреть не проблема. Только пишу на стареньком VB 6.0.
    Был бы признателен за предоставленные исходники. Сам пишу на Delphi, но есть проблемы.
    Ваш опыт был бы полезен.

  7. #17

    По умолчанию

    Delphi и VB 6.0 совсем не родственники. Кроме самой программы ещё два модуля с декларациями функций WinApi. Например:
    ' МОДУЛЬ ДЛЯ РАБОТЫ С COM-ПОРТОМ
    ' при помощи API.
    'Где взял модуль, не помню. Довёл до ума.
    '--------------------------------------------------------

    Option Explicit
    'глобальные переменные
    Global ComNum As Long 'хэндл открытого порта; >0, если порт открыт.
    Global BarDCB As DCB 'таблица параметров порта
    Global CtimeOut As COMMTIMEOUTS 'таймауты порта
    Public bWrite(1 To 10) As Byte 'Буфер отправляемой дейтаграммы
    Global bRead(254) As Byte 'буфер принятых символов
    Public rc As Long 'Переменная для получения результатов работы функций
    Public wr As Long 'Количество отправленных байт
    Public err As Boolean 'Ошибка
    Public rd As Long 'Количество принятых байт
    'Структуры для параметров настройки порта
    Type COMMTIMEOUTS
    ReadIntervalTimeout As Long
    ReadTotalTimeoutMultiplier As Long
    ReadTotalTimeoutConstant As Long
    WriteTotalTimeoutMultiplier As Long
    WriteTotalTimeoutConstant As Long
    End Type
    Type DCB
    DCBlength As Long
    BaudRate As Long
    fBitFields As Long
    wReserved As Integer
    XonLim As Integer
    XoffLim As Integer
    ByteSize As Byte
    parity As Byte
    StopBits As Byte
    XonChar As Byte
    XoffChar As Byte
    ErrorChar As Byte
    EofChar As Byte
    EvtChar As Byte
    wReserved1 As Integer
    End Type


    ' Constants for the dwDesiredAccess parameter of the CreateFile() function
    Const GENERIC_READ = &H80000000
    Const GENERIC_WRITE = &H40000000

    ' Constants for the dwShareMode parameter of the CreateFile() function
    Const FILE_SHARE_READ = &H1
    Const FILE_SHARE_WRITE = &H2

    ' Constants for the dwCreationDisposition parameter of the CreateFile() function
    Const CREATE_NEW = 1
    Const CREATE_ALWAYS = 2
    Const OPEN_EXISTING = 3

    ' Constants for the dwFlagsAndAttributes parameter of the CreateFile() function
    Const FILE_ATTRIBUTE_NORMAL = &H80
    Const FILE_FLAG_OVERLAPPED = &H40000000

    'объявления функций API
    Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
    Declare Function PurgeComm Lib "kernel32" (ByVal hFile As Long, ByVal dwFlags As Long) As Long
    Public Declare Function SetCommTimeouts Lib "kernel32" (ByVal hFile As Long, lpCommTimeouts As COMMTIMEOUTS) As Long
    Public Declare Function SetCommState Lib "kernel32" (ByVal hCommDev As Long, lpDCB As DCB) As Long
    Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, _
    ByVal nNumberOfBytesToRead As Long, _
    lpNumberOfBytesRead As Long, ByVal lpOverlapped As Long) As Long
    Public Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, _
    ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, _
    ByVal lpOverlapped As Long) As Long
    Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
    Public Declare Function GetLastError Lib "kernel32" () As Long

    ' Error codes reported by the CreateFile().
    Const ERROR_FILE_NOT_FOUND = 2
    Const ERROR_ACCESS_DENIED = 5
    Const ERROR_INVALID_HANDLE = 6

    Public Function OpenCOM(ByVal com As String) As Long 'Открытие COM-порта
    Dim retval As Long
    ComNum = CreateFile(("\\." & com), GENERIC_READ Or GENERIC_WRITE, 0, 0&, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
    If ComNum = -1 Then
    rc = err.LastDllError
    Select Case rc ' Two typical error codes when trying to open a serial port:
    Case ERROR_ACCESS_DENIED ' - The serial port opened by another application
    MsgBox "The serial port is used by another program", vbCritical
    Case ERROR_FILE_NOT_FOUND ' - The serial port does not exist, check the port name specified in the CreateFile()
    MsgBox "The serial port does not exist", vbCritical
    Case Else
    MsgBox "CreateFile failed, the error code is " & Str(rc), vbCritical
    End Select
    MsgBox "Ошибка открытия порта " + com, vbCritical
    OpenCOM = ComNum
    Exit Function
    Else
    retval = PurgeComm(ComNum, 0) 'очистка очередей порта
    End If

    ' Начальное заполнение таблицы параметров приемопередачи
    BarDCB.DCBlength = 28 'длина блока DCB
    BarDCB.fBitFields = &H83 'Битовое поле, биты которого означают следующее:
    BarDCB.ByteSize = 8 'разрядность данных (кол-во бит)
    BarDCB.parity = 0 '1-проверять нечетность, 2-проверять четность, 0-не проверять ничего
    BarDCB.StopBits = 0 'количество стоповых бит: 0 -один, 1 -полтора, 2 -два
    BarDCB.wReserved1 = 0 'зарезервировано. Не используется.
    'Времена ожидания (Time Outs) в миллисекундах
    CtimeOut.ReadIntervalTimeout = 5 'максимальное время между двумя принимаемыми символами.
    CtimeOut.ReadTotalTimeoutConstant = 500 'постоянная часть таймаута на прием
    CtimeOut.ReadTotalTimeoutMultiplier = 0 '5 'время на прием одного символа (для вычисления переменной части таймаута)
    CtimeOut.WriteTotalTimeoutConstant = 20 'постоянная часть таймаута на передачу
    'нулевые времена означают, что таймауты не используются.
    OpenCOM = ComNum
    End Function

    Public Function SetCommParam(baud As Long, parity As Long, bits As Long, stops As Long) As Long
    'подпрограмма установки параметров порту

    Dim retval As Long
    'установка таймаутов

    CtimeOut.WriteTotalTimeoutMultiplier = 1 + Int(12000 / baud)
    retval = SetCommTimeouts(ComNum, CtimeOut)
    If retval = -1 Then
    retval = GetLastError()
    MsgBox "Ошибка при установке таймаутов, Error: " & retval
    SetCommParam = retval
    Exit Function
    End If
    BarDCB.fBitFields = 1
    BarDCB.BaudRate = baud 'скорость приемопередачи в бодах
    BarDCB.ByteSize = 8 'bits 'разрядность данных (кол-во бит)
    BarDCB.parity = 0 'parity '1-проверять нечетность, 2-проверять четность, 0-не проверять ничего
    BarDCB.StopBits = 0 'stops 'количество стоповых бит: 0 -один, 1 -полтора, 2 -два
    retval = SetCommState(ComNum, BarDCB)
    If retval = -1 Then
    retval = GetLastError()
    MsgBox "Не удается настроить порт на заданные параметры Error: " & retval, vbCritical, "Error!"
    SetCommParam = retval
    Exit Function
    End If

    ' Call PrintDCB(BarDCB, CtimeOut)
    End Function

    Public Sub Sending(SendStr() As Byte, NumBytes As Long)
    ' Sending an array of 8 bytes to a remote device.

    rc = WriteFile(ComNum, SendStr(1), NumBytes, wr, 0&) ' The wr indicates how many bytes were went to the port.
    If rc = 0 Then
    rc = err.LastDllError
    MsgBox "WriteFile failed, the error code is " & Str(rc)
    GoTo close_and_exit
    End If
    Exit Sub
    close_and_exit:
    rc = CloseHandle(ComNum)
    End Sub

    Public Sub Receiving(NumBytes As Long)
    ' Получаем ответ от девайса.

    rc = ReadFile(ComNum, bRead(1), NumBytes, rd, 0) ' The rd indicates how many bytes were received from the port.
    If rc = 0 Then
    rc = err.LastDllError
    MsgBox "ReadFile failed, the error code is " & Str(rc)
    GoTo close_and_exit
    End If
    'Debug.Print rd
    Exit Sub
    close_and_exit:
    rc = CloseHandle(ComNum)
    End Sub

  8. #18
    Пользователь
    Регистрация
    08.12.2014
    Адрес
    г.Тейково Ивановской обл.
    Сообщений
    275

    По умолчанию

    Спасибо за ответ!
    Посмотрел текст программы, но как формируется запрос не нашел.

  9. #19

    По умолчанию

    Вам текст понятен?
    Какой запрос вас интересует?

  10. #20
    Пользователь
    Регистрация
    08.12.2014
    Адрес
    г.Тейково Ивановской обл.
    Сообщений
    275

    По умолчанию

    Цитата Сообщение от Aleksander8 Посмотреть сообщение
    Вам текст понятен?
    Какой запрос вас интересует?
    Текст понятен, но возможно не до конца.
    В частности, как формируется Public bWrite(1 To 10) As Byte 'Буфер отправляемой дейтаграммы
    Есть "рыба" и её надо переварить.

Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя

Похожие темы

  1. трм138
    от R-nk в разделе Сервисное обслуживание приборов ОВЕН
    Ответов: 3
    Последнее сообщение: 22.12.2023, 14:08
  2. ТРМ138.И
    от petefree в разделе Эксплуатация
    Ответов: 0
    Последнее сообщение: 04.10.2018, 14:26
  3. Ответов: 9
    Последнее сообщение: 09.04.2015, 11:21
  4. Настройка связи между ТРМ138 и WinCC 7
    от Vankan в разделе Другие SCADA системы
    Ответов: 2
    Последнее сообщение: 15.11.2010, 15:19
  5. трм138
    от Толик в разделе Подбор Оборудования
    Ответов: 6
    Последнее сообщение: 13.01.2010, 04:56

Ваши права

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