Перейти к содержанию
    

Ruslan1

Свой
  • Постов

    3 015
  • Зарегистрирован

  • Посещение

  • Победитель дней

    3

Весь контент Ruslan1


  1. То есть не схемотехник-человек нужен, а юрлицо,которое в штате имеет персонал для этого. Хотя как это линкуется с фразой "работа на ставку", не понимаю.
  2. Факт в том, что можно, а не в том, что конкретно я слабак супротив цельного коллектива с опытом и ресурсами.
  3. Я делал много лет назад 4x485(Modbus)- 1x232(ПК), но заточенная под конкретную систему (немного конфигурируемая, но не универсальная коробочка). Нужно было из линии максимум вытащить, так что эта коробочка сама опрашивала кучу RTU слейвов по нескольким каналам, и хранила полученные с них данные в виде доступных через RS232 регистров. Ну а в ПК просто посылался периодически пакет со всеми данными, или он мог вычитывать/записать регистры когда хотел (два режима работы).
  4. да пусть хоть черт с рогами там внутри. Для меня было открытием, что такую функциональность возможно засунуть в программу, которую я ставлю стандартными средствами в винду. И эта программа у меня работает одновременно со всем остальным, стандартным десктопным окружением. И не грузит систему (по крайне мере, старичок Ксеон с 8GB оперативки эту нагрузку на моем десктопном компе не замечает, хотя на десяток открытых хромов может ругнуться разгоном кулера). (А что такое RITA? наверное, RTAI?)
  5. Про производительность компьютера и винду. Есть такой протокол EtherCAT. Реалтаймовое кольцо 100 Мбит Ethernet с UDP пакетом постоянной длины. Слейв передает пакет дальше, не дожидаясь конца приема, подменив/прочитав нужные ему биты в пакете на лету, ну и в обратную сторону так же. То есть задержка в кольце считается битами, а не пакетами. И есть программа TwinCAT для Винды, которая его обслуживает. Что интересно- может работать и на стандартном одном LAN из PC, спецоборудование даже и не нужно в минимальной конфигурации (без дублирования). Но! Программа поддерживает не все чипсеты Ethernet. То есть на поддерживаемых чипсетах она подменяет виндовый драйвер своим и вполне справляется. Я гонял в сети до 5 пакетов в миллисекунду (бурст из 5 пакетов в начале каждой миллисекунды), все очень стабильно (в моем случае это был траффик на уровне 10% загрузки сети). Там еще есть возможность просто откусить под свою задачу/задачи одно и более железяное ядро микропроцессора, и на нем уже свои программы обработки писать с выделенными таймслотами и приоритетами, чтобы и верхний уровень успевал этот поток данных взять и применить. Все это в винде, в единной программе, без твиков и хаков. И на десктопе, и для промконтроллеров. То есть стоит пром-ПК с виндой, на ней ТвинКэт, и все это управляет разными механизмами в реалтайме. И ничего, живет и справляется. Так что и винда не плохая, нужно просто уметь ее готовить. По крайней мере, с Езернетом можно вполне себе реалтайм получить. :) Про ошибки: Они, конечно, быть могут, и любая система должна быть готова к их возникновению. Для того же EtherCAT регламентируют 1e-12, что довольно много (это значит, что даже на простых системах с десятками слейвов запросто можно раз в пару часов статистически получать ошибку в сети).
  6. Этого промстандарта и в европах и в азиях много. В америках-австралиях, насколько я знаю, тоже, но там еще SDI-12 есть. Так что реальность еще объективнее, чем кажется.
  7. Ну, с современной точки зрения Модбас RTU вообще мало для чего оптимален. Какую задачу ни взять- можно найти и получше протокол. Но ведь спрашивают! ведь покупают! :) Я, помню, лет 10 назад к КАНу подход делал. Ну вот оно, убивец Модбасовский, недолго осталось.... Но на КАНе системы и девайсы в моей нише не востребованы, а Модбас RTU все еще в тренде. В-общем, точка зрения инженера не всегда совпадает с точкой зрения редакции :)
  8. Спасибо, ясно. Такого RTU мастера я тоже делал. И через LAN/интернет c виртуальным портом с двух сторон, и через RS-232 порт на удаленном GSM модеме. Если со стороны мастера возможны задержки больше минимально допустимых стандартом, тогда не интересно, задача решается почти тривиально.
  9. Если не секрет... А на чем писали (операционка/среда программирования)? И на какой уровень вниз уходили, чтобы таймауты обеспечивать настолько маленькие, как это предлагает стандарт? Я имею в виду- как удавалось быстро определить в PC, что пакет уже принят и быстро послать новый, чтоб загрузить линию по максимуму? Поллингом регистров? Я в Билдере это делал, пришлось от прерываний к поллингу перейти. 4 порта RS-232 с потоком на 57600 (или даже 38400) со скрипом справлялись на Целероне, в винде даже помнится какие-то твики применял.
  10. Не, я в этот холивар масла подливать не стану :) Если Ваш компьютер может мастером RTU без дополнительных условий- то снимаю шляпу. Для мастера приходилось вводить ограничение как минимум по максимальной скорости сети и количеству одновременно обслуживаемых портов, и аккуратно выбирать железо и софтовое окружение. Со слейвом на PC еще больше ограничений, годится только как игрушка.
  11. Ну и намотали тут всего на вентилятор про мой любимый Модбас. Если приемник/передатчик не обеспечивает спецификацию- то он не годится. RTU в PC работает с кучей оговорок. Хотите чтобы PC работал с RTU безусловно- делайте аппаратный конвертер между Модбас протоколами: RTU-ASCII, или RTU-TCP, или RTU-что-то не-модбасное, независимое от таймаутов. Если изначально знаете что будет канал связи и/или PC - то не выбирайте тайминго-зависимый RTU, а сразу закладывайте ASCII, ну или TCP. Или вообще какой-нить SLIP если Модбас не нравиться. Есть куча протоколов и шин, зависящих от тайминга, и они не становятся плохими от того, что их нельзя напрямую подключить к стандартному бытовому PC.
  12. У меня на одном объекте начали как-то жаловаться на потерю связи в рандомное время (а сигнал там и так был слабый). Выяснилось, что антенну укрепили на открываюшуюся часть окна снаружи. Все было нормально. Но потом потеплело, и это окно начали иногда открывать, чтобы проветрить :)
  13. Узнайте, какой конкретно частотный диапазон используется. И подбирайте антенну, чтобы давала максимальное усиление именно в этом диапазоне. Причем с как можно более коротким (приемлемым для Вашего случая) и толстым проводом. 6dBi - отличная антенна, если дает это усиление именно в используемом диапазоне частот. 12 dBi - еще лучше. Еще лучше-направленная антенна, если возможно. Но. Все врут (с). Так что самый хороший вариант- убедится в качестве (АЧХ) купленной антенны самому, с помощью любого векторного анализатора. Например, nanoVNA. Если не купили еще- то обязательно купите. Это второй дешевый прибор после логического анализатора, который обязан быть. Второй важный фактор- расположение антенны, особенно если расположение неоптимальное (возле земли, между конструкциями...). Покрутить туда-сюда, перенести на пару метров в сторону. Наверняка SIM800 может RXlevel по запросу выдавать, вот на него и ориентируйтесь.
  14. По названию темы у Вас FTP сервер не видит передаваемых ему данных. А в тексте говорите что клиент не видит данных. ??? там вроде никаких премудростей нет. У меня так работает case FTP_CMD_LIST: { if (*dataConnMode == NO_CONNECTION) { FTP_SendReply(conn, FTP_REPLY_503); break; } err = ERR_VAL; if(*dataConnMode == ACTIVE_MODE) { if ((pcb->ConnectIP.addr == 0) || (pcb->ConnectPort == 0)) { FTP_SendReply(conn, FTP_REPLY_503); } data_conn = netconn_new(NETCONN_TCP); netconn_set_recvtimeout(data_conn, 1000 * 60 * 2); //2 min timeout data_conn->pcb.tcp->keep_idle = 5000; data_conn->pcb.tcp->keep_intvl = 1000; data_conn->pcb.tcp->keep_cnt = 5; data_conn->pcb.tcp->so_options |= SOF_KEEPALIVE; err = netconn_connect(data_conn, &pcb->ConnectIP, pcb->ConnectPort); } else { if(*dataConnMode == PASV_MODE_CONNECTED) { err = ERR_OK; data_conn = pasvConn; } } LOG_CONSOLE ("\r\nLIST command for: '%s\n",fullPath); if (err == ERR_OK) { //file_err = f_getcwd(pcb->buff, sizeof(pcb->buff)); snprintf (pcb->buff, FTP_COMMON_BUFF_SIZE, "%s",fullPath); // if (file_err != FR_OK) // { // FTP_SendReply(conn, FTP_REPLY_550); // } // else // { LOG_CONSOLE ("FTPserv: LIST cmd for '%s'\n",pcb->buff); FTP_SendReply(conn, FTP_REPLY_150); FTP_SendList(data_conn, pcb, fullPath); FTP_SendReply(conn, FTP_REPLY_226); // } } else { FTP_SendReply(conn, FTP_REPLY_425); } if(*dataConnMode == PASV_MODE_CONNECTED) { *dataConnMode = PASV_MODE_FINISHED; netconn_close(data_conn); netconn_delete(data_conn); } else { if(*dataConnMode == ACTIVE_MODE) { *dataConnMode = NO_CONNECTION; netconn_close(data_conn); netconn_delete(data_conn); } } break; } /** * \brief FTP_SendList() - Sends the list of files in actual server to open connection * \param *conn - net connection type and status * \param *pcb - FTP connection status and information * \retval None */ void FTP_SendList(struct netconn *conn, ftp_pcb_t *pcb, char* fullPath) { FRESULT file_err; err_t err; DIR fdir; FILINFO fno; uint32_t size; TCHAR *pntName; #define timeStringLEN 30 char timeString[timeStringLEN]; if ((fullPath[0] == '/') && (fullPath[1] == '\0')) // maybe fullPath is "/" {//it's a root directory, show all available disks for (uint8_t n = 0; n < FF_VOLUMES; n++) { size = snprintf(pcb->buff, sizeof(pcb->buff), "%c%s %s %s %s %u %s /%s\r\n", 'd', "rw-------", "1", "user", "group", 0, "Jan 01 2018", VolumeStr[n] ); if (size>=sizeof(pcb->buff)) {// the string length was truncut from nChars to maxLength size = sizeof(pcb->buff)-1; pcb->buff[size] = '\0'; } err = netconn_write(conn, pcb->buff, size, NETCONN_COPY); if (err != ERR_OK) return; } return; } file_err = f_opendir_safe(&fdir, fullPath,F_SAFE_DELAY); if (file_err == FR_OK) { // read all the entries in directory while(1) { file_err = f_readdir(&fdir, &fno); if (file_err != FR_OK || fno.fname[0] == 0) break; // if file starts by . it is the . or .. usual links if (fno.fname[0] == '.') continue; pntName = fno.fname; {//prepare time string struct tm fileTime_tm; time_t fileTime_timet, currTime_timet; double deltaT; double time180DaysInSeconds = 180.0 * 24.0 * 3600.0; //file time fileTime_tm.tm_year = (((fno.fdate >> (25 - 16)) & 0x7F) + 1980) - 1900; fileTime_tm.tm_mon = ((fno.fdate >> (21 - 16)) & 0x0F) - 1; //in struct tm: month is 0 to 11 range, but FAT uses 1 to 12 range fileTime_tm.tm_mday = (fno.fdate >> (16 - 16)) & 0x1F; fileTime_tm.tm_hour = (fno.ftime >> 11) & 0x1F; fileTime_tm.tm_min = (fno.ftime >> 5) & 0x3F; fileTime_tm.tm_sec = ((fno.ftime) & 0x01F) << 1; //2-second count, valid value range 029 inclusive (0 58 seconds). fileTime_timet = mktime(&fileTime_tm); //current time currTime_timet = get_time_seconds(); //difference deltaT = difftime(currTime_timet, fileTime_timet); if (deltaT >= time180DaysInSeconds) { // format for times older than 180 days strftime(timeString,timeStringLEN,"%b %d %Y", &fileTime_tm); } else { //format for time more recent than 180 days strftime(timeString, timeStringLEN, "%b %d %H:%M", &fileTime_tm); } } size = snprintf(pcb->buff, sizeof(pcb->buff), "%c%s %s %s %s %u %s %s\r\n", (fno.fattrib & AM_DIR) ? 'd' : '-', "rw-------", "1", "user", "group", fno.fsize, timeString, pntName ); if (size>=sizeof(pcb->buff)) {// the string length was truncut from nChars to maxLength size = sizeof(pcb->buff)-1; pcb->buff[size] = '\0'; } err = netconn_write(conn, pcb->buff, size, NETCONN_COPY); if (err != ERR_OK) break; } f_closedir(&fdir); } }
  15. А нет ли тут кого-то, кто собирается посетить выставку TIMTOS-2023 на следующей неделе в Тайпее?
  16. продолжать пить бормотуху подождать. Почки релюхи сами отвалятся. Если меняете гальванически развязанные реле на просто MOSFET- в общем случае генерируете себе непредсказуемые проблемы из-за новой гальванической связи цепи управления и цепи нагрузки. Нужно брать именно электронный аналог электромеханического реле- твердотельное реле. Если рулите переменкой- то реле, поддерживающие и AC и DC. Там уже есть нужные MOSFET внутри. Смотрите "MOSFET Relay", или "Solid State Relays" например тут можно посмотреть что бывает: https://www.digikey.com/en/products/filter/solid-state-relays/183?s=N4IgjCBcoCwdIDGUBmBDANgZwKYBoQB7KAbRAGYAGAdnICYIBdAgBwBcoQBlNgJwEsAdgHMQAXwIBaOlFDJIfAK74ipEAFYQjMRJAzIZALaEsKHGwAEvHBjQBPLQQBsskPwAmnBuRghWHSBAAVUF%2BNgB5FABZHDQsRWs-EDY7FhxOOOQdIA Upd: ну или супертихие реле поискать, например герконовые. Но на ток 10 А думаю герконовых не бывает.
  17. Хотел написать что просто шумоизоляцию релешек. То есть выпаять с платы и вложить в паралон, например, а к плате припаять гибкими проводами (чтоб вибрацию не передавали). Но потом послушал чего там, я ж думал там что-то редкое. Но такого точно не должно работать. Выкидывайте скорее, или несите в ремонт. Отказавший лабораторный БП может потянуть за собой много чего более дорогого. Да и сдохнет скоро. Ибо реле долго не протянут при такой частоте переключения, и выйдут из строя самым неудобным образом, провоцируя дым и бабахи. Там герц 10? Предположим, что реле хорошее и механически выдержит 5е6 переключений. Это 5е5 секунд. а это всего-то 138 часов (!!!). Если хотите этим БП пользоваться- то нужно изменить режим его использования, так щелкать ему вредно.
  18. Извините, добавлю тут по схеме и плате. У микросхемы TPS61088 есть два вывода которые "NC"(11,12). Но в тексте они прямо пишут что: На примере разводки так и сделано, хотя в примерах схем (и тут в стартовой схеме) пины не указаны и к земле не подключены. Мелочь, но полезная и ничего не стоящая. Нужно просто схемный элемент с этими NC ногами иметь/сделать, ну и поключить их к GND на схеме. По футпринту: Мощности немелкие могут рассеиваться (КПД 85-90%), лучше все-таки дать теплу протечь на другие слои платы (ну и там тоже плэйн сделать). В даташите штатный футпринт уже нарисован с переходными отверстиями для этого. А у топикстартера микросхема в непонятно каком тепловом режиме работает, ненадежно как-то.
  19. Да, спасибо за схему, вроде бы понял. Но сложно как-то. Учитывая что уже есть SEPIC, нарисовал уже SEPIC+Cuk, с тремя дросселями.
  20. Точно! Спасибо за подсказку! Просто пересчитал каждый дроссель согласно даташиту, и применил нужные. На бумаге красиво, посмотрю что в железе будет. Одно жалко: Использую микросхемы от Texas, соответственно удобно использовать их "WEBENCH Power Designer" чтобы сразу и КПД схемы увидеть, и пульсации и прочее. Так оно только сдвоенные индуктивности вставляет при дезайне SEPIC. Что интересно, раньше можно было вставлять отдельные индуктивности, в интернете есть файл репортов из него (WEBENCH Design Report) с такими схемами, датированными 2016 годом. Но вот сейчас никак не желает, убрали эту возможность из WEBENCH.
  21. Ну, на Я таким образом 1-2 mA делал классически от ШИМ, но на десятках mA не хочется. Да и все равно фильтровать. Ну, и на катушку 5x5 мм место у меня найдется.
  22. Всем спасибо! SEPIC+ZETA как-то у меня не вяжется, там получается ключ по разному включать нужно. А вот комбинация SEPIC+Cuk (последняя схема в стартовом посте) смотрится понятной: https://www.researchgate.net/publication/332442891_Benefits_of_the_CI-CCS_converter С катушками тоже понял. Для наибольшей эффективности сильноточного выхода катушки L_in и L_sepic связываю на сердечнике, а L_cuk уже отдельно катушку беру. Только вот непонятно мне, что мешает напряжению V_NEG (не отслеживается обратной связью) увеличится больше чем V_POS при легкой нарузке. Думаю хорошо включить тут резистор для обеспечения гарантированной минимальной нагрузки, и/или стабилитрон (TVS) для ограничения выходного напряжения.
  23. Здравствуйте! Есть схема SEPIC: вход 8...30V, выход нужен +12V/650mA и -12V/50mA. То есть нагрузки разные. Выход на самом деле не обязательно супер-стабилизировать, достаточно стабильность +11...+13V и -11...-13V. C +12V вопросов нет, а как еще и -12V сюда добавить? Хорошая статья на тему тут: https://www.eetimes.com/generate-dual-supply-rails-using-a-high-efficiency-sepic-cuk-converter/ На картинке ниже две сдвоенные катушки: L1 вместе с L4, L2 вместе с L3. или вот отсюда https://www.analog.com/media/en/reference-design-documentation/power-reference-designs/PRD1175.pdf Предлагается взять сдвоенные катушки для двух выходов. Положительный (сильноточный) стабилизирован (завязан на обратную связь), а отрицательный (слаботочный) уж как получится. И чтобы получилось хорошо, берут две одинаковые сдвоенные катушки. Вопрос: можно ли взять разные катушки? и нужно ли взять с одинаковую индуктивностью? Хочется уменьшить занимаемую площадь на плате и выбрать для слаботочного выхода другую сдвоенную катушку, с меньшим рейтингом по току, например. То есть например: - основная катушка 2 x 22uH/ 3.7A / 40 mOhm, размер 12x12 mm - дополнительная: 2 x 22uH/ 1.6A / 150 mOhm, размер 7x7 mm Можно ли так сделать, и где ждать проблем при разных катушках? ------------- Еще есть схемы с тремя катушками. Еще интересная статья тут: https://www.edn.com/two-variations-on-the-sepic-converter/ Здесь три катушки, и только две из них связаны чтоб получить идентичные Vout. Но с точки зрения SEPIC L1 не связан с L2, не нравится. есть еще вариант с тремя катушками:
  24. Если Вы делаете это для себя для души как хобби (то есть приятен процесс, а не гонка за результатом) - то никаких вопросов, тема вполне хорошая и явно лучше просмотра сериалов нонстоп или потребления горячительных в неограниченном. Если как строчку в общественное резюме (то есть сайт или блог где это все описываете и набираете общественную известность как специалист) - тоже хорошая тема. Это, так сказать, потенциально может иметь экономическую выгоду (известность трансформируется в хорошие предложения по работе). А вот если хотите прямого коммерческого успеха (сделать свою железяку и продавать) - то тут совершенно ничего не светит без имени и репутации, не та это ниша где можно за год раскрутиться. Гораздо интересней (востребованней) может быть дописывание каких-то софтовых функций к уже имеющемуся железу. Новые протоколы, триггеры, зависимости, отчеты, обратная связь с исполнительными устройствами. Вот это вполне комерческая тема, очень востребовано при производстве и тестировании. То есть не изобретать еще один диджтайзер, а по-новому обрабатывать уже имеющийся поток оцифрованных данных, с учетом хотелок конкретного пользователя данных. Про именно малинку: это же просто маленький дешевенький ограниченный компьютер, а для компа много чего уже есть 🙂 1-минутное гугление "raspberry pi oscilloscope diy" показывает большое количество ссылок, от осцилла на базе микрофонного входа до самодельных логических анализаторов. Тут как везде: оцифровать не проблема, главный вопрос что дальше с этими данными делать.
  25. Спасибо. Понял, чуда не будет. Буду с тремя величинами делать. Думал про полярность, но пока не планировал, иначе как-то совсем сложно получается (и так разные виды мостов поддерживать нужно). Ну и упирается в семплрейт: в планах 1KSPS, а при переключении полярности на ADC settling много уходит для перезагрузки фильтров: получаю то, от чего ухожу, взяв параллельный многоканальный АЦП без мультиплексоров.
×
×
  • Создать...