This is topic Пользовательские FBD в МикроМРВ in forum Языки программирования (IL/FBD) / Algorithm Programming Languages at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/11/t/000074.html

Posted by HELLA (Участник № / Member № 104) on :
 
Просьба сообщить тип компилятора и его настройки
(тип проекта и опции и- как понимать "сегмент стека не должен равняться сегменту данных (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}:

MODULE_ENTRY_POINT module_entry_point_table [] = {

{"FBD_DLL", FBD_DLL },

{"zFBD_DLL_info", zFBD_DLL_info },

{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 :
 
Добрый день!
Все заработало.
Большое спасибо!
 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2