This is topic Пользовательские FBD в МикроМРВ in forum Языки программирования (IL/FBD) / Algorithm Programming Languages at Форум TRACE MODE: техническая поддержка.
Просьба сообщить тип компилятора и его настройки (тип проекта и опции и- как понимать "сегмент стека не должен равняться сегменту данных (SS<>DS); ") для создания пользовательских FBD в МикроМРВ. Заранее благодарны.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Рекомендуемый компилятор: MSVC 1.52 или Borland под MS-DOS. Тип проекта - "MS-DOS Application". Насчет стека - у компилятора есть такая опция: "SS!=DS, DS NOT loaded on function entry". Модель памяти "Large". И обязательно поддержка in-line сопроцессора (не эмуляция!).
Posted by HELLA (Участник № / Member № 104) on :
Компилятор BORLAND C++ v.5.02 да и другие выдают много ошибок по строке {NULL,NULL}:
}; nfo :Compiling E:\documents\text_on_cpp\testapp.cpp Error: testapp.cpp(55,7):Undefined symbol 'NULL' Error: testapp.cpp(55,14):Multiple declaration for 'NULL' Error: testapp.cpp(55,14):Size of 'NULL' is unknown or zero Error: testapp.cpp(55,14):Declaration syntax error Error: testapp.cpp(55,14):Unexpected } Error: testapp.cpp(57,2):Unexpected } Error: testapp.cpp(69,15):Declaration terminated incorrectly Error: testapp.cpp(75,7):Undefined symbol 'i' Error: testapp.cpp(75,14):Expression syntax Error: testapp.cpp(77,6):Expression syntax Error: testapp.cpp(85,14):Undefined symbol '_off' Error: testapp.cpp(95,35):Expression syntax Error: testapp.cpp(101,14):Expression syntax Error: testapp.cpp(103,5):Expression syntax Error: testapp.cpp(125,6):Undefined symbol '_seg' Warn : testapp.cpp(135,6):Unknown assembler instruction Warn : testapp.cpp(141,2):Parameter 'argv' is never used Warn : testapp.cpp(153,2):Parameter 'l' is never used Warn : testapp.cpp(153,2):Parameter 'rl' is never used Error: testapp.cpp(167,8):Call to undefined function 'strcpy' Компилятор возможно не тот...
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Прошу прощения, перепутал разработку драйвера RWH для МикроМРВ с DLD-блоком. В принципе - требования те же, но вот возникает сомнения, что 5-я версия Borland-компилятора подойдет. Дело в том, что специфика написания FBD-блока для МикроМРВ, довольно сильно ориентирована на MSVC (версии 1.5 - не выше), и если RWH еще можно было бы написать в Borland'е, то FBD-блок как DLD - врядли.
Posted by HELLA (Участник № / Member № 104) on :
Добрый день! Как задать параметр LFBD=I – загрузка необходимого файла *.dld до загрузки базы каналов. Параметр I – это число в шестнадцатеричном формате, каждый бит которого указывает имя загружаемого dld-файла. У нас три скомпилированных файла fbd0-fbd2.dld. Профайлер ругается FBD_DLL not found fbd1.dll Система ругается This program requires Microsoft Windows. Между тем все fbd.dll наличествуют в директории проекта;даже после удаления всех fbd-программ проект не запускается.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Вы эти dld получили путем переименования dll? В MS-DOS dll работать естественно не будут! DLD должны создаваться специально как MS-DOS приложение, а не Win32 DLL.
Posted by HELLA (Участник № / Member № 104) on :
Добрый день! Все dld получили путем переименования *.exe.Немного подумав,мы получили работающую FBD использовав листинг примера. Тут все дело в опциях компилятора С++ 1.52:Code generation-CPU. Если задать его -8086/8088 ,то работает. Но при попытке установить -80386 и попытке использовать переменные типа double выдается сообщение: This program requires Microsoft. Весь вопрос в том,как заставить FBD программу вычислять полином аппроксимации кривой термопары используя коэффициенты типа К0=-9.4111517845е-4 и т.д.,иными словами ,обеспечить необходимую точность вычислений,имея контроллер на процессоре 486DX4(M7). Windows.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Попробуйте поставить в настройках компилятора 80286 и использование "in-line инструкций сопроцессора", а не его эмуляцию.
Не понял насчет приписки "Windows" в конце Вашей фразы - это к чему?
Posted by HELLA (Участник № / Member № 104) on :
1.Приписка WINDOWS случайна. 2.Проект примера работает при опциях компилятора С++ 1.52:Code generation-CPU. 8086/8088 ,80186/188, и -286. Суммирование по двум входам rf[0]=f[0]+f[1] работает. Не проходит конструкция
float const K0=1.1234567890; rf[0]=K0*f[0]+f[1] Выдается результат 2.0000,равный значению второго входа f[1],привязанного к константе =2 Та же конструкция в отладчике работы *.dll работает.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Код проекта программы можете прислать?
Posted by HELLA (Участник № / Member № 104) on :
Выслал на hotline1@adastra.ru В данном варианте при нуле на 1 входе FBD0.dld и двойке на втором входе - на выходе 3.88612е-019. При изменении первого входа есть изменения но не соответствуют реалиям.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Это происходит потому что при использовании опции "SS!=DS, DS NOT loaded on function entry" стэк памяти констант программы не грузит адрес сегмента и получается, что все переменные, объявленные или инициированные как константы "теряют" свою адресацию. Реультат - из памяти берется значение не по тому адресу. Используйте другую опцию компилятора: "SS!=DS, DS loaded on function entry" - должно заработать нормально.
Posted by HELLA (Участник № / Member № 104) on :