jcxz 231 1 октября, 2023 Опубликовано 1 октября, 2023 · Жалоба 48 минут назад, Xenia сказал: Потому что я работаю с программным обеспечением, написанном разными иностранными компаниями под связь с железом через СОМ-порт. Изначально вы писали про чтение ADS1256: 3 часа назад, Xenia сказал: А такая развязка нужна мне для того, чтобы с помощью АЦП (у меня ADS1256) можно было отрицательные напряжения мерить. Где именно в ADS1256 находится COM-порт? У него вроде SPI. По SPI его можно подключить к любой из отладочных плат (выше) и передавать получаемые с него данные далее в TCP-сокет. Зачем тут COM-порт??? - опять неясно... Если вдруг реально есть какой-то АЦП с COM-портом ( всё-таки было бы очень любопытно услышать его название?), то его можно подключить к RS-232 или UART также имеющемся на любой из вышеприведённых отладочных плат. И точно также - передавать получаемые с него данные далее в TCP-сокет. Вобщем - ума не приложу зачем нужен "виртуальный COM-порт" в вашей задаче. 48 минут назад, Xenia сказал: Я это знаю, но чужую/фирменную программу мне с СОМ-порта на TCP-сокет не переделать. У вас есть какая-то программа, которая хочет подключаться к какому-то оборудованию как к COM-порту? Если так, то перевести это подключение в TCP-сокетное не просто, а очень просто: 100500 лет уже существует простой и бесплатный Tibbo Device Server Toolkit (TDST): https://tibbo.com/soi/software.html Создаёте в нём виртуальный клиентский COM-порт. И, при открытии данного порта программой, происходит установление TCP-соединения на указанный адрес/порт. Всё. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 42 1 октября, 2023 Опубликовано 1 октября, 2023 · Жалоба 36 минут назад, jcxz сказал: Изначально вы писали про чтение ADS1256 АЦП, ЦАПы и цифровые порты являются внутренней начинкой импортного железа, но ADS1256 - это моя отсебятина, т.к. более точного АЦП среди продажных модулей я не нашла. Т.е. не в моих силах было изготовить железо один к одному с импортным, а потому мое железо устроено иначе, но выдает данные на компьютер и принимает от него команды в фирменном формате/протоколе, а потому импортная компьютерная программа подмены не видит. Даже когда она при старте запрашивает серийный номер у железа, мое железо отвечает так же, как отвечало импортное. 36 минут назад, jcxz сказал: Где именно в ADS1256 находится COM-порт? У него вроде SPI. По SPI его можно подключить к любой из отладочных плат (выше) и передавать получаемые с него данные далее в TCP-сокет. Зачем тут COM-порт??? - опять неясно... На связи с импортной компьютерной программной находится только контроллер (я использую что-то из STM32), он и поддерживает с ней разговор, сообщая ей в требуемом формате показания всех измерительных датчиков и исполняя подвластными ему средствами приходящие от компьютерной программы команды (например, переключение клапанов и установку скорости вращения шаговых двигателей, вращающих насосы). Как легко можно догадаться, клапана и насосы уже давно не те, что были в фирменном оборудовании. Это же касается и датчиков (манометров и расходомера). Соответственно этому, АЦП и ЦАП у меня тоже другие - те что можно было достать недорого. 36 минут назад, jcxz сказал: Вобщем - ума не приложу зачем нужен "виртуальный COM-порт" в вашей задаче. Моей задаче виртуальный порт нужен только затем, чтобы "найти поход" к импортной программе, которая изначально стыковалась со своим железом через реальный СОМ-порт. А железо я могу городить, какое хочу - лишь бы с импортной компьютерной программной оно могло говорить на ее языке и по ее протоколу связи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 231 1 октября, 2023 Опубликовано 1 октября, 2023 · Жалоба 31 минуту назад, Xenia сказал: Моей задаче виртуальный порт нужен только затем, чтобы "найти поход" к импортной программе, которая изначально стыковалась со своим железом через реальный СОМ-порт. А железо я могу городить, какое хочу - лишь бы с импортной компьютерной программной оно могло говорить на ее языке и по ее протоколу связи. Тогда TDST + любая отладочная плата с TCP-стеком. Которая будет коннектится через TCP с TCP-сервером, созданным в TDST. Или принимать соединение от TCP-клиента, созданного в TDST. Выбор: первое или второе - в зависимости от того - кто именно должен инициировать соединение. И того - насколько толерантна вражеская "компьютерная программа" ко временным не ответам оборудования. TCP-стек можно взять: либо какой-то стандартный (lwIP); либо взять из примеров кода для данной EVB/МК; либо..... написать свой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 42 1 октября, 2023 Опубликовано 1 октября, 2023 · Жалоба 15 минут назад, jcxz сказал: Тогда TDST + любая отладочная плата с TCP-стеком. Ну, а импортной компьютерной программе что я скажу? У нее в настройках выбор номера СОМ-порта, через которой она осуществляет связь со своим железом (теперь уже с моим). Она как-то определяет, какие СОМ-порты существуют (хотя виртуальные от реальных не отличает) и предлагает в комбобоксе выбрать какой-то из них. Соответственно этому, TCP-стеки она не видит и работать с ними не будет (не умеет). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 231 1 октября, 2023 Опубликовано 1 октября, 2023 · Жалоба 27 минут назад, Xenia сказал: Ну, а импортной компьютерной программе что я скажу? У нее в настройках выбор номера СОМ-порта Вижу, что Вы так и не поставили TDST. 27 минут назад, Xenia сказал: Соответственно этому, TCP-стеки она не видит и работать с ними не будет (не умеет). ....и похоже ничего не поняли. TDST создаёт виртуальный COM-порт. При открытии которого (если он создан как клиентский) идёт попытка установления TCP-соединения с удалённым TCP-сервером. Если этот COM-порт создан как серверный - то открывается TCP-порт в пассивном режиме (для принятия соединения от удалённого TCP-клиента). А вот удалённого TCP-сервера или удалённого TCP-клиента вы должны создать сами, подняв TCP-стек на вашей отладочной плате. Когда соединение будет создано, то через полученный TCP-сокет будете передавать данные с платы вражеской программе, и передавать команды от программы к плате. Скачайте TDST, почитайте описание. Там всё понятно. Ниже - пример виртуального клиентского COM-порта, созданного TDST на моём компе: Т.е. - при открытии вражеской программой COM52, будет выполнена попытка установления TCP-соединения с сервером, сидящим на 192.168.4.7:13977. Это вам для примера настроек, с которыми нужно создавать COM-порт. Если нужен серверный - просто меняем "Routing mode" на "Server". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 42 1 октября, 2023 Опубликовано 1 октября, 2023 · Жалоба 26 минут назад, jcxz сказал: Вижу, что Вы так и не поставили TDST. ... TDST создаёт виртуальный COM-порт. Хорошо, если есть такая возможность, однако пока моя плата не заработала, ставить TDST мне не на что - у мертвой платы нет IP-адреса. Именно поэтому я сейчас занята поиском для нее прошивки, т.к. считаю это первостепенной задачей, через которую мне не перешагнуть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 231 1 октября, 2023 Опубликовано 1 октября, 2023 · Жалоба 49 минут назад, Xenia сказал: Именно поэтому я сейчас занята поиском для нее прошивки, т.к. считаю это первостепенной задачей, через которую мне не перешагнуть. Видимо - опять ищите в каком-то странном месте, как и плату... Чего её искать? Заходите на свой же FTP; находите IAR\Examples; в них находите examples для STM (например ARM_ST_7.80.4_12495.exe.rar); распаковываете и находите внутри проект для своего МК: ST\STM32F4xx\IAR-STM32F407ZG-SK\WebServer находите там определения пинов, меняете на свои для своей платы; компилите, запускаете. Всё - сервер есть, можно TDST настраивать и подключать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 40 2 октября, 2023 Опубликовано 2 октября, 2023 · Жалоба 9 hours ago, Xenia said: И что во что они конвертируют? COM-Ethernet. Цена вопроса около 500 рублей. Остановило от покупки отсутствие информации о драйвере виртуального СОМ-порта под Винду. 9 hours ago, Xenia said: исключительно потому, что так называется удобная удаленная связь через файловые операции Я понимаю, о чём речь, ибо сам делал такое. Spoiler //////////////////////////////////////////////////////////////////////////////// extern "C" void init_io( void ) { // Отключим буферирование всех стандартных файлов ввода-вывода // в стандартной библиотеке. setvbuf( stdin, NULL, _IONBF, 0 ); setvbuf( stdout, NULL, _IONBF, 0 ); setvbuf( stderr, NULL, _IONBF, 0 ); // Настраиваем сетевой контроллер W5500. wiz = Wiz5500::getInstance(); wiz -> setNetInfo( txBufSize, rxBufSize, ip, mac, nm, gw ); // Cоздаём файловые дескрипторы для наших потоков и отключаем // буферирование этих потокоd стандартной библиотекой. Буферированием // будем управлять сами: // - удалённая консоль; lanio = fopen( "/lan/io", "w+" ); setvbuf( lanio, NULL, _IONBF, 0 ); lanio_hndl = new SockIO( "lanio", wiz, SockIO::TCP, SockIO::SERVER, 1024, 1024 ); lanio_hndl -> open( 50002, 0 ); // - консоль логгера; lanlog = fopen( "/lan/log", "wb" ); setvbuf( lanlog, NULL, _IONBF, 1 ); lanlog_hndl = new SockIO( "lanlog", wiz, SockIO::TCP, SockIO::SERVER, 1024, 0 ); lanlog_hndl -> open( 50003, 0 ); } //////////////////////////////////////////////////////////////////////////////// .... fprintf( lanlog, "%d\n", loops ); 8 hours ago, Xenia said: Моей задаче виртуальный порт нужен только затем, чтобы "найти поход" к импортной программе, которая изначально стыковалась со своим железом через реальный СОМ-порт. А железо я могу городить, какое хочу - лишь бы с импортной компьютерной программной оно могло говорить на ее языке и по ее протоколу связи. Аналогично. Только в моём случае в номенклатуре модулей нашёлся модуль для работы через локальную сеть, поэтому оказалось проще разобраться с его протоколом, чтобы мой контроллер стал мимикрировать под него. Хотя, повторюсь, решение с СОМ-портом сохраняет актуальность. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 40 2 октября, 2023 Опубликовано 2 октября, 2023 · Жалоба Тут походу дела наткнулся на конвертеры от Wiznet. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 231 2 октября, 2023 Опубликовано 2 октября, 2023 · Жалоба 7 часов назад, tonyk_av сказал: COM-Ethernet. Цена вопроса около 500 рублей. 16 часов назад, Xenia сказал: Всё равно, чтобы вы мне ни посоветовали, купленную плату я уже не выброшу. так что дважды подумайте, прежде чем советовать что-то ещё покупать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ksv198 0 2 октября, 2023 Опубликовано 2 октября, 2023 · Жалоба 17 hours ago, Xenia said: Хорошо, если есть такая возможность, однако пока моя плата не заработала, ставить TDST мне не на что - у мертвой платы нет IP-адреса. Именно поэтому я сейчас занята поиском для нее прошивки, т.к. считаю это первостепенной задачей, через которую мне не перешагнуть. Добрый день! В Кубе довольно просто сделать новый проект под Вашу плату. Выбираете свой контроллер (STM32F407xxx), на вкладке System Core выбираете тактирование (внешний кварц); на вкладке Connectivity выбираете ETH (уточните только, как соединён физический уровень - MII или RMII - это можно прямо по плате посмотреть, если схемы нет); на вкладке Middleware and software packs выбираете LWIP и в его Configuration выбираете Ваш физический уровень - DP83848 (вкладочка Platform Settings); на вкладочке General Settings можно отключить DHCP и ввести статический IP адрес. Остальное можно для начала не трогать. "Рыба" проекта для начала вполне готова. Дальше можно посмотреть в любой готовый пример от STM с поддержкой Ethernet, как там сделано. В простейшем случае там надо вызвать что-то типа HAL_LwIP_Init() и затем в основном цикле каждые 200-300 мс опрашивать стек вызывая функции: ethernetif_input(&gnetif); и sys_check_timeouts(); В принципе всё, после этого должно пинговаться. Ну а дальше уже Вам виднее, как там с последовательным портом разобраться. А можно подсмотреть как у китайцев для CH32V307 сделано (например тут: https://github.com/openwch/ch32v307/tree/main/EVT/EXAM/ETH) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 40 2 октября, 2023 Опубликовано 2 октября, 2023 · Жалоба 3 hours ago, jcxz said: так что дважды подумайте, прежде чем советовать что-то ещё покупать. Так ведь не только для Xenia тут пишут, но и для тех, кто читает. К тому же реализует человек сейчас свою хотелку так, как задумал, а потом вдруг придётся что-то оптимизировать- и вот вам другие варианты решения наобдумать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 42 2 октября, 2023 Опубликовано 2 октября, 2023 · Жалоба 4 часа назад, ksv198 сказал: В Кубе довольно просто сделать новый проект под Вашу плату. Выбираете свой контроллер (STM32F407xxx), на вкладке System Core выбираете тактирование (внешний кварц); на вкладке Connectivity выбираете ETH (уточните только, как соединён физический уровень - MII или RMII - это можно прямо по плате посмотреть, если схемы нет); на вкладке Middleware and software packs выбираете LWIP и в его Configuration выбираете Ваш физический уровень - DP83848 (вкладочка Platform Settings); на вкладочке General Settings можно отключить DHCP и ввести статический IP адрес. Спасибо большое! А я даже надеяться не могла, что на CubuMX это возможно, т.к. у меня выход на Ethernet через транссивер DP83848, который на ST не делают (и в свои демо-плат не вставляют). Да и само сокращение "ETH" я не разгадала, хотя вроде бы его прежде видела. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 42 26 февраля Опубликовано 26 февраля · Жалоба В 02.10.2023 в 18:04, ksv198 сказал: Выбираете свой контроллер (STM32F407xxx), на вкладке System Core выбираете тактирование (внешний кварц); на вкладке Connectivity выбираете ETH (уточните только, как соединён физический уровень - MII или RMII - это можно прямо по плате посмотреть, если схемы нет); на вкладке Middleware and software packs выбираете LWIP и в его Configuration выбираете Ваш физический уровень - DP83848 (вкладочка Platform Settings); на вкладочке General Settings можно отключить DHCP и ввести статический IP адрес. Остальное можно для начала не трогать. "Рыба" проекта для начала вполне готова. Дальше можно посмотреть в любой готовый пример от STM с поддержкой Ethernet, как там сделано. В простейшем случае там надо вызвать что-то типа HAL_LwIP_Init() и затем в основном цикле каждые 200-300 мс опрашивать стек вызывая функции: ethernetif_input(&gnetif); и sys_check_timeouts(); В принципе всё, после этого должно пинговаться. Однако не заработало оно у меня... Однако я задам вопрос не о возможных причинах этого (тем более, что их может быть очень много), а о том, как этот пинг проверять. Пока что я просто соединила пач-кордом Ethernet-гнездо на плате с Ethernet-гнездом на материнской плате компьютера. Результат таков: компьютер крутит колесико (у меня Win7) в поисках интернет-сети, но так ее и не находит. Оно и понятно, т.к. моя плата предоставить выход в интернет не может. А поскольку сети компьютер не находит, то я и не могу поглядеть , какие TCP/IP-адреса в ней есть. Сперва я подумала, что в программе у меня ошибка и поэтому вместо самодельно-запрограммированной платы поставила другую плату (иной конструкции), где какая-то заводская прошивка для Ethernet уже была. Но результат получила точно такой же. От этого и закралась у меня мысль, что может быть я платный Ethernet неправильно проверяю? Вдруг компьютер надо как-то иначе настраивать, чтобы он такую плату в своем окружении увидел? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 26 февраля Опубликовано 26 февраля · Жалоба Нужно вручную выставить IP на интерфейсе ПК. Подсеть должна быть та же, что и у платы. После этого можно будет пинговать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться