Jump to content
Форум по продукции MOXA

Recommended Posts

  • 2 weeks later...
  • Replies 59
  • Created
  • Last Reply

Top Posters In This Topic

Необходимо подключатся по TCP к NPORT D-311 который работает как rs485 в режиме TCP-Server. Прошу выслать описание протокола на адрес в профиле.

Спасибо!

Link to comment

Добрый день! Подскажите будет ли работать такая схема : Устройство RS-232 - NPort IA5150AI - Ethernet (vpn разные подсети) - NPort 5450I - Устройство передающее дальше RS-232( можно проверить получение данных). NPort IA5150AI находится в сети 10.10.x.x, NPort 5450I - в сети 10.10.y.y. Настройка TCP сервер - клиент ничего не дает.

Link to comment
  • 3 months later...

Пишу клиент на С++ для серии NPort 5ххх в режиме TCP Server, обращение через виртуальный СОМ-порт нас не устраивает, хотим общаться с нашими приборами через IP. Не могли бы выложить необходимые настройки для создаваемого сокета-клиента, таймауты, чтобы можно было написать качественное ПО к вашему оборудованию.

Link to comment

Добрый день,

Никаких особых настроек сокета не требуется. Просто соединяйтесь по TCP с NPort (по умолчанию COM1 = TCP:4001, COM2 = TCP:4002 итд) и передавайте в открытый сокет данные. Эти данные в неизменном виде выйдут из COM-порта NPort. Аналогично все получаемые в COM-порта данные NPort передаст в этот сокет, и Вы сможете прочитать их с PC.

Link to comment

В целом всё работает, но есть проблема. Для тестов NPort подключен напрямую к компьютеру по Ethernet, на 485 выходе находится прибор, работающий по протоколу Modbus (всё собрано на столе). Если я буду обращаться к прибору не через NPort, а через адаптер 485-интерфейса, то при посылке на него данных, получу 100% ответов. При обращении к прибору через NPort от 10 до 15% посылок теряется.

 

Если посмотреть через веб-сервер МОХА статистику, то видно, что в такой момент на NPort пришло нужное кол-во байт, но в ответе оказалось 0 байт. То есть прибор отвечал, но NPort передавать ничего не стал, хотя FIFO-буфер по идее должен был сохранить и передать данные позже. За основу клиента взят пример с MSDN Complete Winsock Client Code, но в чистом виде он не работает, команду shutdown я не использую, потому что тогда сокет при последующем recv закроет соединение. Также со стороны приложения-клиента видно, что в момент пропажи ответа сокет занят, приходится выходить по таймауту select’а.

 

При обращении к NPort, находящемся на объекте, потеря одиночных запрос-ответ составляет уже 30-35%. Отсюда мне непонятно, как работает и чем занимается TCP Server между приёмом и передачей. Вы можете предоставить какой-то алгоритм, или программный пример клиента для работы с сервером?

Link to comment

Здравствуйте,

 

К сожалению, какого-то программного примера нет. Поверьте, нет никаких тонкостей в работе с TCP. Для диагностики соединения мы зачастую подключаемся к NPort обычным telnet'ом и передаем данные в telnet-сессии.

Есть в настройках NPort (там, где задаете режим работы TCP Server) параметр Force Tx Timeout (в некоторых версиях он называется Force Transmit), который регулирует упаковку данных с Serial в TCP. Попробуйте поставить там значение 2-3 мс. Зачастую помогает.

Также уточните, что у Вас за модель NPort. Может быть, какие-нибудь есть тонкости, связанные с конкретной моделью.

Link to comment

Да, это полезный параметр, и ставить для Modbus его нужно.

Сделал вывод, что 100% ответов добиться не получится, NPort чем-то ещё занимается в некоторые моменты времени.

Link to comment

Да, для Modbus этот параметр точно необходим!

Связь удалось улучшить, но частично?

Все равно ошибки вряд ли связаны с пропускной способностью NPort: если NPort нагрузить постоянным трафиком на максимальной скорости, то он всё будет передавать без потерь.

Возможно, получится что-то отрегулировать в NPort на стороне RS-485. Какая все-таки модель у Вас используется?

Link to comment

Используется NPort 5130, на стороне RS485 стоит прибор, который после получения данных, отсылает ответ через 10 мс (интервал тишины в протоколе 485), скорость 19200, эта пауза считается слишком длинной? Поставил на приборе интервал тишины 2 мс и Force Tx Timeout 2 мс.

 

Теперь передаётся всё без потерь. Спасибо за советы )

Link to comment

Спасибо за информацию!

Да, Force TX достаточно поставить в 2 мс. В Вашем случае, если скорость 19200, то время передачи одного байта - 0.5 мс. Поэтому за 2 мс NPort мог бы получить целых 4 байта, этого времени обычно достаточно, чтобы понять, что пакет окончен.

Ещё в модельке 5130 можно подстроить нагрузочные резисторы на RS-485. Для этого надо снять крышку устройства и замкнуть два джампера (JP3 и JP4), находящиеся рядом с разъемом COM-порта. Некоторые подключенные устройства работают корректнее именно с замкнутыми джамперами. Надо экспериментировать.

Но если у Вас теперь всё стабильно, то лучше джамперы не трогать :)

Link to comment
  • 3 months later...
  • 6 months later...
  • 2 weeks later...

На нашей фирме мы используем много ваших NPorts для подключения приборов в сеть. Я обычно программировала на LabVIEW и не было никаких проблем. Но меня попросили считать данные из VBA Excel, у нас формы на Excel используются в производстве. И у меня сходу не получилось. Я пыталась соединиться через IPSerial.dll, функции Nport'a, выдается ошибка (-200). Почитав форум, я думаю, что надо к IP адресу добавить порт. У меня COM23, значит nsio_open("10.20.20.245:4023",1,3000), модель NPort 5110A.

NPort Administrator на компьютере установлен. Программа на LabVIEW работает через виртуальный COM23.

Пробовала на С#, тоже не могу подключиться. Ни через IPSerial.dll, ни через виртуальный порт.

Надо ли дополнительно настраивать Firewall?

Вышлите мне тоже чего-нибудь.

Спасибо!

Link to comment

Helga, вы уверены, что порт 4023?) Порт для подключения зависит от Operation mode, который вы выбрали в настройках. Для Real COM Mode порт 950, а если выбран TCP Server Mode порт по умолчанию 4001, если не меняли в Local TCP Port.

Link to comment

К сожалению, я ни в чем не уверена. Но я все попробовала и 4001 и 4023. Установила PComm Terminal, с трудом, но получила ответ с прибора. Прибор тоже немного не стандартный. Пока пытаюсь разобраться в настройках. И как проще: виртуальный порт или TCP-Server?

Link to comment

Смотрю PCOMM.H, даты пугают!

/* PComm_c.h

* PComm define file for Win32 on C/C++

* History:

* Date Author Comment

* 10/22/1996 Victor wrote it.

* 03/28/1997 Victor modified. add sio_term_irq function.

* add sio_linput function.

* 04/29/1997 Victor modified. add sio_putb_x function.

* 05/21/1997 Victor modified. add sio_view function.

* 06/13/1997 Victor modified. add file transfer function.

* 06/30/1997 Victor modified. add sio_TxLowWater function.

* 11/17/1997 Victor add sio_AbortWrite, sio_SetWriteTimeouts

* 11/21/1997 Victor add sio_SetReadTimeouts, sio_AbortRead

* sio_GetReadTimeouts, sio_GetWriteTimeouts

* 03/08/1998 Casper support VB 5.0

*

* 04/27/1999 Casper add sio_ActXon, sio_ActXoff, sio_break_ex

*/

 

Можно ли это применять?

Link to comment

Здравствуйте!

Давайте начнем разбираться в проблеме с того, что определимся с настройками Вашего NPort. Не могли бы Вы выложить конфигурационный файл NPort? Его можно экспортировать с помощью NPort Administrator.

Link to comment

Извените за задержку, была в отпуске. Хочу сегодня попробовать visa32.dll от LabVIEW.

Нужный порт - 23. Файл прикреплен. Спасибо за внимание!

COM23.txt

Link to comment

Option Explicit

' Declarations for VISA.DLL

' Basic I/O Operations

Private Declare Function viOpenDefaultRM Lib "VISA32.DLL" Alias "#141" (sesn As Long) As Long

Private Declare Function viOpen Lib "VISA32.DLL" Alias "#131" (ByVal sesn As Long, _

ByVal desc As String, ByVal mode As Long, ByVal TimeOut As Long, vi As Long) As Long

Private Declare Function viClose Lib "VISA32.DLL" Alias "#132" (ByVal vi As Long) As Long

Private Declare Function viRead Lib "VISA32.DLL" Alias "#256" (ByVal vi As Long, _

ByVal Buffer As String, ByVal Count As Long, retCount As Long) As Long

Private Declare Function viWrite Lib "VISA32.DLL" Alias "#257" (ByVal vi As Long, _

ByVal Buffer As String, ByVal Count As Long, retCount As Long) As Long

 

 

Sub VISALV_COM23()

 

On Error GoTo ErrAllgemein

Debug.Print "Start"

Dim s As String

Dim status, defaultRM, in_str, writeCount, retCount

s = "?TE" & Chr$(13)

 

status = viOpenDefaultRM(defaultRM)

Debug.Print "VISA open: " & status & " Handle: " & defaultRM

status = viOpen(defaultRM, "ASRL23::INSTR", 0, 5000, in_str)

 

Debug.Print "VISA_Gerät open: " & status & " Handle: " & in_str

status = viWrite(in_str, s, Len(s), writeCount)

status = viRead(in_str, s, 100, retCount)

 

Debug.Print "String: " & s & "Count: " & retCount

status = viClose(in_str)

status = viClose(defaultRM)

 

Debug.Print "Finished"

Exit Sub

ErrAllgemein:

Debug.Print Err.Description

End Sub

Link to comment
  • 3 months later...

Добрый день!

 

А собственно как вы хотите работать? Если совсем-совсем напрямую - то переводим NPort в режим TCP-Server и вперед - взаимодействуем с ним через 4001 TCP-порт (по умолчанию для порт_1). Что туда пошлём - то и "выпадет" в последовательный интерфейс.

Или надо что то другое?

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...