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

oiv_1968

Пользователи
  • Posts

    163
  • Joined

  • Last visited

Posts posted by oiv_1968

  1.  

    У нас (MOXA) все кросс-компиляторы только под x86..

     

    Если я желал бы:

    кросс-компиляторы только под x86

    Вообще не создавал бы эту тему. Вот и хочу запустить кросс-компилятор под x86 на устройстве "свисток", с линуксом именно на x86, который можно таскать в кармане... коли на ARM нет возможности.

     

     

    Всё компилирует этот MEEGO T02(с установленной UBUNTU на борту)... но зараза как прсто сервер не работает. Требует, чтобы дисплей присутствовал <_< . Проблема конечно решаемя через HDMI-VGA конвертер... с подключением к VGA разъёму "обманных резисторов" и ещё с рядом танцев с бубном. Но уж очень всё вместе громоздко выходит... и совсем не оперативно :wacko: .

     

  2. Сеть Веб - это что за хрень? В  любом случае, поднимай эту  свою  сеть ПОСЛЕ всей предварительной возни. Похоже,  суетливый фанук лезет  раньше времени

     

    По эксплуатации включение фанук происходит по необходимости, в то время как ia240 в работе круглочуточно совместно со Step7. Нет никаких возможностей, кроме как через Веб странице (на ia240) через пульт обучения (на Fanuc) контролировать и изменятьть необходимые параметры (номера типов изделий, контроль состояния ряда параметров). Номера типов форм читаются из Step7 и записываются в него средствами ia240 по Modbus через порты вводв-вывода.

    Так что кроме Сеть Веб - это что за хрень? ничего в наличии нет! Конечно можно поюзать FTP, но редактировать нечем!

     

  3. Доброго времени суток!

    Имеется оборудование с наличием IA240 для работы с устройствами Modbus по последовательному порту. Кроме этого по ethernet устройство Fanuc (робот) подключен. Случаются моменты в начале работы, когда Fanuc "не видит" по сети ВЕБ сервер на IA240, если более точно подача питания в начале смены не "запустила" как надо IA240. Повтороное выключение и включение IA240 решило апрблему... но может есть возможность как то исправить это. Устройство не проработало года. Выглядит как не "поднята" сеть на нём, не создан RAM диск в ОЗУ... ну и понятно ничего не запущено. Понимаю, что можно и сторожевой таймер... но по соображениям, что он программный и с ним будет тоже самое. Хотя возможно я не прав! Есть ли варианты решений?

    Заранее спасибо!

  4. Простите не понял... возможно и вы мена не поняли. Особых решений за время доставки и соответственно деньги затруднительно. Потому как это моя инициатива и одобрение затрат не будет. Оборудование уже в работе и всё делаю на "горячую"... в процессе пауз рабочего цикла. И программы и аппаратную часть. На быструю покупку роутеров (благо их в магазинах навалом и купить за свои деньги и предоставить товарный чек не проблема) есть одобрение. Надо только такой вариант, что бы антенна торчала из шкафов и в них (шкафы)не попадала пыль. Потому как в Ia240Lx есть ещё 3 свободных последовательных порта(RS485)... и соответственно ещё три проекта в него можно  засунуть... средней тяжести проектов. Он позволит. Но хочу в локальную сеть, которая находится в шкафу индукционной печи ABP... через сервер в локальную сеть предприятия.

  5. Имеется оборудование в цехе... за узел управления принят IA40. Появилась необходимость вывести его сеть по беспроводной связи. Всё понятно и без проблем... но выбрать поутер с антенной, которая внешне должна находиться на шкафу затрудняюсь. Собственно роутер любой пригоден (но способный поддерживать режим клиента - их должно быть два)... волнует решение с антенной для него. Расстояние не большое... Связь испытывалась, но вот антенна на шкафу вопрос! Прошу помощи!

    Заранее спасибо!

  6. У нас (MOXA) все кросс-компиляторы только под x86..

     

    Если я желал бы:

    кросс-компиляторы только под x86

    Вообще не создавал бы эту тему. Вот и хочу запустить кросс-компилятор под x86 на устройстве "свисток", с линуксом именно на x86, который можно таскать в кармане... коли на ARM нет возможности.

     

  7. Доброго времени суток!

    Прошу помощи - необходимо компилировать (время от времени)  код на устройстве (IA240-LX, UC7112-Plus) - иметь в наличии компилятор на устройстве (возможность его установить).

    (Только будьте добры не задавайте вопросы типа: "почему ты хочеш ехать именно на этой машине и именно в это мнсто, лучше возьми другую машину и поезжай в другом направлении" - воспользуйся кросскомпиляцией на другой машине).

    Проект(ы) делаю на машине с кросскомпилятором, а отлаживаю и изменяю по месту расположения оборудования. Распологать ноут с кросскомпилятором рядом каждый раз нет возможности. Но есть более мобильная техника со связью по WIFI (SSH / TELNET / HTTP) с отлаживаемым оборудованием (IA240-LX, UC7112-Plus). Изменение кода обычно не превышает несколько десятков строк, после чего компиляция и контроль работы по SSH / TELNET. Кроме этого визуальный контроль работы оборудования необходим. И из-за этой мелочи требуется городить рабочее место в условиях вибрации и пыли, а иногда на весу и почти вверх ногами. Для связи с IA240 все равно использую WIFI через роутер, который подклчаю в том же шкафу.

     

    Заранее благодарен!

     

    Отчаялся... но ожидаю из AliExpress "свисток" на основе ATOM с установленным UBUNTU (Не Debian, но всё же). Вот на него и поставлю компилятор. Он же x86 совместимый... то есть обычная Linux машина... только переносимая в кармане. У меня есть в наличии разные девайсы, но на таком процессоре нет. ARM-мы люблю очень, но вот на них и не смог найти возможность компиляции для IA240LX/UC-7112LX-plus.

  8.  

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

     

    Я подозреваю, что это происходит потому, что компилятор может брать заголовочные файлы не из той директории. Попробуйте в makefile изменить строку

    CC=$(PREFIXPATH)/arm-linux-gcc
    

    на

    INCPATH=/usr/local/arm-linux/include
    CC=$(PREFIXPATH)/arm-linux-gcc -I$(INCPATH)
    

    Простите за мою медлительность... Только вчера отыскал... но отписаться сам не мог:

    #include <sys/stat.h>
    
    

    Тоесть в моём примере надо применять добавление в заголовок. Путь для компиляции изменить не додумался. :wacko:

     

    Вообще вот что вышло (смотрите текстовый файл в корне):

    shared_mem.zip

    Спасибо!!!

     

     

  9. Доброго времени суток.

    Вроде Linux... но при компиляции:

    igor@debian-i:/home/ext_projects/shared_mem/w1$ make
    /usr/local/arm-linux/bin/arm-linux-gcc -c -Wall main.c -o main.o
    main.c: In function `main':
    main.c:41: error: `S_IRWXO' undeclared (first use in this function)
    main.c:41: error: (Each undeclared identifier is reported only once
    main.c:41: error: for each function it appears in.)
    main.c:41: error: `S_IRWXG' undeclared (first use in this function)
    main.c:41: error: `S_IRWXU' undeclared (first use in this function)
    make: *** [main.o] Ошибка 1
    
    

    Вот этого (пока бесполезный пример для пробы):

    w1.zip

     

    На другой Linux машине нормально - стоит поправить Makefile/

    Хочу применить... не через сокеты как ранее, а "напрямую" если коды процессов на одном устройстве.

    Заранее спасибо!

  10. Что тут нам посоветовали умные люди:

     

    Здесь описание: http://eddnet.org/?p=358

     

    Попробовали на UC-7112-LX-Plus FW 1.4.0, вроде работает.

    Но есть один момент, сначала надо запускать brige-utils, а потом делать как в примере, используя brctl для объединения eth0 и eth1 в бридж br0.

     

    Как делали:

    modprobe bridge

    brctl addbr br0

    brctl addif br0 eth1

    brctl addif br0 eth0

    ip addr delete 192.168.3.127 dev eth0

    ip addr delete 192.168.4.127 dev eth0

    brctl stp br0 off

    ip link set br0 up

    ip link set eth0 up

    ip link set eth1 up

     

    Спасибо за ответ! Смогу "прощупать" это только завтра - устройство на работе!

     

  11. Доброго времени суток!!! Прошу помощи в настройке "сквозного прохода" с LAN1 на LAN2 и наоборот на UC7112Plus. Ранее настроил по рекомендациям Raspberry Pi 3 (WiFi<-->ETH0), но подобная методика (возможно из-за версии) не прокатила на UC7112Plus. Конкретно интересует пример... ну или решение!

    Заранее благодарен!

  12. Подскажите пож-та, не получается зайти по telnet на устройство. Соединение есть, не знаю логин и пароль. Пробовал admin без пороля, root в обоих случаях - не помогает. И можно ли будет при соединении по telnet изменить IP LAN2 ? СПС за ранее.

    Войдите по последовательному порту - там вы уже в ROOT, поменяйте пароль для ROOT (root) поменяйте пароль для root командой passwd. Потом заходите на устройство хоть по telnet, хоть по ssh согласно новым паролям.

  13. Добрый день,

    Скажите пож-та, а если в устройстве "зашита" какая то программа, то что с ним делать? Как сбросить к "заводскому виду" ?

    Перенастроить не поздно никогда - войдите по последовательному соединению (в комплекте есть шнур) и поменяйте, что хотите. Но если к заводским настройкам то... нажимаете reset и подаёте питание, при этом ресет удерживайте секунд 5. Всё Ваш девайс чист как невеста!

  14. Ранее делал HTTP прокси.... но то познавательные опыты... хоть и рабочие.

    Может кто делал нормальный.... относительно нормальный.

    Сейчас на других устройствах (Raspberry Pi) спокойно собирается из прилагаемого архива.

    Скомпилить его средствами arm-linux-gcc никак не выходит. На Си есть самодельные наработки... но сами понимаете...

    Может есть у кого опыт или другое решение.

    Спасибо!

     

     

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

     

    а не могли бы поделиться информацией как скопировать каталоги через FTP-сервер и обратно их вернуть на 7110? Какими командами? Тоже есть похожая проблема - надо с одного компьютера размножить каталоги на пустые. Вот не знаю как подступиться.

     

    Спасибо!

     

    Всевозможный софт для установки (apache и т.п.)- потребуется устанавливать. Тут на форуме есть (уже давнишние)темы - про "WEB+PHP", "MC" и т.д..

    Копирование и т.д. произвожу средствами "mc" на ПК. Понятное дело, что в /etc надо с правами root MOXA (не PC а именно UC-7112-plus). Удобно "установить" MC и на саму MOXA.

     

    для просто FTP доступа (пример для ROOT):

    igor@debian-i:~$ ftp 192.168.0.240
    Connected to 192.168.0.240.
    220 Moxa FTP server (GNU inetutils 1.4.1) ready.
    Name (192.168.0.240:igor): root
    331 Password required for root.
    Password:
    230- 
    230-     ####        ####    ######    ####### ######      ##
    230-      ###       ####   ###    ###    ####   ####      ###
    230-       ###      ###   ###      ###    ###    ##       ###
    230-       ###     ####   ##        ##    ###   #         ####
    230-       ####    # ##  ###        ###    ### ##        ## ##
    230-      ## ##    # ##  ###         ##     ####         #  ##
    230-      ## ###  ## ##  ##          ##     ####         #  ###
    230-      ##  ##  #  ##  ##          ##      ###        #######
    230-      ##  ##  #  ##  ###        ###     #####       #    ##
    230-      ##   ###   ##  ###        ###    ##  ###      #    ###
    230-      ##   ###   ##   ##        ##    ##    ###    ##     ##
    230-      ##   ###   ##    ##      ##     #     ###    #      ##
    230-    ######  #  ######   ########   ####### ###########  ######
    230- 
    230- For further information check:
    230- http://www.moxa.com/
    230- 
    230 User root logged in.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> ls
    200 PORT command sucessful.
    150 Opening ASCII mode data connection for '/bin/ls'.
    -rw-------    1 root     root          320 Sep 19 04:25 .bash_history
    -rw-r--r--    1 root     root           81 Apr 29  2013 .bash_profile
    -rw-r--r--    1 root     root           81 Apr 29  2013 .bashrc
    drwx------    2 root     root         4096 Jun  4  2015 .cedit
    drwxr-xr-x    2 root     root         4096 Jul 29 20:47 .mc
    drwx------    2 root     root         4096 Apr  9  2016 .ssh
    -rw-r--r--    1 root     root            0 Mar 14  2015 rm
    226 Transfer complete.
    ftp> help
    Commands may be abbreviated.  Commands are:
                                                                                                                                                                                                    
    !               dir             mdelete         qc              site                                                                                                                            
    $               disconnect      mdir            sendport        size                                                                                                                            
    account         exit            mget            put             status                                                                                                                          
    append          form            mkdir           pwd             struct                                                                                                                          
    ascii           get             mls             quit            system                                                                                                                          
    bell            glob            mode            quote           sunique                                                                                                                         
    binary          hash            modtime         recv            tenex
    bye             help            mput            reget           tick
    case            idle            newer           rstatus         trace
    cd              image           nmap            rhelp           type
    cdup            ipany           nlist           rename          user
    chmod           ipv4            ntrans          reset           umask
    close           ipv6            open            restart         verbose
    cr              lcd             prompt          rmdir           ?
    delete          ls              passive         runique
    debug           macdef          proxy           send
    ftp> 
    
    

    команда ftp <ваш IP>  запускается на вашем ПК с Linux. recv <файл> - читаем файл с устройства в текущую директорию вашего ПК, а send <файл> - соответственно из вашего ПК в устройство. Обратите внимание на binary - возможно потребуется переход в режим двоичного обмена (иначе запускаемые программы могут не запускаться).

    Наберите man ftp - для получения полной информации о пакете ftp на вашем ПК.

    Для файлов, необходимых для запуска на устройстве возможно потребуется указать, что её можно запускать в консоли устройства:

    chmod +x <ваш файл>.

    В документации на устройство это всё есть.

  16. Доброго времеени суток! Для ранее рассмотренного сервера modbusRTUserverS добавлена dll-ка, которая обеспечивает связь с устройствами по Modbus RTU, программ написанных в Visual Studio(C++) - испытано. И Delphi - производится испытание. Собстенно эта dll-ка обеспечивает связь с UC-7101, UC7112plus, IA240(241), на котоых запущен сервер и к котрым подключены устройства по Modbus RTU. Одним словом написанная вами прогамма под Windows XP через эту dll-ку будет работать с сервером modbusRTUserverS.

     

    Собственно со стороны dll пока поддерживается только несколько команд:

    чтение регистров хранения  : 3

    чтение регистров ввода : 4

    запись в единичный регистр : 6

    запись данных в регистры : 16

     

    Список функций dll:

    Init - без параметров, возвращаемых значений нет. Производит инициализацию структуры.

     

    cMRTUsConnect (соединение) - входные параметры:

    1) указатель на строку типа char, котрая содержит IP адрес сервера modbusRTUserverS например "192.168.0.246";

    2) номер порта сервера modbusRTUserverS. Тип int

    При удачном выполнении (соединении) возвращает 0. При этом в dll запускается рабочий поток поддержания связи и обмена с сервером modbusRTUserverS и соответсвенно устройствами, подключенными к MOXA по Modbus RTU. Другие возвращаемые значения:

    1 - ошибка сокета

    2 - ошибка соединения

    3 - не запустился рабочий поток dll-ки

    Возвращаемые значения типа int.

     

    cMRTUsCMD - собственно работа с устройствами. Входные параметры:

    1) адрес устройства на шине Modbus RTU. Параметр типа unsigned char (uint8, byte ...)

    2) номер функции (3, 4, 6, 16) - параметр типа  unsigned char (uint8, byte ...)

    3) началтный регистр устройства - параметр типа unsigned short (uint16 ...) как принято в протоколе.

    4) количество регистров для записи (команда 16) или чтения (команды 3 и 4) - параметр типа unsigned short (uint16 ...) как принято в протоколе. Для команды 6 - запись в один регистр данный параметр игнорируется.

    5) указатель на начальный регистр типа unsigned short (uint16 ...) как принято в протоколе. В случае чтения (функции 3 и 4) по указателю в этот массив будут записаны регистры из устройства. В случае записи из этого массива будут записаны значения в регистры устройства.

    6) фрейм (кадр) - параметр типа int специально для сервера (0..2) позволяет разделить команды для устройства (смотрите далее)

    7) флаг - параметр типа int - определяет цикличность.

    Пример (для C++);

    cMRTUsCMD (

    4 - адрес устройства

    3 - чтение регистров

    25 - начальый регистр

    1 - в количестве одного

    &rd - прочитать в указанное место

    0 - используем кадр 0

    1 - и при этом сервер будет непрерывно читать данные из этого регистра потом и без нас

    )

    Все действия выполняются в потоках как самого сервера, так и в нашей dll-ке.

     

    Так же кроме dll-ки cMRTUsS, измененный сервер modbusRTUserverS - в CodeLite, в директории Release откомпилирован специально для UC-7101-LX. Для UC-7112-LX-Plus и IA240(241)-LX применить другой компилятор!

     

    Не ругайтесь

    Спасибо!

     

    Если угодно, то проект (исходники в Visual Studio 2005) cMRTUsS.dll могу предоставить. Тут в архиве только готовая к работе, потому как хочу проверить совместимость(работоспособность) для Дельфи. В Дельфи я ноль, а моим сотрудникам нет времени уделить достаточно времени, а я ухожу в отпуск. В C# у меня не получается обращение по указателям. В нормальном C/C++ всё работает - сам делаю и пробую.

    cMRTUsS.zip

    modbusRTUserverS.zip

  17. Возник вопрос - может добавить "стандартный" ModbusTCP в сервер (как открытие дополнительного TCP порта? Правда на мой взгляд этот вариант "малоинформативный" с точки зрения контроля результата связи, режима повторения запроса и ещё ряда "функций". Или просто сделать как SERIAL<---->TCP? Но это будет либо как дополнение, либо как вариант компиляции с указанием соответствующих ключей. И ещё - это кому надо?

     

    Сейчас добавлен "второй тип" обращения - при котором запись обращения к устройству удаляется из цикла после успешного выполнения или при  истечении "времени жизни" цикла обращения к указанному устройству по Modbus RTU. (для каждого устройства оно своё - при соединении по TCP), "первый тип" применяется при непрерывной работе с устройством - удобно для чтения параметра (особенно если связь по Modbus имеет случайные сбои - по причине монтажа). Время жизни возобновляется при обращении к modbusRTUserverS ("S"-значит "serial port" потому как существует тестовый вариант TCP(modbusRTUserverTCP) - испытан на устройстве от ADVANTECH - но по смыслу "бестолковый" - тоже самое но в массиве набор TCP адресов и портов).

     

    Сейчас идёт работа над ошибками. Кроме того возможно будет переделка для компиляции в режиме клиента, когда одна программа будет иметь доступ к нескольким сетям Modbus на разных устройствах, соединенных между собой по TCP.

     

    это кем-нибудь будет применяться?

     

    Заранее Спасибо!

  18. Извините меня за беспокойство!

    Эта ошибка найдена!

    А именно в сервере связи:

    ........

        }
                break;
            case _type_from_modbus3:
                #if(_dbg > 0)
                    printf("mwork ServConn for mb3\n");
                #endif
                switch(scop)
                {
                    case _cop_wr:    //запись данных в труктуру Modbus 3
                        //
                        memcpy(&work.mb3s, rbuf + _daddr, sizeof(MODBUS3_SERVER));
                        //
                        (*(U16*)(sbuf + _tcp_szl))        = 0;
                        res                     = 0;
                        break;
                    case _cop_rd:    //передача данных в Modbus 3
                        (*(U8*)(sbuf + _type))            = stype;
                        ssize++;
                        (*(U8*)(sbuf + _cop))            = scop;
                        ssize++;
                        //
                        memcpy(sbuf + _daddr, &work.mb3c, sizeof(MODBUS3_CLIENT));
                        ssize += sizeof(MODBUS3_CLIENT);
                        //
                        (*(U16*)(sbuf + _tcp_szl))        = ssize;
                        res                     = ssize;
                        break;
                    case _cop_rdwr:    //передача данных в Modbus 3
                        //
                        memcpy(&work.mb3s, rbuf + _daddr, sizeof(MODBUS3_SERVER));
                        //
                        (*(U8*)(sbuf + _type))            = stype;
                        ssize++;
                        (*(U8*)(sbuf + _cop))            = scop;
                        ssize++;
                        //
                        memcpy(sbuf + _daddr, &work.mb3c, sizeof(MODBUS3_CLIENT));
                        ssize += sizeof(MODBUS3_CLIENT);
                        //
                        (*(U16*)(sbuf + _tcp_szl))        = ssize;
                        res                     = ssize;
                        break;
                    default:
                        (*(U16*)(sbuf + _tcp_szl))        = 0;
                        res                     = 0;
                        break;
                }

                // - А в этой строке дожен быть break;
            case _type_from_modbus4:
                #if(_dbg > 0)
                    printf("mwork ServConn for mb4\n");
                #endif
                switch(scop)

    ....................

     

    таким образом "разбор" данных завершался для процесса 3 и начинался "разбор" процесса 4

     

    Ещё раз простите! Спасибо что откликнулись!

  19. То есть, насколько я понимаю, система выглядит так: modbusRTUserverS - простые преобразователи Modbus RTU в TCP, а процессы IA240_modbus содержат всю рабочую логику, ведут обмен с устройствами, обращаясь к modbusRTUserverS, а между собой передают данные через сервер связи. При этом, modbusRTUserverS к серверу связи не имеют никакого отношения и нужно искать проблему именно во взаимодействии процессов и сервера.

    Как процессы начинают работать с сервером связи? Они просто подключаются к нему или кроме подключения ещё и как-то регистрируются? Не может ли сервер связи как-то "перепутать" процессы во время регистрации? Как происходит процесс обмена данными? Хранит ли сервер связи какие-то данные или только передаёт их от отправителя к получателю? Передаются какие-то фрагменты данных (отдельные параметры) или все данные системы единым блоком? К чему именно относится отчёт? Это данные о зарегистрированных процессах, которые не меняются во время выполения, или таблица всех параметров, или такой отчёт относится только к одному сеансу связи? Не может ли какой-то процесс изменить поля stat, так что возникает эта проблема?

     

    Именно так! modbusRTUserverS - обеспечение процесса обмена по Modbus RTU (CRC, контроль связи, повторение и т.п.); IA240_modbus(1..4) - логика работы; сервер связи обмен между IA240_modbus(1...4). Он содержит в себе структуры (массивы) данных для приёма и передачи каждому из IA240_modbus(1..4) в отдельности. Обмен организован через отдельные потки для каждого TCP соединения (синхронизация через мютекс). Его цикл Main производит копирование нужных данных из одной структуры(массива) принятых данных от одного IA240_modbus в массив для передачи другому IA240_modbus. Всё "синхронизировано" всесте с другими потками через мютекс. Кроме того при указании перед компиляцией"ключа":

    #define _mdbg			1		//консольное сообщение цикла main
    

    производикся компиляция для вывода отчёта по текущему консольному соединению, иначе без вывода.

     

    Каждий из IA240_modbus(1..4) при запуске производит соединение с соответствующим сервером modbusRTUserverS и общим сервером связи. Таким образом modbusRTUserverS имеет непрерывное в процессе всей работы соединение с соответствующим IA240_modbus(1..4). А сервер связи имеет непрерывную связь со всеми четыремя IA240_modbus(1..4).

     

    В отчёте только выборочная индикация параметров из массивов для каждого соединения IA240_modbus(1..4) и на процесс работы влиять не может.

     

    Не может ли сервер связи как-то "перепутать" процессы во время регистрации?

     

    По идее не может

    тут при приёме запроса на соединение создаётся поток для соединения в сервере:

                    ....
                    csock = accept(listener,NULL,NULL);
                    if((cserver.csock > 0) && (csock == cserver.csock))
                    {
    			pthread_mutex_unlock(&ServerMutex);
                            usleep(_listen_sleep);
    			pthread_mutex_lock(&ServerMutex);
                            goto mt1;
                    }
    		//создание потока клиента
                    printf("-----CLIENT-----\r\n");
                    printf("-- sock. %i --\r\n", csock);
                    count = 0;
                    //тут ищем место для записи параметров соединения
                    while(count < _max_sock)
                      {
                            if(cserver.midcl[count] == 0)
                            {
    				#if(_dbg > 0)
    					printf("ServCoon clien %i connecting...\n",count);
    				#endif
                                    cserver.csock	 		= csock;
                                    cserver.idclient 		= count;
    				cserver.midcl[count]		= 0xFF;
    				//				
    				pthread_attr_init(&cserver.tattr[count]);
    				pthread_attr_setdetachstate(&cserver.tattr[count], PTHREAD_CREATE_DETACHED);
    				//thread_attr_setscope(&cserver.tattr[count], PTHREAD_SCOPE_SYSTEM);
    				//
                                    //pthread_create(&cserver.pth[count],NULL,(void*) server_con, &cserver);
    				pthread_create(&cserver.pth[count], &cserver.tattr[count],(void*) server_con, &cserver);
    				//
                                    cserver.cntclient++;
    				break;
    				//goto mt1;
                            }
                            count++;
                    }
    

    Сам поток (каждый из потоков) имеет собственный массив на приём и передачу в сервере:

    //поток клиента
    void server_con(CSERV * cs)
    {
    	int		countlive;
    	int		setcntlive;
    	int		csock;
    	int		idclient;
    	//int		rd;
    	pthread_t	pth;
    	U8		midcl;
    	U8		rxbuf[_size_buf] //буфер приема;
    	U8		txbuf[_size_buf] //буфер передачи;
    	int		txsz 		= 0;
    	U8		work;
    	int		res;
    	#if(_deb_con == 1)
    		printf("ServConn client connected\n");
    	#endif
    
    	pthread_mutex_lock(&ServerMutex);
    
    	countlive 	= cs->setcntlive;
    	setcntlive	= cs->setcntlive;
    	csock		= cs->csock;
    	idclient	= cs->idclient;
    	midcl		= cs->midcl[idclient];
    	pth		= cs->pth[idclient];
    	work		= cs->work;
    	//
    	pthread_mutex_unlock(&ServerMutex);
    	//
    	#if(_deb_con == 1)
    		printf("ServConn client connected and starting...\n");
    	#endif
            .......
            default: //нормально - данные приняты
                    countlive = setcntlive;
                    //обработка команд и данных сокета
                    #if(_deb_con == 1)
                        printf("---starting mwork...\n");
                    #endif
                    pthread_mutex_lock(&MainMutex);
                    txsz = mwork(&rxbuf[0], &txbuf[0]); //обработка нашего клиента
                    pthread_mutex_unlock(&MainMutex);
                    //if(txsz == 0)
                    //    continue;
                    break;
    
            .......
    

    копирование данных по идентификатору в сервере (на примере 4-го процесса):

    //вызываемая функция анализа и
    //обработки запросов по сокетам
    inline int    mwork(U8 * rbuf, U8 * sbuf)
    {
        int     res     = 0;
        U8     stype    = (*(U8*)(rbuf + _type)); //тип (команда-чтение;запись;чтение и запись) то что желает клиент
        U8    scop    = (*(U8*)(rbuf + _cop)); //от клиента берём его идентификатор (он сам прислал)
        U16    ssize    = 0x02;
        
        //
        #if(_dbg > 0)
            printf("stype = %i  cop = %i\n", stype, scop);
        #endif
        //pthread_mutex_lock(&MainMutex);
        switch(stype)
        {        
             .......
             case _type_from_modbus4:
    			#if(_dbg > 0)
    				printf("mwork ServConn for mb4\n");
    			#endif
    			switch(scop)
    			{
    				case _cop_wr:	//запись данных в труктуру Modbus 4 - для сервера					//
    					memcpy(&work.mb4s, rbuf + _daddr, sizeof(MODBUS4_SERVER));
    					//
    					(*(U16*)(sbuf + _tcp_szl))		= 0;
    					res 					= 0;
    					break;
    				case _cop_rd:	//чтение данных из Modbus 4 - для клиента					(*(U8*)(sbuf + _type))			= stype;
    					ssize++;
    					(*(U8*)(sbuf + _cop))			= scop;
    					ssize++;
    					//
    					memcpy(sbuf + _daddr, &work.mb4c, sizeof(MODBUS4_CLIENT));
    					ssize += sizeof(MODBUS4_CLIENT);
    					//
    					(*(U16*)(sbuf + _tcp_szl))		= ssize;
    					res 					= ssize;
    					break;
    				case _cop_rdwr:	//чтение и запись данных в Modbus 4
     					//
    					memcpy(&work.mb4s, rbuf + _daddr, sizeof(MODBUS4_SERVER));
    					//
    					(*(U8*)(sbuf + _type))			= stype;
    					ssize++;
    					(*(U8*)(sbuf + _cop))			= scop;
    					ssize++;
    					//
    					memcpy(sbuf + _daddr, &work.mb4c, sizeof(MODBUS4_CLIENT));
    					ssize += sizeof(MODBUS4_CLIENT);
    					//
    					(*(U16*)(sbuf + _tcp_szl))		= ssize;
    					res 					= ssize;
    					break;
    				default:
    					(*(U16*)(sbuf + _tcp_szl))		= 0;
    					res 					= 0;
    					break;
    			}
    			break;
    

    Хранит ли сервер связи какие-то данные или только передаёт их от отправителя к получателю?

     

    Для прийма от каждого и для передачи каждому в отдельности

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

     

    Опишите, пожалуйста, конкретно, по пунктам:

    1) Назначение каждого из элементов системы (modbusRTUserverS, сервер межпроцессной связи, процессы IA240_modbusx).

    2) Что подразумевается под взаимодействием процессов между собой? Они пересылают какие-то данные или, может, один процесс вызывает участки кода второго процесса или ещё что-то?

    3) В чём именно состоит проблема? Неправильно выводятся данные на консоль или есть какие-то более серьёзные последствия?

    4) Какой из элементов выводит первый ("правильный"), а какой - второй ("неправильный") отчёт?

    5) Какие участки кода отвечают за формирование отчётов?

    6) В каких условиях выводится первый, а в каких - второй отчёт? Что нужно сделать, чтобы программа, работающая правильно, стала работать неправильно или наоборот?

    7) Вы указываете на объём занятой памяти. Избыточно ли оно для Вашей задачи? Или другими словами - это описание второй проблемы или условий? Изменяется ли объём занятой памяти со временем? Насколько быстро?

     

    1 - на Modbus 1 (/dev/ttyM0) экземпляр программы modbusRTUserverS (115200)- подключены: счётчик метража СИ30; Устройство ввода-вывода (кнопки - пуск/стоп, датчики положения ножниц и пневмоножницы обрезки кабеля). С этим работает процесс (программа) 1. Отвечает за изменение метража, процесс ножниц. Параметры настроек (задание, режим, состояние и т.п.) получает и принимает от других процессов *программ) 2...4 через программу "Сервер Связи". Данный процесс "ведущий"

    2 - на Modbus  2 (/dev/ttyM1) экземпляр программы modbusRTUserverS (9600) - подключена панель ИП320. Ранее подключал это по Modbus 1, но это устройство имеет увеличенный интервал запрос-ответ и в результате пришлось его повесить на отдельный модбас и снизить скорость. Данная панель позволяет изменять и индицировать параметры работы. Все значения принимаются и передаются через "сервер связи" другим программам (процессам) 1,3,4.

    3 - на Modbus  3 (/dev/ttyM2) экземпляр программы modbusRTUserverS (19200) - подключен частотный преобразователь привода протяжки кабеля. С ним работает программа (процесс) 3, которая получает значение задания метража, измеренный метраж и режим работы, а отдаёт процессу 1 свое состояние, ошибки, завершение и т.п.

    4 - на Modbus  3 (/dev/ttyM3) экземпляр программы modbusRTUserverS (19200) - подключен частотный преобразователь привода намотки. Аналогично протяжке, но только в выбранном режиме намотки. Данный привод находится на удалении и в режиме протяжки может быть вообще не подключен (не подано питание).

     

    "Сервер связи" (ServConn)только обмен между программами (процессами). По замыслу управляющие программы не обязательно могут находиться на одном устройстве (ну кроме modbusRTUserverS), но также на других IA240LX/UC-7112LX-Plus.

     

    Запуск производится последовательно (скрипт Cabel - с параметром start или restart):

    -Сначала запускаются серверы работы с портами Modbus RTU (modbusRTUserverS), каждый из которых в парметрах запуска получает номер последовательного порта, его настройки, и TCP порт прослушивания (для допуска других процессов к устройствам на соответствующем модбасе)

    -Затем запускается "сервер связи"(ServConn), котрый в параметрах запуска получает порт TCP.

    -И запускаются все 4 программы (IA240_modbus1, IA240_modbus2, IA240_modbus3, IA240_modbus4) работы, котрые в своих параметрах запуска получают адреса и порты TCP соответствующих серверов Modbus для доступа к устройствам и адрес и порт TCP "сервера связи".

    Таким образом каждая программа(процесс) отвечает за работу устройств только на "своём" модбасе, но при этом имеет(передаёт) данные от других программ, которые работают со своими устройствами на "своих" модбасах. Данная "схема" позволила максимально "распараллелить" всю работу. Кроме этого отладку программ можно производить и на ноутбуке (с Linux, если откомпилировать для него, разумеется кроме modbusRTUserverS, которая должна иметь свой указанный последоватеьный порт)  не загружая в устройство. Можно так же распределить задачи и на "соседних" устройствах и не обязательно именно IA20, при условии наличия связи между ними по сети Ethernet. Правда запускать их надо уже по своим правилам (автозапуск).

     

    Собственно сейчас проблема в том, что данные о подключении и статусе работы, а так же параметры "путаются" (дублируются) на программах управления протяжкой и намоткой (IA240_modbus3, IA240_modbus4). Предположительно в "сервере связи" (ServConn) - вот и думаю, что что-то сбоит в обмене по TCP. Вроде всё обыскал. Может быть проблема и в том, что сервер связи многопоточная программа и для компиляции надо что-то указать (ключ -lpthread уже указан в Makefile) чтобы небыло "слипания" данных. Да кстати каждый процесс при связи с сервером связи имеет свой идентификатор (не путать с ID пакета в отчёте - это просто тестовый счётчик), а в сервере связи свои структуры данных для каждого идентификатора индивидуальны. Вот и не должны они путаться. И ещё это происходит только с этими двумя последними при запуске процессами (IA240_modbus3, IA240_modbus4). Но стоит оговориться что частотный преобразователь привода намотки не подключен. За это отвечает экземпляр сервера modbusRTUserverS на /dev/ttyM3, который сообщает процессу (программе) IA_240_modbus4 об ошибочном доступе к ПЧВ3 и повторяет попытку.

     

    4) Какой из элементов выводит первый ("правильный"), а какой - второй ("неправильный") отчёт?

    В отчете 3 и 4 столбцы в строке "stat" и ID не должны иметь одинаковые данные - потому как статус(в stat) связи с частотником протяжки имеет маску 0x08, а с частоткиком намотки 0x10 (правильно привод протяжки кодключен, а привод намотки нет):

     

    --- ----------ServConn-------- ---

    mb1 IDfr: 000010BF mb2 IDfr: 00000925 mb3 IDfr: 000010C1 mb4 IDfr: 000010B1 ---ID From

    mb1 IDto: 000010BF mb2 IDto: 00000925 mb3 IDto: 000010C1 mb4 IDto: 000010B1 ---ID To

    mb1 stat: 820100AF mb2 stat: 80000020 mb3 stat: 02000008 mb4 stat: 04000000 ---stat

    mb1 mode: 86000028 mb2 mode: 820100AF mb3 mode: 820100AF mb4 mode: 820100AF ---mode

    mb1 Lght: 0.000000 mb2 Lght: 0.000000 mb3 Lght: 0.000000 mb4 Lght: 0.000000 ---Lenght

    mb1 SLgt: 0.000000 mb2 SLgt: 0.000000 mb3 SLgt: 0.000000 mb4 SLgt: 0.000000 ---Set Lenght

    mb1eLgt1: 0.000000 mb2eLgt1: 0.000000 mb3eLgt1: 0.000000 ------------------ ---Set Err Correct Lenght M1

    mb1eLgt2: 0.000000 mb2eLgt2: 0.000000 ------------------ mb4eLgt2: 0.000000 ---Set Err Correct Lenght M2

    mb1 SCCt: 00000000 mb2 SCCt: 00000000 ------------------ ------------------ ---Set Cnt Cut

    mb1 CntC: 00000000 mb2 CntC: 00000000 ------------------ ------------------ ---Cnt Cut

    mb1_SPM1: 0.000000 ------------------ mb3_SPM1: 0.000000 ------------------ ---pr_speed_m1

    mb1_SdM1: 3.000000 ------------------ mb3_SdM1: 3.000000 ------------------ ---pr_speed_m1_min

    mb1_SuM1: 50.000000 ------------------ mb3_SuM1: 50.000000 ------------------ ---pr_speed_m1_max

    ------------------ ------------------ mb3_SLu1: 45.000000 ------------------ ---StepSpeedLenghtUp_m1

    ------------------ ------------------ mb3_SLd1: 45.000000 ------------------ ---StepSpeedLenghtDown_m1

    ------------------ ------------------ mb3_SLD1: 0.300000 ------------------ ---SetLenghtDelta_m1

    mb1_SPM2: 0.000000 ------------------ ------------------ mb4_SPM2: 0.000000 ---pr_speed_m2

    mb1_SdM2: 5.000000 ------------------ ------------------ mb4_SdM2: 5.000000 ---pr_speed_m2_min

    mb1_SuM2: 50.000000 ------------------ ------------------ mb4_SuM2: 50.000000 ---pr_speed_m2_max

    ------------------ ------------------ ------------------ mb4_SLu2: 35.000000 ---StepSpeedLenghtUp_m2

    ------------------ ------------------ ------------------ mb4_SLd2: 35.000000 ---StepSpeedLenghtDown_m2

    ------------------ ------------------ ------------------ mb4_SLD2: 0.400000 ---SetLenghtDelta_m2

    а вот неправильно (слиплись и статус и счётчик пакетов):

     

    -- ----------ServConn-------- ---

    mb1 IDfr: 000010BF mb2 IDfr: 00000925 mb3 IDfr: 000010BC mb4 IDfr: 000010BC ---ID From

    mb1 IDto: 000010BF mb2 IDto: 00000925 mb3 IDto: 000010BA mb4 IDto: 000010BB ---ID To

    mb1 stat: 820100AF mb2 stat: 80000020 mb3 stat: 02000008 mb4 stat: 02000008 ---stat

    mb1 mode: 82000028 mb2 mode: 820100AF mb3 mode: 820100AF mb4 mode: 820100AF ---mode

    mb1 Lght: 0.000000 mb2 Lght: 0.000000 mb3 Lght: 0.000000 mb4 Lght: 0.000000 ---Lenght

    mb1 SLgt: 0.000000 mb2 SLgt: 0.000000 mb3 SLgt: 0.000000 mb4 SLgt: 0.000000 ---Set Lenght

    mb1eLgt1: 0.000000 mb2eLgt1: 0.000000 mb3eLgt1: 0.000000 ------------------ ---Set Err Correct Lenght M1

    mb1eLgt2: 0.000000 mb2eLgt2: 0.000000 ------------------ mb4eLgt2: 0.000000 ---Set Err Correct Lenght M2

    mb1 SCCt: 00000000 mb2 SCCt: 00000000 ------------------ ------------------ ---Set Cnt Cut

    mb1 CntC: 00000000 mb2 CntC: 00000000 ------------------ ------------------ ---Cnt Cut

    mb1_SPM1: 0.000000 ------------------ mb3_SPM1: 0.000000 ------------------ ---pr_speed_m1

    mb1_SdM1: 3.000000 ------------------ mb3_SdM1: 3.000000 ------------------ ---pr_speed_m1_min

    mb1_SuM1: 50.000000 ------------------ mb3_SuM1: 50.000000 ------------------ ---pr_speed_m1_max

    ------------------ ------------------ mb3_SLu1: 45.000000 ------------------ ---StepSpeedLenghtUp_m1

    ------------------ ------------------ mb3_SLd1: 45.000000 ------------------ ---StepSpeedLenghtDown_m1

    ------------------ ------------------ mb3_SLD1: 0.300000 ------------------ ---SetLenghtDelta_m1

    mb1_SPM2: 0.000000 ------------------ ------------------ mb4_SPM2: 0.000000 ---pr_speed_m2

    mb1_SdM2: 5.000000 ------------------ ------------------ mb4_SdM2: 5.000000 ---pr_speed_m2_min

    mb1_SuM2: 50.000000 ------------------ ------------------ mb4_SuM2: 50.000000 ---pr_speed_m2_max

    ------------------ ------------------ ------------------ mb4_SLu2: 35.000000 ---StepSpeedLenghtUp_m2

    ------------------ ------------------ ------------------ mb4_SLd2: 35.000000 ---StepSpeedLenghtDown_m2

    ------------------ ------------------ ------------------ mb4_SLD2: 0.400000 ---SetLenghtDelta_m2

     

    Это происходит циклически около 30 на 30 секунд иногда реже или чаще.

     

    5) Какие участки кода отвечают за формирование отчётов?

     

    В сервере связи в цикле main (всего-навсего вывод на консоль некотрых данных сервера связи принятых от процессов и подготовленных для отправки им):

    #if(_mdbg > 0)
    	if(mdbgcnt < 1)
    	{
    		printf("\n---\t\t\t\t----------ServConn--------\t\t\t\t---\n");
    		printf("mb1 IDfr: %.8X\tmb2 IDfr: %.8X\tmb3 IDfr: %.8X\tmb4 IDfr: %.8X\t---ID From\n", 
    		work.mb1s.id, work.mb2s.id, work.mb3s.id, work.mb4s.id);
    		printf("mb1 IDto: %.8X\tmb2 IDto: %.8X\tmb3 IDto: %.8X\tmb4 IDto: %.8X\t---ID To\n", 
    		work.mb1c.id, work.mb2c.id, work.mb3c.id, work.mb4c.id);
    		printf("mb1 stat: %.8X\tmb2 stat: %.8X\tmb3 stat: %.8X\tmb4 stat: %.8X\t---stat\n", 
    		work.mb1s.stat, work.mb2s.stat, work.mb3s.stat, work.mb4s.stat);
    		printf("mb1 mode: %.8X\tmb2 mode: %.8X\tmb3 mode: %.8X\tmb4 mode: %.8X\t---mode\n", 
    		work.mb1c.mode, work.mb2c.mode, work.mb3c.mode, work.mb4c.mode);
    		printf("mb1 Lght: %f\tmb2 Lght: %f\tmb3 Lght: %f\tmb4 Lght: %f\t---Lenght\n", 
    		work.mb1s.Lenght, work.mb2c.Lenght, work.mb3c.Lenght, work.mb4c.Lenght);
    		printf("mb1 SLgt: %f\tmb2 SLgt: %f\tmb3 SLgt: %f\tmb4 SLgt: %f\t---Set Lenght\n",
    		work.mb1c.SetLenght, work.mb2s.SetLenght, work.mb3c.SetLenght, work.mb1c.SetLenght);
    		printf("mb1eLgt1: %f\tmb2eLgt1: %f\tmb3eLgt1: %f\t------------------\t---Set Err Correct Lenght M1\n",
    		work.mb1c.ErrSetLenghtM1, work.mb2s.ErrSetLenghtM1, work.mb3c.ErrSetLenghtM1);
    		printf("mb1eLgt2: %f\tmb2eLgt2: %f\t------------------\tmb4eLgt2: %f\t---Set Err Correct Lenght M2\n",
    		work.mb1c.ErrSetLenghtM2, work.mb2s.ErrSetLenghtM2, work.mb4c.ErrSetLenghtM2);
    		printf("mb1 SCCt: %.8u\tmb2 SCCt: %.8u\t------------------\t------------------\t---Set Cnt Cut\n",
    		work.mb1c.SetCntCut, work.mb2s.SetCntCut);
    		printf("mb1 CntC: %.8u\tmb2 CntC: %.8u\t------------------\t------------------\t---Cnt Cut\n",
    		work.mb1s.CntCut, work.mb2c.CntCut);
    		printf("mb1_SPM1: %f\t------------------\tmb3_SPM1: %f\t------------------\t---pr_speed_m1\n",
    		work.mb1s.pr_speed_m1, work.mb3c.pr_speed_m1);
    		printf("mb1_SdM1: %f\t------------------\tmb3_SdM1: %f\t------------------\t---pr_speed_m1_min\n",
    		work.mb1c.pr_speed_m1_min, work.mb3c.pr_speed_m1_min);
    		printf("mb1_SuM1: %f\t------------------\tmb3_SuM1: %f\t------------------\t---pr_speed_m1_max\n",
    		work.mb1c.pr_speed_m1_max, work.mb3c.pr_speed_m1_max);
    		printf("------------------\t------------------\tmb3_SLu1: %f\t------------------\t---StepSpeedLenghtUp_m1\n",
    		work.mb3c.StepSpeedLenghtUp);
    		printf("------------------\t------------------\tmb3_SLd1: %f\t------------------\t---StepSpeedLenghtDown_m1\n",
    		work.mb3c.StepSpeedLenghtWown);
    		printf("------------------\t------------------\tmb3_SLD1: %f\t------------------\t---SetLenghtDelta_m1\n",
    		work.mb3c.SetLenghtDelta);
    		printf("mb1_SPM2: %f\t------------------\t------------------\tmb4_SPM2: %f\t---pr_speed_m2\n",
    		work.mb1s.pr_speed_m2, work.mb4c.pr_speed_m2);
    		printf("mb1_SdM2: %f\t------------------\t------------------\tmb4_SdM2: %f\t---pr_speed_m2_min\n",
    		work.mb1c.pr_speed_m2_min, work.mb4c.pr_speed_m2_min);
    		printf("mb1_SuM2: %f\t------------------\t------------------\tmb4_SuM2: %f\t---pr_speed_m2_max\n",
    		work.mb1c.pr_speed_m2_max, work.mb4c.pr_speed_m2_max);
    		printf("------------------\t------------------\t------------------\tmb4_SLu2: %f\t---StepSpeedLenghtUp_m2\n",
    		work.mb4c.StepSpeedLenghtUp);
    		printf("------------------\t------------------\t------------------\tmb4_SLd2: %f\t---StepSpeedLenghtDown_m2\n",
    		work.mb4c.StepSpeedLenghtWown);
    		printf("------------------\t------------------\t------------------\tmb4_SLD2: %f\t---SetLenghtDelta_m2\n",
    		work.mb4c.SetLenghtDelta);
    		//
    		mdbgcnt	= (1000000 / _main_sleep);
      	}
    	else
    		mdbgcnt--;
    

    при опции компиляции в файле config.h:

    #define _mdbg			1		//консольное сообщение цикла main
    

    6) В каких условиях выводится первый, а в каких - второй отчёт? Что нужно сделать, чтобы программа, работающая правильно, стала работать неправильно или наоборот?

    Ничего делать не надо - само по себе.

     

    7) Вы указываете на объём занятой памяти. Избыточно ли оно для Вашей задачи? Или другими словами - это описание второй проблемы или условий? Изменяется ли объём занятой памяти со временем? Насколько быстро?

    Памяти пропасть - задачи-то небольшие!

    Незначительно - практически незаметно. И в плюс и в минус.

    Находясь в цехе это определить не удаётся. Нет возможности непрерывно наблюдать часами.

     

    И последнее - забыл сказать. Компилировал пакетом для UC-7112-LX-Plus - думаю это не так важно (надеюсь там нет специальных ограничений - ранее им же и делал другие проекты). Может я не прав?

  21. Имеется проект на одном устройстве - при запуске с помощью bash скрипта:

    1) - запускаются 4 экземпляра сервера modbusRTUserverS (тут проблем нет) для каждого последовательного порта с прослушиванием для каждого своего TCP порта - соответственно.

    2) - запускается "сервер межпроцессовой связи"

    3) - запускаются 4 процесса для работы с 4 интерфейсами по ModbusRTU через запущенные серверы. И эти же процессы взаимодействуют между собой через заранее запущенный "сервер межпроцессорной связи"

    Все взаимодействия через локальные (127.0.0.1) TCP соединения. Т.е. всё запущено на одном устройстве.

     

    Собственно проблема: "слипаются" данные двух последних рабочих процессов. Выглядит это по консольному выводу "сервера связи" повторений данных для этих последних процессов, которые управляют двумя частотными преобразователями по двум разным ModbusRTU соединениям через серверы  modbusRTUserverS. Всё это запускается от имени пользователя. При консольном выводе для каждого процесса вроде всё нормально. Сервер связи - точнее его потоки(многопоточная схема) испытал и отделяемые и не отделяемые. Возможно на каждый поток надо указать свой стек и т.п. но примеры для MOXA не компилятся

     

    при выполнеии команды free занято 30М из 60М (округляю) и буфер более 3М. Обращение каждого процесса к "серверу связи" для приёма и передачи проискодит (интервал) 50мс. с таким же интервалом происходит обращение каждого процесса к устройствам по ModbusRTU через соответствующие серверы.

     

    Может есть у кого соображения. Может выделение памяти как-то изменить?

    Оборудование почти оживил (разработал) но вот возникла эта проблема в процессе пусконаладки. Ранее делал похожую схему, но без сервера связи, а через файлы на рам диске, но там и время реакции было не так важно.

    Уже не знаю куда копать! Исходники если угодно могу выложить.

     

    Точнее выкладываю - иначе некрасиво как-то и непонятно тоже.

     

    src.tar

     

    Сам думаю что что-то с выделением памяти, но не знаю что и как конфигурировать(возможно надо чтото в /etc или ещё где менять). Может какие ключи при компиляции?

     

    Вот так выглядит отчёт:

     

    console.doc

     

    Заранее благодарен!

     

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

     

    Есть данный запрограммированный девайс. Все работает.

    Появилась необходимость смонтировать еще один.

    Со склада взял новый, естественно ни чего не умеет.

    При помощи ftp-клиента тупо скопировал каталоги с рабочего moxa на комп,

    а затем с компа скопировал в новый moxa. Ну и нечего не получилось.

    Веб страничка поменялась, а далее жалуется на ошибку сервера.

    Честно говоря с moxa дружу давно, но все преобразователями типа nport.

    А вот с этими железячками в первые.

    Можно ли как нибудь скопировать то что зашито в старом moxa, на новый?

     

    С уважением: Вячеслав

     

    Есть ряд настроек в /etc там и автозапуск чего-либо и сетевые настройки и параметры веб сервера. Да и не забудьте - может что ещё установить требуется. Ну и т.д.

     

×
×
  • Create New...