diff options
author | Siddharth11235 | 2019-09-03 18:09:16 +0530 |
---|---|---|
committer | Siddharth11235 | 2019-09-03 18:09:16 +0530 |
commit | b4b6aa36e3486a3544acc52419149b5671f841e9 (patch) | |
tree | 66c1783158f23e6d21c77324156fc57e18d4ac67 /Modelica-Arduino-MDD_Arduino_Revised/MDD_build/pot | |
parent | f5266f634f4fb4fd39933a83551a01cf446256b8 (diff) | |
download | OpenModelica_HIL-b4b6aa36e3486a3544acc52419149b5671f841e9.tar.gz OpenModelica_HIL-b4b6aa36e3486a3544acc52419149b5671f841e9.tar.bz2 OpenModelica_HIL-b4b6aa36e3486a3544acc52419149b5671f841e9.zip |
Diffstat (limited to 'Modelica-Arduino-MDD_Arduino_Revised/MDD_build/pot')
5 files changed, 486 insertions, 0 deletions
diff --git a/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/pot/pot_threshold b/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/pot/pot_threshold Binary files differnew file mode 100755 index 0000000..3b86efe --- /dev/null +++ b/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/pot/pot_threshold diff --git a/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/pot/pot_threshold.hex b/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/pot/pot_threshold.hex new file mode 100755 index 0000000..2d477aa --- /dev/null +++ b/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/pot/pot_threshold.hex @@ -0,0 +1,150 @@ +:100000000C9434000C9451000C9451000C94510049
+:100010000C9451000C9451000C9451000C94E30189
+:100020000C9451000C9451000C9451000C94B201AA
+:100030000C9451000C9451000C9481010C945100CB
+:100040000C9451000C9451000C9451000C945100EC
+:100050000C9451000C9451000C9451000C945100DC
+:100060000C9451000C94510011241FBECFEFD8E026
+:10007000DEBFCDBF11E0A0E0B1E0ECEFF8E002C0E0
+:1000800005900D92A834B107D9F721E0A8E4B1E0BA
+:1000900001C01D92AD34B207E1F70E944A020C94F0
+:1000A0007C040C9400004F925F926F927F928F922B
+:1000B0009F92AF92BF92CF92DF92EF92FF920F93F7
+:1000C0001F93CF93DF93EC0180917C00857E82604B
+:1000D00080937C0080917A00806480937A00809184
+:1000E0007A0086FDFCCF609178007091790080E005
+:1000F00090E00E94580320E030E040E854E40E9481
+:10010000EB0320E030EC4FE754E40E94E6026B0181
+:100110007C016C837D838E839F8311E028A939A99C
+:100120004AA95BA90E94E60387FD10E0812F90E0B9
+:100130009FA38EA3111104C0812C912C540106C0E1
+:10014000812C912C90E8A92E9FE3B92E8C869D8658
+:10015000AE86BF8601E010E02CA93DA94EA95FA99B
+:10016000C501B4010E94E60387FF02C000E010E071
+:1001700019A308A311E02CA53DA54EA55FA5C701B5
+:10018000B6010E94E60387FD10E0812F90E09DA359
+:100190008CA3111104C0412C512C320106C0412CFA
+:1001A000512C80E8682E8FE3782E488659866A861F
+:1001B0007B8601E010E0A5019401C301B2010E9419
+:1001C000E603181614F000E010E01F8F0E8F11E008
+:1001D00028A539A54AA55BA5C701B6010E94E6037B
+:1001E00087FD10E0812F90E09BA38AA3111104C02A
+:1001F00060E070E0CB0104C060E070E080E89FE365
+:10020000688B798B8A8B9B8B01E010E0A3019201B4
+:100210000E94E603181614F000E010E01D8F0C8F0A
+:10022000FE01EA5BFF4F808191818230910561F090
+:100230008330910599F00197C9F416BC80916E0046
+:10024000826080936E0016C0109285001092840028
+:1002500080916F00826080936F000CC01092B2009A
+:100260008091700082608093700004C081E090E013
+:100270000E947C0478949FB7F89480914A019FBFB4
+:100280008823C9F310924A01EEADFFAD8C8D9D8D90
+:10029000892B19F08081826002C080818D7F8083EC
+:1002A000FE01E05CFF4F0190F081E02D8E8D9F8D6F
+:1002B000892B19F08081846002C080818B7F8083CC
+:1002C000FE01EE5BFF4F0190F081E02D88A199A126
+:1002D000892B19F08081886002C08081877F8083AC
+:1002E000DF91CF911F910F91FF90EF90DF90CF9012
+:1002F000BF90AF909F908F907F906F905F904F9046
+:1003000008951F920F920FB60F9211242F933F93CF
+:100310008F939F938091480190914901019690930A
+:1003200049018093480180914A01813091F02091E8
+:1003300048013091490180914B0190914C0128175F
+:10034000390738F081E080934A01109249011092F8
+:1003500048019F918F913F912F910F900FBE0F9069
+:100360001F9018951F920F920FB60F9211242F9382
+:100370003F938F939F9380914801909149010196FB
+:10038000909349018093480180914A01813091F016
+:10039000209148013091490180914B0190914C018D
+:1003A0002817390738F081E080934A0110924901FB
+:1003B000109248019F918F913F912F910F900FBE06
+:1003C0000F901F9018951F920F920FB60F92112445
+:1003D0002F933F938F939F93809148019091490170
+:1003E0000196909349018093480180914A018130A0
+:1003F00091F0209148013091490180914B019091F9
+:100400004C012817390738F081E080934A01109297
+:100410004901109248019F918F913F912F910F9028
+:100420000FBE0F901F901895ECE7F0E02081206C34
+:100430002083EAE7F0E0208127682083FC0115AEE5
+:1004400014AE239AEE5BFF4F25E230E03183208328
+:10045000229A329731832083219AFC0137AF26AF4D
+:1004600025B5236025BDEC5BFF4F41E050E0518393
+:10047000408322E030E030934C0120934B0124B5BF
+:10048000226024BD29EF27BD32965183408380E04E
+:1004900090E00895CF92DF92EF92FF9280E091E09A
+:1004A0000E941402C12CD12C760160E070E0CB01D7
+:1004B0006093000170930101809302019093030106
+:1004C00080E091E00E9453008FEFC81AD80AE80A32
+:1004D000F80AC701B6010E9458032FE632E143E053
+:1004E0005BE30E94EB0320E030E0A9010E947A0266
+:1004F000DFCF5058BB27AA270E9491020C94AC036F
+:100500000E949E0338F00E94A50320F039F49F3F1B
+:1005100019F426F40C949B030EF4E095E7FB0C947D
+:100520009503E92F0E94BD0358F3BA1762077307BA
+:100530008407950720F079F4A6F50C94DF030EF4F8
+:10054000E0950B2EBA2FA02D0B01B90190010C01E3
+:10055000CA01A0011124FF27591B99F0593F50F4FB
+:10056000503E68F11A16F040A22F232F342F442753
+:10057000585FF3CF469537952795A795F04053954B
+:10058000C9F77EF41F16BA0B620B730B840BBAF01B
+:100590009150A1F0FF0FBB1F661F771F881FC2F786
+:1005A0000EC0BA0F621F731F841F48F4879577959A
+:1005B0006795B795F7959E3F08F0B0CF9395880F54
+:1005C00008F09927EE0F9795879508950E94FA02F3
+:1005D0000C94AC030E94A50358F00E949E0340F0C7
+:1005E00029F45F3F29F00C94950351110C94E0031A
+:1005F0000C949B030E94BD0368F39923B1F3552328
+:1006000091F3951B550BBB27AA2762177307840725
+:1006100038F09F5F5F4F220F331F441FAA1FA9F3BB
+:1006200035D00E2E3AF0E0E832D091505040E695A9
+:10063000001CCAF72BD0FE2F29D0660F771F881F0A
+:10064000BB1F261737074807AB07B0E809F0BB0BFD
+:10065000802DBF01FF2793585F4F3AF09E3F510511
+:1006600078F00C9495030C94E0035F3FE4F3983E1C
+:10067000D4F3869577956795B795F7959F5FC9F7FA
+:10068000880F911D9695879597F90895E1E0660F7B
+:10069000771F881FBB1F621773078407BA0720F0F4
+:1006A000621B730B840BBA0BEE1F88F7E09508955D
+:1006B000E89409C097FB3EF49095809570956195FC
+:1006C0007F4F8F4F9F4F9923A9F0F92F96E9BB27B2
+:1006D0009395F695879577956795B795F111F8CF2E
+:1006E000FAF4BB0F11F460FF1BC06F5F7F4F8F4F99
+:1006F0009F4F16C0882311F096E911C0772321F08F
+:100700009EE8872F762F05C0662371F096E8862F26
+:1007100070E060E02AF09A95660F771F881FDAF77D
+:10072000880F9695879597F9089597F99F6780E8C0
+:1007300070E060E008959FEF80EC089500240A9433
+:100740001616170618060906089500240A941216AC
+:100750001306140605060895092E0394000C11F4DF
+:10076000882352F0BB0F40F4BF2B11F460FF04C08C
+:100770006F5F7F4F8F4F9F4F089557FD9058440FE5
+:10078000551F59F05F3F71F04795880F97FB991FF0
+:1007900061F09F3F79F087950895121613061406AD
+:1007A000551FF2CF4695F1DF08C01616170618063A
+:1007B000991FF1CF86957105610508940895E89415
+:1007C000BB2766277727CB0197F908950E94580425
+:1007D00008F48FEF08950E94FE030C94AC030E946E
+:1007E0009E0338F00E94A50320F0952311F00C948D
+:1007F00095030C949B0311240C94E0030E94BD0309
+:1008000070F3959FC1F3950F50E0551F629FF00163
+:10081000729FBB27F00DB11D639FAA27F00DB11D7C
+:10082000AA1F649F6627B00DA11D661F829F222705
+:10083000B00DA11D621F739FB00DA11D621F839F8C
+:10084000A00D611D221F749F3327A00D611D231F62
+:10085000849F600D211D822F762F6A2F11249F57B0
+:1008600050409AF0F1F088234AF0EE0FFF1FBB1FB3
+:10087000661F771F881F91505040A9F79E3F510572
+:1008800080F00C9495030C94E0035F3FE4F3983EF2
+:10089000D4F3869577956795B795F795E7959F5F1C
+:1008A000C1F7FE2B880F911D9695879597F90895AE
+:1008B000990F0008550FAA0BE0E8FEEF1616170671
+:1008C000E807F907C0F012161306E407F50798F0D9
+:1008D000621B730B840B950B39F40A2661F0232BF2
+:1008E000242B252B21F408950A2609F4A140A6956E
+:0C08F0008FEF811D811D0895F894FFCF4B
+:1008FC0000000000000000000000000000000000EC
+:10090C0000000000000000000000000000000000DB
+:10091C000000000000000000000000000000A043E8
+:10092C00000061440000003F6F12033B0000000018
+:08093C000000000000000000B3
+:00000001FF
diff --git a/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/pot/pot_threshold.sh b/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/pot/pot_threshold.sh new file mode 100755 index 0000000..cbebfb4 --- /dev/null +++ b/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/pot/pot_threshold.sh @@ -0,0 +1,61 @@ +#!/bin/bash +clear +if [ "$#" -ne 2 ]; then + echo "Usage: $0 port baudrate" >&2 + exit 1 +fi + +re='^[0-9]+$' +if ! [[ $1 =~ $re ]] ; then + echo "error: $1 -> Not a number" >&2; exit 1 +fi + +if ! [[ $2 =~ $re ]] ; then + echo "error: $2-> Not a number" >&2; exit 1 +fi + +b_rate=$2 + +present=`pwd` +unamestr=`uname` + +if [[ "$unamestr" == 'Linux' ]]; then + mdd_path=($(locate Modelica_DeviceDrivers/Modelica_DeviceDrivers/Resources/Include)) + om_path=($(locate /usr/include/omc/c)) + port="/dev/ttyACM$1" + omc --simCodeTarget=ExperimentalEmbeddedC runMDD_pot_threshold.mos + if [ $? -ne 0 ]; then + exit 1 + fi +else + cd c: + om_path=($(dir -d OpenModelica*/include/omc/c/)) + path_to_om="C:$om_path" + cd f: + mdd_path=($(dir -d */Modelica_DeviceDrivers/Modelica_DeviceDrivers/Resources/Include/)) + if [ $? -eq 0 ]; then + path_to_mdd="F:/$mdd_path" + else + exit 1 + fi + + port="COM$1" + cd $present + omc --simCodeTarget=ExperimentalEmbeddedC run_pot_threshold.mos + if [ $? -ne 0 ]; then + exit 1 + fi +fi + +avr-gcc -Os -std=c11 -ffunction-sections -fdata-sections -mmcu=atmega328p -DF_CPU=16000000UL -Wl,--gc-sections pot_threshold_main.c -o pot_threshold -I${mdd_path[0]} -I${path_to_om} -I${path_to_mdd} -I${om_path[0]} +if [ $? -ne 0 ]; then + exit 1 +fi +avr-objcopy -O ihex -R .eeprom pot_threshold pot_threshold.hex +if [ $? -ne 0 ]; then + exit 1 +fi +avrdude -F -V -c arduino -p ATMEGA328P -P $port -b $b_rate -U flash:w:pot_threshold.hex +if [ $? -ne 0 ]; then + exit 1 +fi
\ No newline at end of file diff --git a/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/pot/pot_threshold_main.c b/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/pot/pot_threshold_main.c new file mode 100755 index 0000000..537dcbd --- /dev/null +++ b/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/pot/pot_threshold_main.c @@ -0,0 +1,264 @@ +#define fmi2TypesPlatform_h + +#define fmi2TypesPlatform "default" /* Compatible */ + +typedef struct pot_threshold_fmi2Component_s* fmi2Component; +typedef void* fmi2ComponentEnvironment; /* Pointer to FMU environment */ +typedef void* fmi2FMUstate; /* Pointer to internal FMU state */ +typedef unsigned int fmi2ValueReference; +typedef double fmi2Real; +typedef int fmi2Integer; +typedef int fmi2Boolean; +typedef char fmi2Char; +typedef const fmi2Char* fmi2String; +typedef char fmi2Byte; + +#define fmi2True 1 +#define fmi2False 0 + +#include "fmi2/fmi2Functions.h" + +#include <stdint.h> +#include <stdio.h> + +void ModelicaFormatMessage(const char *fmt, ...) +{ + va_list args; + va_start(args, fmt); + vprintf(fmt, args); + va_end(args); +} + +typedef struct pot_threshold_fmi2Component_s { + fmi2Real currentTime; + fmi2Real fmi2RealVars[6]; + fmi2Boolean fmi2BooleanVars[6]; + fmi2Real fmi2RealParameter[5]; + void* extObjs[6]; +} pot_threshold_fmi2Component; + +pot_threshold_fmi2Component pot_threshold_component = { + .fmi2RealVars = { + 0.0 /*adc._y*/, + 0.0 /*greater1._u1*/, + 0.0 /*greater1._u2*/, + 0.0 /*greater2._u1*/, + 0.0 /*realExpression1._y*/, + 0.0 /*realExpression2._y*/, + }, + .fmi2BooleanVars = { + fmi2False /*digitalWriteBoolean1._u*/, + fmi2False /*digitalWriteBoolean2._u*/, + fmi2False /*digitalWriteBoolean3._u*/, + fmi2False /*greaterEqualThreshold1._y*/, + fmi2False /*greaterEqualThreshold2._y*/, + fmi2False /*greaterEqualThreshold3._y*/, + }, + .fmi2RealParameter = { + 0.0 /*greaterEqualThreshold1._threshold*/, + 320.0 /*greaterEqualThreshold2._threshold*/, + 900.0 /*greaterEqualThreshold3._threshold*/, + 0.5 /*realToBoolean1._threshold*/, + 0.002 /*synchronizeRealtime1._actualInterval*/, + }, +}; + +#include <math.h> +/* TODO: Generate used builtin functions before SimCode */ +static inline double om_mod(double x, double y) +{ + return x-floor(x/y)*y; +} + +static const char * const OMCLIT0 = "ElectricPotential"; +static const char * const OMCLIT1 = "V"; +#include "MDDAVRTimer.h" +#include "MDDAVRRealTime.h" +#include "MDDAVRDigital.h" +#include "MDDAVRAnalog.h" + +static inline fmi2Real Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Analog_read__voltage(fmi2Component comp, fmi2Integer om_analogPort, fmi2Real om_vref, fmi2Integer om_voltageResolution); +static inline void* Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Analog_Init_constructor(fmi2Component comp, fmi2Integer om_divisionFactor, fmi2Integer om_referenceVoltage); +static inline void Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Analog_Init_destructor(fmi2Component comp, void* om_avr); +static inline void Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Digital_write(fmi2Component comp, void* om_port, fmi2Integer om_pin, fmi2Boolean om_value); +static inline void* Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Digital_InitWrite_constructor(fmi2Component comp, fmi2Integer om_port, fmi2Integer om_pin); +static inline void Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Digital_InitWrite_destructor(fmi2Component comp, void* om_digital); +static inline void Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_RealTimeSynchronization_wait(fmi2Component comp, void* om_rt); +static inline void* Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_RealTimeSynchronization_Init_constructor(fmi2Component comp, void* om_timer, fmi2Integer om_timerValue, fmi2Integer om_numTimerInterruptsPerCycle); +static inline void Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_RealTimeSynchronization_Init_destructor(fmi2Component comp, void* om_rt); +static inline void* Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Timers_Timer_constructor(fmi2Component comp, fmi2Integer om_timerSelect, fmi2Integer om_clockSelect, fmi2Boolean om_clearTimerOnMatch); +static inline void Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Timers_Timer_destructor(fmi2Component comp, void* om_timer); + +static inline fmi2Real Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Analog_read__voltage(fmi2Component comp, fmi2Integer om_analogPort, fmi2Real om_vref, fmi2Integer om_voltageResolution) +{ + fmi2Real om_value; + om_value = MDD_avr_analog_read(om_analogPort, om_vref, om_voltageResolution); + return om_value; +} +static inline void* Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Analog_Init_constructor(fmi2Component comp, fmi2Integer om_divisionFactor, fmi2Integer om_referenceVoltage) +{ + void* om_avr; + om_avr = MDD_avr_analog_init(om_divisionFactor, om_referenceVoltage); + return om_avr; +} +static inline void Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Analog_Init_destructor(fmi2Component comp, void* om_avr) +{ + MDD_avr_analog_close(om_avr); +} +static inline void Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Digital_write(fmi2Component comp, void* om_port, fmi2Integer om_pin, fmi2Boolean om_value) +{ + MDD_avr_digital_pin_write(om_port, om_pin, om_value); +} +static inline void* Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Digital_InitWrite_constructor(fmi2Component comp, fmi2Integer om_port, fmi2Integer om_pin) +{ + void* om_dig; + om_dig = MDD_avr_digital_pin_init(om_port, om_pin, fmi2True); + return om_dig; +} +static inline void Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Digital_InitWrite_destructor(fmi2Component comp, void* om_digital) +{ + MDD_avr_digital_pin_close(om_digital); +} +static inline void Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_RealTimeSynchronization_wait(fmi2Component comp, void* om_rt) +{ + MDD_avr_rt_wait(om_rt); +} +static inline void* Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_RealTimeSynchronization_Init_constructor(fmi2Component comp, void* om_timer, fmi2Integer om_timerValue, fmi2Integer om_numTimerInterruptsPerCycle) +{ + void* om_rt; + om_rt = MDD_avr_rt_init(om_timer, om_timerValue, om_numTimerInterruptsPerCycle); + return om_rt; +} +static inline void Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_RealTimeSynchronization_Init_destructor(fmi2Component comp, void* om_rt) +{ + MDD_avr_rt_close(om_rt); +} +static inline void* Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Timers_Timer_constructor(fmi2Component comp, fmi2Integer om_timerSelect, fmi2Integer om_clockSelect, fmi2Boolean om_clearTimerOnMatch) +{ + void* om_timer; + om_timer = MDD_avr_timer_init(om_timerSelect, om_clockSelect, om_clearTimerOnMatch); + return om_timer; +} +static inline void Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Timers_Timer_destructor(fmi2Component comp, void* om_timer) +{ + MDD_avr_timer_close(om_timer); +} + +fmi2Component pot_threshold_fmi2Instantiate(fmi2String name, fmi2Type ty, fmi2String GUID, fmi2String resources, const fmi2CallbackFunctions* functions, fmi2Boolean visible, fmi2Boolean loggingOn) +{ + static int initDone=0; + if (initDone) { + return NULL; + } + return &pot_threshold_component; +} + +fmi2Status pot_threshold_fmi2SetupExperiment(fmi2Component comp, fmi2Boolean toleranceDefined, fmi2Real tolerance, fmi2Real startTime, fmi2Boolean stopTimeDefined, fmi2Real stopTime) +{ + return fmi2OK; +} + +fmi2Status pot_threshold_fmi2EnterInitializationMode(fmi2Component comp) +{ + comp->extObjs[0] /* adc._analog EXTOBJ: Modelica_DeviceDrivers.EmbeddedTargets.AVR.Functions.Analog.Init */ = Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Analog_Init_constructor(comp, 7, 4); + comp->extObjs[3] /* digitalWriteBoolean3._digital EXTOBJ: Modelica_DeviceDrivers.EmbeddedTargets.AVR.Functions.Digital.InitWrite */ = Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Digital_InitWrite_constructor(comp, 2, 4); + comp->extObjs[2] /* digitalWriteBoolean2._digital EXTOBJ: Modelica_DeviceDrivers.EmbeddedTargets.AVR.Functions.Digital.InitWrite */ = Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Digital_InitWrite_constructor(comp, 2, 3); + comp->extObjs[1] /* digitalWriteBoolean1._digital EXTOBJ: Modelica_DeviceDrivers.EmbeddedTargets.AVR.Functions.Digital.InitWrite */ = Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Digital_InitWrite_constructor(comp, 2, 2); + comp->extObjs[4] /* synchronizeRealtime1._clock EXTOBJ: Modelica_DeviceDrivers.EmbeddedTargets.AVR.Functions.Timers.Timer */ = Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Timers_Timer_constructor(comp, 1, 4, fmi2False); + comp->extObjs[5] /* synchronizeRealtime1._sync EXTOBJ: Modelica_DeviceDrivers.EmbeddedTargets.AVR.Functions.RealTimeSynchronization.Init */ = Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_RealTimeSynchronization_Init_constructor(comp, comp->extObjs[4] /* synchronizeRealtime1._clock EXTOBJ: Modelica_DeviceDrivers.EmbeddedTargets.AVR.Functions.Timers.Timer */, 249, 2); + return fmi2OK; +} + +fmi2Status pot_threshold_fmi2ExitInitializationMode(fmi2Component comp) +{ + return fmi2OK; +} + +static fmi2Status pot_threshold_functionODE(fmi2Component comp) +{ +} + +static fmi2Status pot_threshold_functionOutputs(fmi2Component comp) +{ + comp->fmi2RealVars[0] /* adc._y variable */ = Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Analog_read__voltage(comp, 3, 1024.0, 10); /* equation 14 */ + comp->fmi2BooleanVars[5] /* greaterEqualThreshold3._y DISCRETE */ = (comp->fmi2RealVars[0] /* adc._y variable */)>=(comp->fmi2RealParameter[2] /* greaterEqualThreshold3._threshold PARAM */); /* equation 15 */ + comp->fmi2RealVars[2] /* greater1._u2 variable */ = (comp->fmi2BooleanVars[5] /* greaterEqualThreshold3._y DISCRETE */) ? (1.0) : (0.0); /* equation 16 */ + comp->fmi2BooleanVars[2] /* digitalWriteBoolean3._u DISCRETE */ = (comp->fmi2RealVars[2] /* greater1._u2 variable */)>=(comp->fmi2RealParameter[3] /* realToBoolean1._threshold PARAM */); /* equation 17 */ + comp->fmi2BooleanVars[4] /* greaterEqualThreshold2._y DISCRETE */ = (comp->fmi2RealVars[0] /* adc._y variable */)>=(comp->fmi2RealParameter[1] /* greaterEqualThreshold2._threshold PARAM */); /* equation 18 */ + comp->fmi2RealVars[1] /* greater1._u1 variable */ = (comp->fmi2BooleanVars[4] /* greaterEqualThreshold2._y DISCRETE */) ? (1.0) : (0.0); /* equation 19 */ + comp->fmi2BooleanVars[1] /* digitalWriteBoolean2._u DISCRETE */ = (comp->fmi2RealVars[1] /* greater1._u1 variable */)>(comp->fmi2RealVars[2] /* greater1._u2 variable */); /* equation 20 */ + comp->fmi2BooleanVars[3] /* greaterEqualThreshold1._y DISCRETE */ = (comp->fmi2RealVars[0] /* adc._y variable */)>=(comp->fmi2RealParameter[0] /* greaterEqualThreshold1._threshold PARAM */); /* equation 21 */ + comp->fmi2RealVars[3] /* greater2._u1 variable */ = (comp->fmi2BooleanVars[3] /* greaterEqualThreshold1._y DISCRETE */) ? (1.0) : (0.0); /* equation 22 */ + comp->fmi2BooleanVars[0] /* digitalWriteBoolean1._u DISCRETE */ = (comp->fmi2RealVars[3] /* greater2._u1 variable */)>(comp->fmi2RealVars[1] /* greater1._u1 variable */); /* equation 23 */Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_RealTimeSynchronization_wait(comp, comp->extObjs[5] /* synchronizeRealtime1._sync EXTOBJ: Modelica_DeviceDrivers.EmbeddedTargets.AVR.Functions.RealTimeSynchronization.Init */);Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Digital_write(comp, comp->extObjs[1] /* digitalWriteBoolean1._digital EXTOBJ: Modelica_DeviceDrivers.EmbeddedTargets.AVR.Functions.Digital.InitWrite */, 2, comp->fmi2BooleanVars[0] /* digitalWriteBoolean1._u DISCRETE */);Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Digital_write(comp, comp->extObjs[2] /* digitalWriteBoolean2._digital EXTOBJ: Modelica_DeviceDrivers.EmbeddedTargets.AVR.Functions.Digital.InitWrite */, 3, comp->fmi2BooleanVars[1] /* digitalWriteBoolean2._u DISCRETE */);Modelica__DeviceDrivers_EmbeddedTargets_AVR_Functions_Digital_write(comp, comp->extObjs[3] /* digitalWriteBoolean3._digital EXTOBJ: Modelica_DeviceDrivers.EmbeddedTargets.AVR.Functions.Digital.InitWrite */, 4, comp->fmi2BooleanVars[2] /* digitalWriteBoolean3._u DISCRETE */); +} + +fmi2Status pot_threshold_fmi2DoStep(fmi2Component comp, fmi2Real currentCommunicationPoint, fmi2Real communicationStepSize, fmi2Boolean noSetFMUStatePriorToCurrentPoint) +{ + comp->currentTime = currentCommunicationPoint; + /* TODO: Calculate time/state-dependent variables here... */ + pot_threshold_functionOutputs(comp); + return fmi2OK; +} + +int main(int argc, char **argv) +{ + int terminateSimulation = 0; + fmi2Status status = fmi2OK; + fmi2CallbackFunctions cbf = { + .logger = NULL, + .allocateMemory = NULL /*calloc*/, + .freeMemory = NULL /*free*/, + .stepFinished = NULL, //synchronous execution + .componentEnvironment = NULL + }; + + fmi2Component comp = pot_threshold_fmi2Instantiate("", fmi2CoSimulation, "", "", &cbf, fmi2False, fmi2False); + if (comp==NULL) { + return 1; + } + pot_threshold_fmi2SetupExperiment(comp, fmi2False, 0.0, 0.0, fmi2False, 1.0); + pot_threshold_fmi2EnterInitializationMode(comp); + // Set start-values? Nah... + pot_threshold_fmi2ExitInitializationMode(comp); + + double currentTime = 0.0; + double h = 0.002; + uint32_t i = 0; + + while (status == fmi2OK) { + //retrieve outputs + // fmi2GetReal(m, ..., 1, &y1); + //set inputs + // fmi2SetReal(m, ..., 1, &y2); + + //call slave and check status + status = pot_threshold_fmi2DoStep(comp, currentTime, h, fmi2True); + switch (status) { + case fmi2Discard: + case fmi2Error: + case fmi2Fatal: + case fmi2Pending /* Cannot happen */: + terminateSimulation = 1; + break; + case fmi2OK: + case fmi2Warning: + break; + } + if (terminateSimulation) { + break; + } + i++; + /* increment master time */ + currentTime = 0.0 + h*i; + } + +#if 0 + if ((status != fmi2Error) && (status != fmi2Fatal)) { + fmi2Terminate(m); + } + if (status != fmi2Fatal) { + fmi2FreeInstance(m); + } +#endif +} + diff --git a/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/pot/runMDD_pot_threshold.mos b/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/pot/runMDD_pot_threshold.mos new file mode 100755 index 0000000..457b89c --- /dev/null +++ b/Modelica-Arduino-MDD_Arduino_Revised/MDD_build/pot/runMDD_pot_threshold.mos @@ -0,0 +1,11 @@ +loadModel(Modelica); +getErrorString(); + +loadFile("/home/souradip/Modelica_DeviceDrivers/Modelica_DeviceDrivers/package.mo"); +getErrorString(); + +loadFile("/home/souradip/OpenModelica/Arduino.mo"); +getErrorString(); + +translateModel(Arduino.SerialCommunication.MDD_Examples.MDD_pot.MDD_pot_threshold, fileNamePrefix="pot_threshold"); +getErrorString(); |