From f26088b1ebe106279501afbfb029f37f7425f99c Mon Sep 17 00:00:00 2001 From: Jonny007-MKD Date: Wed, 28 May 2014 09:20:38 +0000 Subject: [PATCH] Copied Modbus-CAPL and added VisualStudio project VCSignalProtocolDLL --- Modbus-DLL/MakeConfig.cfg | 4832 +++++++++++ Modbus-DLL/ModbusNet.cfg | 7343 +++++++++++++++++ Modbus-DLL/include/CAPL/MakeConfig.can | 529 ++ Modbus-DLL/include/CAPL/MakeConfig.cbf | Bin 0 -> 206780 bytes Modbus-DLL/include/CAPL/ModbusClient.can | 246 + Modbus-DLL/include/CAPL/ModbusClient.cbf | Bin 0 -> 182994 bytes Modbus-DLL/include/CAPL/ModbusClientUDP.cbf | Bin 0 -> 164127 bytes Modbus-DLL/include/CAPL/include/Common.cin | 263 + Modbus-DLL/include/CAPL/include/EilCommon.cin | 167 + .../CAPL/include/ModbusClientCommon.cin | 786 ++ .../CAPL/include/ModbusClientCommon.cin_0.brp | 4 + .../CAPL/include/ModbusEilClientCommon.cin | 64 + .../include/CAPL/include/ModbusFunctions.cin | 86 + .../include/CAPL/include/ModbusStructs.cin | 146 + .../CAPL/include/ModbusTcpClientCommon.cin | 44 + .../CAPL/include/ModbusUdpClientCommon.cin | 44 + Modbus-DLL/include/CAPL/include/TcpCommon.cin | 204 + .../include/CAPL/include/TcpUdpCommon.cin | 20 + Modbus-DLL/include/CAPL/include/UdpCommon.cin | 166 + Modbus-DLL/include/DBC/MakeConfig.dbc | 49 + Modbus-DLL/include/DBC/MakeConfig.ini | 165 + Modbus-DLL/include/DBC/generated.dbc | 47 + Modbus-DLL/include/DBC/generated.ini | 165 + Modbus-DLL/include/SysVars/generated.vsysvar | 44 + .../Include/IPBPacketAPI.h | 1118 +++ .../include/VCSignalProtocolDLL/Stdafx.cpp | 9 + .../include/VCSignalProtocolDLL/Stdafx.h | 21 + .../VCSignalProtocolDLL/VCSignalProtocol.cpp | 481 ++ .../VCSignalProtocolDLL/VCSignalProtocol.h | 76 + .../VCSignalProtocolAddOn.cpp | 86 + .../VCSignalProtocolAddOn.h | 52 + .../VCSignalProtocolDLL.cpp | 69 + .../VCSignalProtocolDLL.def | 7 + .../VCSignalProtocolDLL/VCSignalProtocolDLL.h | 10 + .../VCSignalProtocolDLL.sln | 20 + .../VCSignalProtocolDLL.vcproj | 261 + 36 files changed, 17624 insertions(+) create mode 100644 Modbus-DLL/MakeConfig.cfg create mode 100644 Modbus-DLL/ModbusNet.cfg create mode 100644 Modbus-DLL/include/CAPL/MakeConfig.can create mode 100644 Modbus-DLL/include/CAPL/MakeConfig.cbf create mode 100644 Modbus-DLL/include/CAPL/ModbusClient.can create mode 100644 Modbus-DLL/include/CAPL/ModbusClient.cbf create mode 100644 Modbus-DLL/include/CAPL/ModbusClientUDP.cbf create mode 100644 Modbus-DLL/include/CAPL/include/Common.cin create mode 100644 Modbus-DLL/include/CAPL/include/EilCommon.cin create mode 100644 Modbus-DLL/include/CAPL/include/ModbusClientCommon.cin create mode 100644 Modbus-DLL/include/CAPL/include/ModbusClientCommon.cin_0.brp create mode 100644 Modbus-DLL/include/CAPL/include/ModbusEilClientCommon.cin create mode 100644 Modbus-DLL/include/CAPL/include/ModbusFunctions.cin create mode 100644 Modbus-DLL/include/CAPL/include/ModbusStructs.cin create mode 100644 Modbus-DLL/include/CAPL/include/ModbusTcpClientCommon.cin create mode 100644 Modbus-DLL/include/CAPL/include/ModbusUdpClientCommon.cin create mode 100644 Modbus-DLL/include/CAPL/include/TcpCommon.cin create mode 100644 Modbus-DLL/include/CAPL/include/TcpUdpCommon.cin create mode 100644 Modbus-DLL/include/CAPL/include/UdpCommon.cin create mode 100644 Modbus-DLL/include/DBC/MakeConfig.dbc create mode 100644 Modbus-DLL/include/DBC/MakeConfig.ini create mode 100644 Modbus-DLL/include/DBC/generated.dbc create mode 100644 Modbus-DLL/include/DBC/generated.ini create mode 100644 Modbus-DLL/include/SysVars/generated.vsysvar create mode 100644 Modbus-DLL/include/VCSignalProtocolDLL/Include/IPBPacketAPI.h create mode 100644 Modbus-DLL/include/VCSignalProtocolDLL/Stdafx.cpp create mode 100644 Modbus-DLL/include/VCSignalProtocolDLL/Stdafx.h create mode 100644 Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocol.cpp create mode 100644 Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocol.h create mode 100644 Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocolAddOn.cpp create mode 100644 Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocolAddOn.h create mode 100644 Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocolDLL.cpp create mode 100644 Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocolDLL.def create mode 100644 Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocolDLL.h create mode 100644 Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocolDLL.sln create mode 100644 Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocolDLL.vcproj diff --git a/Modbus-DLL/MakeConfig.cfg b/Modbus-DLL/MakeConfig.cfg new file mode 100644 index 0000000..26df13e --- /dev/null +++ b/Modbus-DLL/MakeConfig.cfg @@ -0,0 +1,4832 @@ +;CANoe Version |4|7|1|35748 MakeConfig +Version: 8.2.40 Build 40 +32 PRO +5 +APPDIR Vector.CANoe.SignalGenerators.DLL +Vector.CANoe.SignalGenerators, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANoe.SignalGenerators.ComponentWrapper +1 +1.0.1 +VGlobalConfiguration 1 Begin_Of_Object +17 +VGlobalParameters 2 Begin_Of_Object +20 +0 +3,100,200,500 +1000000 1.000000 1 1000 1 1 0 0 1 1 1 0 0 0 1 0 0 0 +1 +0 +0 1 +ResetSignalsOnMeasurementStart=1 +VDatabaseContainerStreamer 3 Begin_Of_Object +5 +1 + 1 "include\DBC\MakeConfig.dbc" +MakeConfig + +1 11 +0 +1 +0 +1 + +End_Of_Object VDatabaseContainerStreamer 3 +0 +0 +1 + 1 "MakeConfig.cfg" +0 +0 +0 +1 +VPersistentEnvarSelectionData 3 Begin_Of_Object +1 +1 1 0 0 +~ +~ +End_Of_Object VPersistentEnvarSelectionData 3 +VPersistentExtensionData 3 Begin_Of_Object +3 +VPersistentRelation 4 Begin_Of_Object +1 +HookDLLActivations +1 +1 +End_Of_Object VPersistentRelation 4 +End_Of_Object VPersistentExtensionData 3 +VPersistentTreeStateInfo 3 Begin_Of_Object +1 +Version +5 +DialogBegin +1 +498 1105 1028 1610 +SymbolExplorerDialogBegin + +1 +HistoryBegin +1 0 +HistoryEnd +FiltersBegin +Begin +3 4 0 +4 +Bus statistic signals + ( 1 ( 1 ( 0 ) 0 ) 0 ) +TE0001 + ( 2 ( 2 ( 0 ) 0 ) 0 ) +TE0002 + ( 2 ( 2 ( 0 ) 0 ) 0 ) +Busstatistik Signale + ( 1 ( 1 ( 0 ) 0 ) 0 ) +SymbSelHeaderMgrBegin +1 6 +0 1 278 0 0 +1 1 100 0 0 +2 1 100 0 0 +3 1 75 1 1 +5 1 200 0 0 +6 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 0 +-1 +SymbSelHeaderMgrBegin +1 4 +0 1 200 0 0 +10 1 100 0 0 +11 1 100 0 0 +6 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 0 +1 +TE0001 + ( 1 ( 0 ) 0 ) +SymbSelHeaderMgrBegin +1 4 +0 1 200 0 0 +1 1 100 0 0 +3 1 75 1 1 +6 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 0 +-1 +SymbSelHeaderMgrBegin +1 2 +0 1 200 0 0 +6 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 0 +-1 +SymbSelHeaderMgrBegin +1 1 +0 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 0 +-1 +SymbSelHeaderMgrBegin +1 1 +0 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 0 +-1 +SymbSelHeaderMgrBegin +1 2 +0 1 200 0 0 +6 1 100 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 0 +-1 +SymbSelHeaderMgrBegin +1 3 +0 1 200 0 0 +7 1 100 0 0 +6 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 0 +-1 +SymbSelHeaderMgrBegin +1 4 +0 1 200 0 0 +1 1 100 0 0 +3 1 75 1 1 +6 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 0 +-1 +SymbSelHeaderMgrBegin +1 4 +0 1 200 0 0 +1 1 100 0 0 +3 1 75 1 1 +6 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 0 +-1 +SymbSelHeaderMgrBegin +1 2 +0 1 200 0 0 +6 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 0 +-1 +SymbSelHeaderMgrBegin +1 2 +0 1 200 0 0 +6 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 0 +-1 +SymbSelHeaderMgrBegin +1 4 +0 1 200 0 0 +10 1 75 0 0 +11 1 100 0 0 +6 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 0 +-1 +SymbSelHeaderMgrBegin +1 6 +0 1 200 0 0 +1 1 100 0 0 +2 1 100 0 0 +3 1 75 1 1 +5 1 80 0 0 +6 1 200 0 0 +SymbSelHeaderMgrEnd +End + +FiltersEnd +1 0 +SymbolExplorerDialogEnd + +DialogEnd +End_Of_Object VPersistentTreeStateInfo 3 +VPrintSettings 3 Begin_Of_Object +1 +0 0 0 0 0 +0 0 0 0 0 0 0 0 0 1 + 1 "" +@@@@ +Ausdruck Seite: {PAGE} {DATE} {TIME} +Lizenznehmer: {LICENSENAME} +Seriennummer: {LICENSENO} +@@@@ +0 + +End_Of_Object VPrintSettings 3 + 1 "C:\Users\Public\Documents\Vector\CANwin\Public\Documents\Vector\CANwin 8.0.918\templates\portlink1.pre" +1 +VPortlinkConfigurationStreamer 3 Begin_Of_Object +1 +1 +0 +0 +0 +END_OF_DRIVER +END_OF_PORT_CONFIGURATION_STREAM +End_Of_Object VPortlinkConfigurationStreamer 3 +0 +1 +VWTP20ObsParameters-1:0:0: +FlexRayTP2ObsParameters: 2 0x3 36 VFrTPParams 2 0 1 0 1 1 0 0 8 255 0 : +FlexRayTP2ObsParametersEnd +VDoIPObserverParams 3 Begin_Of_Object +1 +1 +End_Of_Object VDoIPObserverParams 3 +VISOTPParameters-1:active:onlyknown:interleave:firststmin:stmin:seqnr:unexpected:sender:extended:baseaddr=1024:rxmask=255:storedata:maxlen=65536 +EOO +DiagnosticsSettingsV1.1 +EOO +DiagnosticsSettingsV2.0 +EOO +0 +0 + V2 275 + 6 + V2 20 1 -1 36 + V2 1 1 -1 47 + V2 0 1 -1 40 + V2 2 1 -1 47 + V2 4 1 -1 33 + V2 5 3 0 24 1 24 2 24 + 3 +6 0 7 + V2 9 1 -1 33 + V2 7 1 -1 47 + V2 15 1 -1 35 + V2 27 2 0 24 1 24 + V2 12 1 -1 37 + V2 13 1 -1 37 + V2 14 1 -1 40 +7 0 2 + V2 23 1 -1 47 + V2 29 1 -1 47 +9 0 1 + V2 41 1 -1 47 +EndOf +VGlobalActionsStreamer 3 Begin_Of_Object +2 +2 +0 +End_Of_Object VGlobalActionsStreamer 3 +VEventSortingConfigStreamer 3 Begin_Of_Object +1 +0 +0 +0 +0 +0 +1 +0 +End_Of_Object VEventSortingConfigStreamer 3 +FlexRayOptionParameters: 1 1 1 0 1 1 : +FlexRayOptionParametersEnd +VCaplOptionsStreamer 3 Begin_Of_Object +1 +16 +1448 +0 +2001 +1 +2002 +0 +2005 +0 +2008 +1 +2013 +1 +2020 +1 +2032 +1 +2039 +0 +2040 +1 +2041 +1 +2054 +0 +2055 +1 +2065 +0 +2135 +1 +2201 +0 +1 +End_Of_Object VCaplOptionsStreamer 3 +VSVConfigurationStreamer 3 Begin_Of_Object +1 +829 + + + + + + + + + + + + +2 +0 + +End_Of_Object VSVConfigurationStreamer 3 +VOfflineBusStatisticSettings 3 Begin_Of_Object +1 +1 +1 +0 1 +1 0 +0 2 +1 0 +0 3 +1 0 +0 4 +1 0 +0 5 +1 0 +0 6 +1 0 +0 7 +1 0 +0 8 +1 0 +0 9 +1 0 +0 10 +1 0 +0 11 +1 0 +0 12 +1 0 +0 13 +1 0 +0 14 +1 0 +0 15 +1 0 +0 16 +1 0 +0 17 +1 0 +0 18 +1 0 +0 19 +1 0 +0 20 +1 0 +0 21 +1 0 +0 22 +1 0 +0 23 +1 0 +0 24 +1 0 +0 25 +1 0 +0 26 +1 0 +0 27 +1 0 +0 28 +1 0 +0 29 +1 0 +0 30 +1 0 +0 31 +1 0 +0 32 +1 0 +End_Of_Object VOfflineBusStatisticSettings 3 +VNETOptionsStreamer 3 Begin_Of_Object +1 +0 +End_Of_Object VNETOptionsStreamer 3 +0 +1 +VUserFileMgrAnlyz 3 Begin_Of_Object +1 +0 +End_Of_Object VUserFileMgrAnlyz 3 +VBasicDiagnosticStreamer 3 Begin_Of_Object +1 +0 +End_Of_Object VBasicDiagnosticStreamer 3 +VPersistentCLibraryOptions 3 Begin_Of_Object +1 +0 +End_Of_Object VPersistentCLibraryOptions 3 +NValueObjectDisplay::VNameDisplaySettings 3 Begin_Of_Object +3 +12 +0 +4 +1 +4 +2 +4 +3 +4 +4 +1 +5 +1 +6 +4 +7 +4 +8 +4 +9 +6 +10 +4 +11 +4 +12 +0 +1 +1 +1 +2 +1 +3 +1 +4 +1 +5 +1 +6 +1 +7 +1 +8 +1 +9 +1 +10 +1 +11 +1 +12 +0 +0 +1 +0 +2 +0 +3 +0 +4 +0 +5 +0 +6 +0 +7 +0 +8 +0 +9 +0 +10 +0 +11 +0 +0 +1 +9 +128 +0 +End_Of_Object NValueObjectDisplay::VNameDisplaySettings 3 +ConfigurationSavedByCANwBeginner 0 +VGlobalExportSettings 3 Begin_Of_Object +2 +2 +1 +0 +0 +6 +0 +0.10000000000000001 +2 +0 +0.10000000000000001 +2 +19 +0 +1 +0 +1 +0 +:: +, +. + 1 "" +0 +End_Of_Object VGlobalExportSettings 3 +0 +VPersistentRTFilterOptions 3 Begin_Of_Object +2 +0 +0 +0 +0 +End_Of_Object VPersistentRTFilterOptions 3 +VPersistentRTTxBufferOptions 3 Begin_Of_Object +2 +1 +1 +500 +End_Of_Object VPersistentRTTxBufferOptions 3 +VPersistentRTIRQReductionOptions 3 Begin_Of_Object +2 +500 +End_Of_Object VPersistentRTIRQReductionOptions 3 +VPersistentDebuggerOptions 3 Begin_Of_Object +1 +64 +10000 +End_Of_Object VPersistentDebuggerOptions 3 +7 +0 +0 +0 +0 +0 +0 +0 +0 +1 +VAFDXGlobalSettings 3 Begin_Of_Object +1 +1000 +0 +End_Of_Object VAFDXGlobalSettings 3 +VPersistentRTCanErrorFrameOptions 3 Begin_Of_Object +1 +1 +0 +End_Of_Object VPersistentRTCanErrorFrameOptions 3 +1 +ILConfiguration::VProxyManager 3 Begin_Of_Object +1 +0 +0 +End_Of_Object ILConfiguration::VProxyManager 3 +End_Of_Object VGlobalParameters 2 +VDesktopManager 2 Begin_Of_Object +1 +1 +2 +VDesktop 3 Begin_Of_Object +1 +Setup +{78F025EB-D99B-4037-AADA-2489DA9362EC} +Begin_Of_Multi_Line_String +3 + +End_Of_Serialized_Data 3 +End_Of_Object VDesktop 3 +VDesktop 3 Begin_Of_Object +1 +Measurement +{9FC02A21-7124-467F-9E38-4ABD1D96597B} +Begin_Of_Multi_Line_String +3 + +End_Of_Serialized_Data 3 +End_Of_Object VDesktop 3 +0 +1 +4294967295 +End_Of_Object VDesktopManager 2 +0 +VGBAnlyzBox 2 Begin_Of_Object +2 +VGrMnBox 3 Begin_Of_Object +1 +VUniqueBox 4 Begin_Of_Object +1 +VBoxRoot 5 Begin_Of_Object +1 +3 +0 2 0 1 -1 -1 -1 -1 22 22 1522 983 + +1 + +MDI_DOCK_INFO_END +5 +1 +6 +0 1 -1 -1 -1 -1 1 1 538 543 +6 1 300 180 0 0 381 598 300 180 0 61440 1 20372 1904 0 0 0 0 260 0 0 0 5 -2 32767 1 59421 5 -2 386 592 4 1151 79 1 0 0 0 1 381 0 59421 1 +END_OF_DOCK_INFO +1 +2 +0 +0 +1 +1582 856 +END_OF_DESKTOP_DATA +6 +0 1 -1 -1 -1 -1 22 22 1522 983 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +2 +0 +0 +1 +999 592 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +0 1 +1 +6 +0 1 -1 -1 -1 -1 1 1 498 425 +6 0 300 180 0 0 438 862 300 180 0 61440 1 20356 1904 0 0 0 0 260 0 0 0 5 -2 32767 1 59421 5 -2 443 860 4 1151 79 1 0 0 0 1 438 0 59421 1 +END_OF_DOCK_INFO +1 +0 +0 +0 +1 +1007 434 +END_OF_DESKTOP_DATA +6 +0 1 -1 -1 -1 -1 22 22 1522 983 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +END_OF_DESKTOP_MEMBER +{49714911-9568-49CC-A9CE-3B0905658C4A} +0 +End_Of_Object VBoxRoot 5 +0 0 0 1 -1 -1 -1 -1 1 1 498 425 +End_Of_Object VUniqueBox 4 +End_Of_Object VGrMnBox 3 +VDOLocalInfoStruct 3 Begin_Of_Object +3 +1 +54 +VDAOGBFunctionBlock 4 Begin_Of_Object +1 +1 +0 +TABPredecessor: +0 +TABSuccessor: +29 +VPlugConf 5 Begin_Of_Object +1 +End_Of_Object VPlugConf 5 +VDAOSwitch 5 Begin_Of_Object +1 +29 +0 +TABPredecessor: +1 +TABSuccessor: +30 +VDAOGBHSStd 6 Begin_Of_Object +1 +30 +0 +0 0 +TABPredecessor: +29 +TABSuccessor: +32 +VDODynamicLine 7 Begin_Of_Object +1 +31 +0 +0 +VDOFRamification 8 Begin_Of_Object +1 +32 +0 +TABPredecessor: +30 +TABSuccessor: +34 +4 +VDORefinement 9 Begin_Of_Object +1 +33 +0 +2 +VDAOGBHSStd 10 Begin_Of_Object +1 +34 +0 +0 0 +TABPredecessor: +32 +TABSuccessor: +36 +VDODynamicLine 11 Begin_Of_Object +1 +35 +0 +0 +VDAOGBFunctionBlock 12 Begin_Of_Object +1 +36 +0 +TABPredecessor: +34 +TABSuccessor: +39 +VBusStatisticConfiguration 13 Begin_Of_Object +1 +VBusStatisticBox 14 Begin_Of_Object +1 +VBoxRoot 15 Begin_Of_Object +1 +1 +1 0 0 1 -1 -1 -1 -1 780 351 999 587 +Bus statistic +1 + +MDI_DOCK_INFO_END +5 +1 +6 +0 1 0 0 -1 -1 0 350 662 692 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +0 +0 +0 +1 +999 591 +END_OF_DESKTOP_DATA +6 +0 1 -1 -1 -1 -1 780 351 999 587 +6 0 1010 180 0 0 300 180 300 180 0 61440 1 36740 1904 0 0 0 0 261 0 0 0 1 5 300 1 59422 1 5 1011 185 8192 802 946 1 1 0 0 1 180 0 59422 1 +END_OF_DOCK_INFO +0 +0 +0 +0 +1 +1188 696 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +0 0 +END_OF_DESKTOP_MEMBER +{652EDEC7-8CB1-4A6F-B326-5D0CF875F481} +0 +End_Of_Object VBoxRoot 15 +8000 +2 +110 +100 +End_Of_Object VBusStatisticBox 14 +End_Of_Object VBusStatisticConfiguration 13 +VDOLine 13 Begin_Of_Object +1 +37 +0 +130 0 +NULL +End_Of_Object VDOLine 13 + +EndOfComment +0 +1 +End_Of_Object VDAOGBFunctionBlock 12 +End_Of_Object VDODynamicLine 11 +End_Of_Object VDAOGBHSStd 10 +NULL +End_Of_Object VDORefinement 9 +VDORefinement 9 Begin_Of_Object +1 +38 +0 +5 +VDAOGBHSStd 10 Begin_Of_Object +1 +39 +0 +0 0 +TABPredecessor: +36 +TABSuccessor: +41 +VDODynamicLine 11 Begin_Of_Object +1 +40 +0 +0 +VDAOGBFunctionBlock 12 Begin_Of_Object +1 +41 +0 +TABPredecessor: +39 +TABSuccessor: +44 +VGraphBoxConf 13 Begin_Of_Object +1 +VNETGraphBox 14 Begin_Of_Object +1 +VNETControlBox 15 Begin_Of_Object +2 +VUniqueBox 16 Begin_Of_Object +1 +VBoxRoot 17 Begin_Of_Object +1 +1 +1 1 0 1 -1 -1 -1 -1 1 351 779 591 +Graphic +1 + +MDI_DOCK_INFO_END +5 +1 +6 +0 1 0 0 -1 -1 196 115 786 460 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +1 +0 +0 +0 +999 591 +END_OF_DESKTOP_DATA +6 +0 1 -1 -1 -1 -1 1 351 779 591 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +1 +0 +0 +1 +1188 696 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +0 1 +1 +6 +0 1 0 0 -1 -1 196 115 786 460 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 196 115 786 460 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +END_OF_DESKTOP_MEMBER +{74B29E4F-CCEF-4429-ABCA-E5B398A25F47} +0 +End_Of_Object VBoxRoot 17 +1 -1 0 0 0 0 0 0 0 0 0 0 +End_Of_Object VUniqueBox 16 +1 +1 -1 0 0 0 0 0 0 0 0 0 0 +0 +End_Of_Object VNETControlBox 15 +End_Of_Object VNETGraphBox 14 +50 +APPDIR Vector.CANalyzer.Graphic.DLL +Vector.CANalyzer.Graphic, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.Graphic.ComponentWrapper +1 +1 +APPDIR CANoe_Net.DLL +CANoe_Net, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.ApplicationSerializer +2 +Application +2 +Boolean +Expanded +True +Int32 +SplitterWidth +237 +Int32 +SplitterHeight +80 +APPDIR Vector.CANalyzer.Graphic.DLL +Vector.CANalyzer.Graphic, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.Graphic.Position +3 +LegendPosition +3 +Int32 +value__ +0 +--TextFormatter: End of Object-- +APPDIR Components\Vector.CANalyzer.Serialization\1.5.0.0\Vector.CANalyzer.Serialization.dll +Vector.CANalyzer.Serialization, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b273882a063429a6 +Vector.CANalyzer.Serialization.SerializationVersion +4 +SerializationVersion +4 +UInt16 +mMajor +1 +UInt16 +mMinor +0 +UInt16 +mPatch +0 +--TextFormatter: End of Object-- +--TextFormatter: End of Object-- +TypeRef:2 +2 +--TextFormatter: End of Object-- +VSignalObjectStreamer 14 Begin_Of_Object +1 +4 +VPredefinedSignalObject 15 Begin_Of_Object +1 +VHostSignal 16 Begin_Of_Object +2 +0 +Eth 1::Rx Bus load +0 +End_Of_Object VHostSignal 16 +15 +ValueObjectConfiguration::VConfiguredPredefinedSignal 16 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 17 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 18 Begin_Of_Object +1 +VConfigBusStatistics 19 Begin_Of_Object +1 +VConfigBusEvent 20 Begin_Of_Object +1 +VConfigEvent 21 Begin_Of_Object +1 +End_Of_Object VConfigEvent 21 +1 +11 +End_Of_Object VConfigBusEvent 20 +End_Of_Object VConfigBusStatistics 19 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 18 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 17 +16 +VBusStatisticSignal 17 Begin_Of_Object +1 +VPredefinedSignalImpl 18 Begin_Of_Object +1 +1 +% +Eth 1::Rx Bus load +11 +6 +End_Of_Object VPredefinedSignalImpl 18 +1 +0 +End_Of_Object VBusStatisticSignal 17 + +End_Of_Serialized_Data 16 +End_Of_Object ValueObjectConfiguration::VConfiguredPredefinedSignal 16 + +End_Of_Serialized_Data 15 +End_Of_Object VPredefinedSignalObject 15 +[MeasurementObject] +Eth 1::Rx Bus load +"%" 1 800080 0. 100. -100. 100. 50 -5 0 0 36000000 1 1 0 0 +VPredefinedSignalObject 15 Begin_Of_Object +1 +VHostSignal 16 Begin_Of_Object +2 +0 +Eth 1::Tx Bus load +0 +End_Of_Object VHostSignal 16 +15 +ValueObjectConfiguration::VConfiguredPredefinedSignal 16 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 17 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 18 Begin_Of_Object +1 +VConfigBusStatistics 19 Begin_Of_Object +1 +VConfigBusEvent 20 Begin_Of_Object +1 +VConfigEvent 21 Begin_Of_Object +1 +End_Of_Object VConfigEvent 21 +1 +11 +End_Of_Object VConfigBusEvent 20 +End_Of_Object VConfigBusStatistics 19 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 18 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 17 +16 +VBusStatisticSignal 17 Begin_Of_Object +1 +VPredefinedSignalImpl 18 Begin_Of_Object +1 +2 +% +Eth 1::Tx Bus load +11 +6 +End_Of_Object VPredefinedSignalImpl 18 +1 +0 +End_Of_Object VBusStatisticSignal 17 + +End_Of_Serialized_Data 16 +End_Of_Object ValueObjectConfiguration::VConfiguredPredefinedSignal 16 + +End_Of_Serialized_Data 15 +End_Of_Object VPredefinedSignalObject 15 +[MeasurementObject] +Eth 1::Tx Bus load +"%" 1 80 0. 100. -100. 100. 50 -5 0 0 36000000 1 1 0 0 +VPredefinedSignalObject 15 Begin_Of_Object +1 +VHostSignal 16 Begin_Of_Object +2 +0 +Eth 1::Rx Packet rate +0 +End_Of_Object VHostSignal 16 +15 +ValueObjectConfiguration::VConfiguredPredefinedSignal 16 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 17 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 18 Begin_Of_Object +1 +VConfigBusStatistics 19 Begin_Of_Object +1 +VConfigBusEvent 20 Begin_Of_Object +1 +VConfigEvent 21 Begin_Of_Object +1 +End_Of_Object VConfigEvent 21 +1 +11 +End_Of_Object VConfigBusEvent 20 +End_Of_Object VConfigBusStatistics 19 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 18 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 17 +16 +VBusStatisticSignal 17 Begin_Of_Object +1 +VPredefinedSignalImpl 18 Begin_Of_Object +1 +7 +pkt/s +Eth 1::Rx Packet rate +11 +6 +End_Of_Object VPredefinedSignalImpl 18 +1 +0 +End_Of_Object VBusStatisticSignal 17 + +End_Of_Serialized_Data 16 +End_Of_Object ValueObjectConfiguration::VConfiguredPredefinedSignal 16 + +End_Of_Serialized_Data 15 +End_Of_Object VPredefinedSignalObject 15 +[MeasurementObject] +Eth 1::Rx Packet rate +"pkt/s" 1 800000 0. 10000. -100. 100. 5000 -5 0 0 36000000 1 1 0 0 +VPredefinedSignalObject 15 Begin_Of_Object +1 +VHostSignal 16 Begin_Of_Object +2 +0 +Eth 1::Tx Packet rate +0 +End_Of_Object VHostSignal 16 +15 +ValueObjectConfiguration::VConfiguredPredefinedSignal 16 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 17 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 18 Begin_Of_Object +1 +VConfigBusStatistics 19 Begin_Of_Object +1 +VConfigBusEvent 20 Begin_Of_Object +1 +VConfigEvent 21 Begin_Of_Object +1 +End_Of_Object VConfigEvent 21 +1 +11 +End_Of_Object VConfigBusEvent 20 +End_Of_Object VConfigBusStatistics 19 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 18 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 17 +16 +VBusStatisticSignal 17 Begin_Of_Object +1 +VPredefinedSignalImpl 18 Begin_Of_Object +1 +8 +pkt/s +Eth 1::Tx Packet rate +11 +6 +End_Of_Object VPredefinedSignalImpl 18 +1 +0 +End_Of_Object VBusStatisticSignal 17 + +End_Of_Serialized_Data 16 +End_Of_Object ValueObjectConfiguration::VConfiguredPredefinedSignal 16 + +End_Of_Serialized_Data 15 +End_Of_Object VPredefinedSignalObject 15 +[MeasurementObject] +Eth 1::Tx Packet rate +"pkt/s" 1 808000 0. 10000. -100. 100. 5000 -5 0 0 36000000 1 1 0 0 +[GraphWindow:x_x_x_x_x_x_WindowBk_Grid_AxisBk_XAxisFr_YAxisFr_x_x_x_x_x_x] +0 100000 100000 200000 36000000 1 ffffff b2b2b2 ffffff 0 0 0 0 1 1 1 0 +0 30 5000 +0 +0 100 +0 +16777215 +0 +2 +0 +1 +41943040 +0 +1416 25200245 +Grafik-Fenster + 1 "" +0 2 1 +:: +, + +4 +. +0 2 0 +0.1 +6 + 1 "" +1 0 +2 19 +0.1 +1 +[End_of_Export] +12 +26 25 143 20 18 55 55 55 55 55 57 13 +237 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +11711154 +32768 +0 +0 +0 +0 +0 +0 +0 +0 +0 +113 +0 10 +1 +2 +1 +0 1 +Eth 1::Bus load [%] +Eth 1::Bus load [%] +8388736 0 +1 +2 3 +Eth 1::Packet rate [pkt/s] +Eth 1::Packet rate [pkt/s] +8388608 0 +0 + 1 "C:\Users\Public\Documents\Vector\CANwin\Public\Documents\demos\demo_can_cn\cansystemdemo\CANoe_Grafik_2.mdf" +0 0 0 0 0 0 0 0 +1416 11060193 + 1 "" + 1 "" +0 2 1 +:: +, + +4 +. +0 2 0 +0.1 +6 + 1 "" +1 0 +2 19 +0.1 +1 +[End_of_Export] +0 1024 0 60 +1 1 +0 0 0 0 0 2 0 0 0 +0 128 +527 343 1256 778 +1 40 20 15 +0 -1 +1 +1 +1 +1 +0 +0 +0 +1 12 +1 1 1 0 0 0 0 0 0 0 0 0 +0 1 2 -1 -1 -1 -1 -1 -1 -1 -1 -1 +26 25 163 55 55 55 55 55 57 57 82 30 +237 80 +End_Of_Object VSignalObjectStreamer 14 +End_Of_Object VGraphBoxConf 13 +VDOLine 13 Begin_Of_Object +1 +42 +0 +130 0 +NULL +End_Of_Object VDOLine 13 + +EndOfComment +0 +1 +End_Of_Object VDAOGBFunctionBlock 12 +End_Of_Object VDODynamicLine 11 +End_Of_Object VDAOGBHSStd 10 +NULL +End_Of_Object VDORefinement 9 +VDORefinement 9 Begin_Of_Object +1 +43 +0 +7 +VDAOGBHSStd 10 Begin_Of_Object +1 +44 +0 +0 0 +TABPredecessor: +41 +TABSuccessor: +46 +VDODynamicLine 11 Begin_Of_Object +1 +45 +0 +0 +VDAOGBFunctionBlock 12 Begin_Of_Object +1 +46 +0 +TABPredecessor: +44 +TABSuccessor: +49 +VTraceConfiguration 13 Begin_Of_Object +1 +VTraceControlCfg 14 Begin_Of_Object +8 +VTraceSearchCfg 15 Begin_Of_Object +1 +VEvCondBlock 16 Begin_Of_Object +1 +VEvCondGroup 17 Begin_Of_Object +2 +VEvCondPrimitive 18 Begin_Of_Object +1 +1 +End_Of_Object VEvCondPrimitive 18 +1 +0 +0 +End_Of_Object VEvCondGroup 17 +End_Of_Object VEvCondBlock 16 +0 +End_Of_Object VTraceSearchCfg 15 +VTraceFilterCfg 15 Begin_Of_Object +1 +0 +1 +VTraceAnalysisFilterGroup 16 Begin_Of_Object +2 +1 +Filter Group 0 +2 +VTraceAnalysisSingleFilter 17 Begin_Of_Object +3 +1 +1 +0 +End_Of_Object VTraceAnalysisSingleFilter 17 +VTraceAnalysisSingleFilter 17 Begin_Of_Object +3 +0 +0 +0 +End_Of_Object VTraceAnalysisSingleFilter 17 +1 +End_Of_Object VTraceAnalysisFilterGroup 16 +End_Of_Object VTraceFilterCfg 15 +1 +1 +0 +0 +28 +0 +0 +1 +1 +14 +ver=2: FF FT FT FT FT FT +End_Of_Serialized_Data 14 +2 +0 +3 +0 +4 +0 +5 +0 +6 +1 +14 +ver=2: FT TF TF FF FT FT;F T Config;F T GLLogger;T F _Statistics +End_Of_Serialized_Data 14 +7 +0 +8 +0 +9 +0 +10 +0 +11 +0 +12 +0 +13 +0 +14 +1 +14 +ver=3: FF FT FT FT +End_Of_Serialized_Data 14 +15 +0 +16 +0 +17 +0 +18 +0 +19 +0 +20 +0 +21 +1 +14 +ver=2: FT FT FT FT +End_Of_Serialized_Data 14 +22 +1 +14 +ver=2: FF +End_Of_Serialized_Data 14 +23 +1 +14 +ver=2: FF +End_Of_Serialized_Data 14 +24 +1 +14 +ver=2: FF +End_Of_Serialized_Data 14 +25 +0 +26 +1 +14 +ver=2: FF +End_Of_Serialized_Data 14 +27 +1 +14 +ver=2: FF +End_Of_Serialized_Data 14 +0 +1 +VTraceColumnConfiguration 15 Begin_Of_Object +3 +1 +Initial +82 +VTNColumnData 16 Begin_Of_Object +3 +0 +130 +0 +Time +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +1 +75 +1 +Chn +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +2 +92 +-1 +ID +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +3 +130 +-1 +Name +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +4 +170 +-1 +ID / name +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +5 +36 +2 +Dir +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +6 +88 +9 +Payload Length +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +7 +270 +10 +Payload Data +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +8 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +9 +130 +3 +Source MAC ID +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +10 +130 +4 +Destination MAC ID +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +11 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +12 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +13 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +14 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +15 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +16 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +17 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +18 +84 +5 +Ethernet Type +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +19 +65 +-1 +Ethernet Size +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +20 +270 +-1 +Ethernet Data +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +21 +65 +7 +Protocol +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +22 +99 +8 +Protocol Info +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +23 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +24 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +25 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +26 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +27 +83 +6 +Packet Length +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +28 +110 +-1 +HH:MM:SS +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +29 +85 +-1 +Time difference +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +30 +50 +-1 +Bustype +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +31 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +32 +50 +-1 +Bus +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +33 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +34 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +35 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +36 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +37 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +38 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +39 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +40 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +41 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +42 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +43 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +44 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +45 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +46 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +47 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +48 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +49 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +50 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +51 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +52 +10 +-1 + +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +53 +10 +-1 + +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +54 +50 +-1 +Namespace +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +55 +120 +-1 +Diff time (ref. event) +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +56 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +57 +100 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +58 +100 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +59 +120 +-1 +Date / Time +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +60 +50 +-1 +Receive Node +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +61 +50 +-1 +VL No. +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +62 +200 +-1 +Sub-VL ID +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +63 +50 +-1 +Transmitter +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +64 +200 +-1 +Receiver +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +65 +50 +-1 +Tx Port ID +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +66 +50 +-1 +Rx Port ID +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +67 +65 +-1 +Port Char. +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +68 +50 +-1 +IP Frag. +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +69 +150 +-1 +Master Port Name +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +70 +65 +-1 +BAG +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +71 +65 +-1 +Seq. No. +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +72 +50 +-1 +Line +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +73 +50 +-1 +Interface ID +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +74 +50 +-1 +Equipment +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +75 +50 +-1 +Partition +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +76 +50 +-1 +BRS +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +77 +50 +-1 +ESI +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +78 +45 +-1 +Data length +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +79 +10 +-1 + +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +80 +10 +-1 + +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +81 +10 +-1 + +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +End_Of_Object VTraceColumnConfiguration 15 +2 +0 +VTraceControlFixedModeExpansionItems 15 Begin_Of_Object +3 +0 +End_Of_Object VTraceControlFixedModeExpansionItems 15 +14 +C:\Users\Public\Documents\Vector\CANwin\8.2.40\CANwin Demos\templates +End_Of_Serialized_Data 14 +14 +Trace Window +End_Of_Serialized_Data 14 +14 +C:\Users\Public\Documents\Vector\CANwin\Public\Documents\Vector\CANwin 8.0.918\templates +End_Of_Serialized_Data 14 +0 +1627403825 +1 +1 +14 +VLogExportPersister 15 Begin_Of_Object +3 +1416 +44616677 +Trace Window + 1 "C:\Users\Public\Documents\Vector\CANwin\Public\Documents\Vector\CANwin 8.0.918\templates" + 1 "" +0 +2 +1 +:: +, +. + +0 +2 +0 +0.10000000000000001 +6 +1 +0 +2 +19 +0.10000000000000001 +1 +0 +End_Of_Object VLogExportPersister 15 + +End_Of_Serialized_Data 14 +0 +0 +0 +290 +0 +150 + 1 "C:\Users\Public\Documents\Vector\CANwin\8.2.40\CANwin Demos\templates" +End_Of_Object VTraceControlCfg 14 +VNETTraceControlBox 14 Begin_Of_Object +1 +VNETControlBox 15 Begin_Of_Object +2 +VUniqueBox 16 Begin_Of_Object +1 +VBoxRoot 17 Begin_Of_Object +1 +1 +1 1 0 1 -1 -1 -1 -1 0 339 1188 688 + +1 + +MDI_DOCK_INFO_END +5 +1 +6 +0 1 -1 -1 -1 -1 173 264 1085 782 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +1 +0 +0 +1 +999 591 +END_OF_DESKTOP_DATA +6 +0 1 -1 -1 -1 -1 0 339 1188 688 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +1 +1 +0 +0 +1 +1188 696 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +0 0 +END_OF_DESKTOP_MEMBER +{28077F35-C142-4ACC-B040-1BF0AB026C11} +0 +End_Of_Object VBoxRoot 17 +1 -1 0 0 0 0 0 0 0 0 0 0 +End_Of_Object VUniqueBox 16 +0 +0 +End_Of_Object VNETControlBox 15 +End_Of_Object VNETTraceControlBox 14 +End_Of_Object VTraceConfiguration 13 +VDOLine 13 Begin_Of_Object +1 +47 +0 +130 0 +NULL +End_Of_Object VDOLine 13 + +EndOfComment +0 +1 +End_Of_Object VDAOGBFunctionBlock 12 +End_Of_Object VDODynamicLine 11 +End_Of_Object VDAOGBHSStd 10 +NULL +End_Of_Object VDORefinement 9 +VDORefinement 9 Begin_Of_Object +1 +48 +0 +6 +VDAOGBHSStd 10 Begin_Of_Object +1 +49 +0 +1 0 +TABPredecessor: +46 +TABSuccessor: +51 +VDODynamicLine 11 Begin_Of_Object +1 +50 +0 +0 +VDAOGBFunctionBlock 12 Begin_Of_Object +1 +51 +0 +TABPredecessor: +49 +TABSuccessor: +53 +VTriggerConfiguration 13 Begin_Of_Object +2 +VMigratedGenericConfiguration 14 Begin_Of_Object +1 +VTriggerCfgData 15 Begin_Of_Object +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +200000 +1 +1 +1 +1 +1000 +VEvCondBlock 16 Begin_Of_Object +1 +VEvCondGroup 17 Begin_Of_Object +2 +VEvCondPrimitive 18 Begin_Of_Object +1 +1 +End_Of_Object VEvCondPrimitive 18 +1 +0 +0 +End_Of_Object VEvCondGroup 17 +End_Of_Object VEvCondBlock 16 +VEvCondBlock 16 Begin_Of_Object +1 +VEvCondGroup 17 Begin_Of_Object +2 +VEvCondPrimitive 18 Begin_Of_Object +1 +1 +End_Of_Object VEvCondPrimitive 18 +1 +0 +0 +End_Of_Object VEvCondGroup 17 +End_Of_Object VEvCondBlock 16 +0 +0 +0 +116 +0 +End_Of_Object VTriggerCfgData 15 +End_Of_Object VMigratedGenericConfiguration 14 +VTriggerBox 14 Begin_Of_Object +1 +VBoxRoot 15 Begin_Of_Object +1 +1 +1 -1 0 1 0 0 0 0 233 253 918 769 + +1 + +MDI_DOCK_INFO_END +5 +1 +6 +0 1 0 0 -1 -1 233 253 918 769 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 233 253 918 769 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +0 0 +END_OF_DESKTOP_MEMBER +{3C7808FB-3653-4239-BC99-C442DF039126} +0 +End_Of_Object VBoxRoot 15 +End_Of_Object VTriggerBox 14 +0 +End_Of_Object VTriggerConfiguration 13 +VDOLine 13 Begin_Of_Object +1 +52 +0 +10 0 +VDAOGBFunctionBlock 14 Begin_Of_Object +1 +53 +0 +TABPredecessor: +51 +TABSuccessor: +0 +VLoggingConfiguration 15 Begin_Of_Object +2 +VMigratedGenericConfiguration 16 Begin_Of_Object +1 +VLogCfgData 17 Begin_Of_Object +5 +0 +1 +1 +1 +0 +0 +0 +0 +1024 +60 +1 +0 +1 +1 +0 +0 +0 +0 +0 +2 +0 +0 +17 +VLogExportPersister 18 Begin_Of_Object +3 +1416 +11060193 + 1 "C:\Users\Public\Documents\Vector\CANwin\Public\Documents\Vector\CANwin 8.0.918\templates" + 1 "C:\Users\Public\Documents\Vector\CANwin\Public\Documents\Vector\CANwin 8.0.918\templates" + 1 "" +0 +2 +1 +:: +, +. + +0 +2 +0 +0.10000000000000001 +6 +1 +0 +2 +19 +0.10000000000000001 +1 +0 +End_Of_Object VLogExportPersister 18 + +End_Of_Serialized_Data 17 + 1 "C:\Users\Public\Documents\Vector\CANwin\8.2.40\CANwin Demos\CNOE_B.blf" +0 +0 +0 +10 +80 +0 +End_Of_Object VLogCfgData 17 +End_Of_Object VMigratedGenericConfiguration 16 +End_Of_Object VLoggingConfiguration 15 +VDOLine 15 Begin_Of_Object +1 +54 +0 +60 0 +NULL +End_Of_Object VDOLine 15 + +EndOfComment +1 +1 +End_Of_Object VDAOGBFunctionBlock 14 +End_Of_Object VDOLine 13 + +EndOfComment +0 +1 +End_Of_Object VDAOGBFunctionBlock 12 +End_Of_Object VDODynamicLine 11 +End_Of_Object VDAOGBHSStd 10 +NULL +End_Of_Object VDORefinement 9 +End_Of_Object VDOFRamification 8 +End_Of_Object VDODynamicLine 7 +End_Of_Object VDAOGBHSStd 6 +End_Of_Object VDAOSwitch 5 + +EndOfComment +1 +1 +End_Of_Object VDAOGBFunctionBlock 4 +VDAOGBFunctionBlock 4 Begin_Of_Object +1 +28 +0 +TABPredecessor: +0 +TABSuccessor: +29 +VOfflineSrcConfiguration 5 Begin_Of_Object +3 +VMigratedGenericConfiguration 6 Begin_Of_Object +1 +VOfflineCfgData 7 Begin_Of_Object +2 +VReplayCfgBase 8 Begin_Of_Object +1 +0 +1 +End_Of_Object VReplayCfgBase 8 +VCfgBreakCondition 8 Begin_Of_Object +1 +VDataBreakCondition 9 Begin_Of_Object +1 +0 +VEvCondBlock 10 Begin_Of_Object +1 +VEvCondGroup 11 Begin_Of_Object +2 +VEvCondPrimitive 12 Begin_Of_Object +1 +1 +End_Of_Object VEvCondPrimitive 12 +1 +0 +0 +End_Of_Object VEvCondGroup 11 +End_Of_Object VEvCondBlock 10 +End_Of_Object VDataBreakCondition 9 +End_Of_Object VCfgBreakCondition 8 +0 +0 +0 +0 +0 +0 +End_Of_Object VOfflineCfgData 7 +End_Of_Object VMigratedGenericConfiguration 6 +VChannelMapping 6 Begin_Of_Object +1 +0 +End_Of_Object VChannelMapping 6 +End_Of_Object VOfflineSrcConfiguration 5 +NULL + +EndOfComment +1 +1 +End_Of_Object VDAOGBFunctionBlock 4 +0 +End_Of_Object VDOLocalInfoStruct 3 +67305472 +0 +0 +2 +VDOLocalInfoStruct 3 Begin_Of_Object +End_Of_Object VDOLocalInfoStruct 3 +End_Of_Serialized_Data 2 +0.000000 +0 0 +End_Of_Object VGBAnlyzBox 2 +VGBRealTimeBox 2 Begin_Of_Object +1 +VGrMnBox 3 Begin_Of_Object +1 +VUniqueBox 4 Begin_Of_Object +1 +VBoxRoot 5 Begin_Of_Object +1 +3 +0 0 0 1 -1 -1 -1 -1 0 0 1188 338 + +1 + +MDI_DOCK_INFO_END +5 +1 +6 +0 1 -1 -1 -1 -1 0 0 803 606 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +1 +0 +0 +0 +1 +803 901 +END_OF_DESKTOP_DATA +6 +0 1 -1 -1 -1 -1 0 0 1188 338 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +1 +0 +0 +0 +1 +1188 696 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +0 1 +1 +6 +0 1 -1 -1 -1 -1 1 1 1037 737 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +0 +0 +0 +1 +1137 856 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 44 44 1544 1005 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +0 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +END_OF_DESKTOP_MEMBER +{224229E5-10CA-425F-8B6F-C213CD04C44F} +0 +End_Of_Object VBoxRoot 5 +1 0 0 1 -1 -1 -1 -1 1 1 1037 737 +End_Of_Object VUniqueBox 4 +End_Of_Object VGrMnBox 3 +VDOLocalInfoStruct 3 Begin_Of_Object +3 +1 +77 +VDAOBus 4 Begin_Of_Object +1 +1 +1 +VDAOGBFunctionBlock 5 Begin_Of_Object +1 +41 +3 +TABPredecessor: +1 +TABSuccessor: +2 +VSimulationNode 6 Begin_Of_Object +3 +VProgrammedNode 7 Begin_Of_Object +4 +VConfigurationRoot 8 Begin_Of_Object +1 +End_Of_Object VConfigurationRoot 8 + 1 "include\CAPL\MakeConfig.can" +1 +J:\HsKA\NB7\Bachelorthesis\CANoe\Modbus\include\CAPL\MakeConfig.cbf +MakeConfig +MakeConfig +5 +MakeConfig +ECU 1 +EOF_TITLE_INFO +MakeConfig +1 +0 +1 +1 +0 +1 +0 +1 0 0 0 +SS_BEGIN_COMMON_INFO +1 +5 +Behavior +1 +Buses +1 +Misc +1 +Modules +1 +Timing +1 +SS_END_COMMON_INFO + +EOF_MBSSDATA +1 +0 1 +0 +EOF_NLDATA +0 +EOF_ASSEMBLYDATA + 1 "include\CAPL\MakeConfig.cbf" +VIPBStackSetting 8 Begin_Of_Object +3 +0 +1 +VIPBAdapterSetting 9 Begin_Of_Object +4 +1 +9 +02:60:73:99:15:00 +End_Of_Serialized_Data 9 +9 +192.168.1.2 +End_Of_Serialized_Data 9 +9 +255.255.255.0 +End_Of_Serialized_Data 9 +9 +0.0.0.0 +End_Of_Serialized_Data 9 +1 +VPersistentIFv4Address 10 Begin_Of_Object +1 +VPersistentIFAddress 11 Begin_Of_Object +1 +VPersistentAddress 12 Begin_Of_Object +1 +End_Of_Object VPersistentAddress 12 +End_Of_Object VPersistentIFAddress 11 +10 +192.168.1.2 +End_Of_Serialized_Data 10 +10 +255.255.255.0 +End_Of_Serialized_Data 10 +End_Of_Object VPersistentIFv4Address 10 +0 +1 +11 +Ethernet +1 +0 +0 +End_Of_Object VIPBAdapterSetting 9 +0 +1 +0 +End_Of_Object VIPBStackSetting 8 +7 +NULL +End_Of_Serialized_Data 7 +End_Of_Object VProgrammedNode 7 +0 +0 +Startdelay 0 0 0 +Jitter 0 0 1 0 0 0 0 +1 +1 ETHERNET_IL.DLL +EOF_NLDATA +3 +VSimulinkModelViewerConfiguration 7 Begin_Of_Object +2 + 1 "" + 1 "" + 1 "" +150 +0 +End_Of_Object VSimulinkModelViewerConfiguration 7 +1 +0 +566845561 +0 +NodeSignalPanelBustypeCount 0 +End_Of_Object VSimulationNode 6 +NULL + +EndOfComment +0 +1 +End_Of_Object VDAOGBFunctionBlock 5 +0 +TABPredecessor: +0 +TABSuccessor: +41 +VDAOGBFunctionBlock 5 Begin_Of_Object +1 +2 +0 +TABPredecessor: +41 +TABSuccessor: +0 +VCardConf 6 Begin_Of_Object +1 +End_Of_Object VCardConf 6 +NULL + +EndOfComment +0 +1 +End_Of_Object VDAOGBFunctionBlock 5 +End_Of_Object VDAOBus 4 +NULL +0 +End_Of_Object VDOLocalInfoStruct 3 +0.000000 +0 0 +1 1 0 59420 1 233 1 2882400001 98 331 309 611 2882400002 0 0 0 0 0 0 1 2882400001 1270 1270 311 311 2882400002 0 0 0 528538608 0 526135044 3 +SS_BEGIN_COMMON_INFO +1 +0 +SS_END_COMMON_INFO + +EOF_MBSSDATA +1 +Ethernet +11 +1 +1 +345965688 1 0 1 0 0 1 0 0 0 2000 1 +SS_BEGIN_COMMON_INFO +1 +3 +Channels +1 +Databases +1 +Misc +1 +SS_END_COMMON_INFO + +EOF_BUSDATA +1 +_Start_VPRBSManager 1 +0 0x32 0x1 +_End_VPRBSManager +NodeSignalPanelBustypeCount 0 +EOF_BUS + +EOF_MBSSDATA +End_Of_Object VGBRealTimeBox 2 +VWriteBox 2 Begin_Of_Object +2 +VUniqueBox 3 Begin_Of_Object +1 +VBoxRoot 4 Begin_Of_Object +1 +3 +0 1 0 1 -1 -1 -1 -1 0 607 803 901 +Write +1 + +MDI_DOCK_INFO_END +5 +1 +6 +0 1 -1 -1 -1 -1 0 607 803 901 +6 0 1010 180 0 0 300 180 300 180 0 61440 1 36756 1904 0 0 0 0 260 0 0 0 1 5 32767 1 59422 1 5 1011 185 4 6 946 1 1 0 0 1 180 0 59422 1 +END_OF_DOCK_INFO +1 +1 +0 +1 +1 +803 901 +END_OF_DESKTOP_DATA +6 +0 1 -1 -1 0 0 0 700 662 1043 +6 1 1010 180 0 0 300 180 300 180 0 61440 1 12180 1904 0 0 0 0 260 0 0 0 -1 -1 32767 0 59422 0 0 0 0 0 0 0 1 10 0 0 1 201 0 59419 1 +END_OF_DOCK_INFO +1 +1 +0 +1 +1 +614 591 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +0 1 +1 +6 +0 1 0 0 0 0 0 700 662 1043 +6 1 1010 180 0 0 300 180 300 180 0 61440 1 36756 1904 0 0 0 0 260 0 0 0 1 5 32767 1 59422 1 5 1586 185 4 6 946 1 1 0 0 1 180 0 59422 1 +END_OF_DOCK_INFO +1 +1 +0 +1 +1 +1582 1043 +END_OF_DESKTOP_DATA +6 +0 1 -1 -1 0 0 0 700 662 1043 +6 1 790 180 0 0 300 180 300 180 0 61440 0.5 36740 1904 0 0 0 0 261 0 0 0 1 5 32767 1 59422 1 5 1586 185 4 6 946 1 1 0 0 0.5 180 0 59422 1 +END_OF_DOCK_INFO +1 +2 +0 +1 +1 +1582 1043 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +END_OF_DESKTOP_MEMBER +{8F3DFCAC-9CCB-45C2-AF10-5DEC039B5956} +0 +End_Of_Object VBoxRoot 4 +0 1 0 1 -1 -1 0 0 0 700 662 1043 +End_Of_Object VUniqueBox 3 +2 +VWriteControlAdapter 3 Begin_Of_Object +2 +VControlAdapter 4 Begin_Of_Object +1 +End_Of_Object VControlAdapter 4 +1 +3 +WListVer 2 + 1 "C:\Users\Public\Documents\Vector\CANwin\Public\Documents\Vector\CANwin 8.0.918\templates" + 0 1 1 1 1 0 + False 147 90 0 +End_Of_Serialized_Data 3 +End_Of_Object VWriteControlAdapter 3 + +End_Of_Serialized_Data 2 +End_Of_Object VWriteBox 2 +VWinStore 2 Begin_Of_Object +1 +22 2 3 -32088 -32000 -1 -1 0 0 930 767 +End_Of_Child_List +End_Of_Object VWinStore 2 +VWinStore 2 Begin_Of_Object +1 +22 0 1 -1 -1 -1 -1 1 1 1591 1167 +End_Of_Child_List +End_Of_Object VWinStore 2 +VChipMultibusConfig 2 Begin_Of_Object +1 +Version 7 9 +5 32 +0 +9 0 +11 1 +1 +VEthernetChannelConfig 3 Begin_Of_Object +1 +2 0 +VEthernetFilterConfig 4 Begin_Of_Object +1 +1 0 0 +End_Of_Object VEthernetFilterConfig 4 +VEthernetProtocolConfig 4 Begin_Of_Object +1 +1 1 0 + +End_Of_Object VEthernetProtocolConfig 4 +VEthernetVnChannelConfig 4 Begin_Of_Object +1 +1 +0 0 0 0 0 0 0 0 0 +End_Of_Object VEthernetVnChannelConfig 4 +End_Of_Object VEthernetChannelConfig 3 +14 0 +1 +12 1 +3 +0 127 0 0 1 2900 10 0 0 0 +1 1 +3 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +13 0 +1 +15 0 +7 0 +End_Of_Object VChipMultibusConfig 2 +VChipConfigC200 2 Begin_Of_Object +1 +0 +200 16000 0 0 +0 58 250 0 255 0 0 +1 1000 0 +0 +End_Of_Object VChipConfigC200 2 +VChipConfigC200 2 Begin_Of_Object +1 +0 +200 16000 0 0 +0 58 250 0 255 0 0 +1 1000 1 +0 +End_Of_Object VChipConfigC200 2 +VChipConfigC005 2 Begin_Of_Object +1 +0 +5 16000 0 0 +0 35 96 0 2047 0 0 0 0 0 +1 1000 0 +0 +End_Of_Object VChipConfigC005 2 +VChipConfigC005 2 Begin_Of_Object +1 +0 +5 16000 0 0 +0 35 96 0 2047 0 0 0 0 0 +1 1000 1 +0 +End_Of_Object VChipConfigC005 2 +VChipConfigC527 2 Begin_Of_Object +1 +0 +527 16000 0 0 +1 35 0 0 0 0 0 0 0 0 +1 1000 0 +0 +End_Of_Object VChipConfigC527 2 +VChipConfigC527 2 Begin_Of_Object +1 +0 +527 16000 0 0 +1 35 0 0 0 0 0 0 0 0 +1 1000 1 +0 +End_Of_Object VChipConfigC527 2 +VChipConfigC1000 2 Begin_Of_Object +1 +0 +1000 16000 0 0 +1 35 1 0 2 0 0 0 0 0 0 +1 1000 0 +0 +55 24 0 +2 2 27 12 2 2 0 +End_Of_Object VChipConfigC1000 2 +VChipConfigC1000 2 Begin_Of_Object +1 +0 +1000 16000 0 0 +1 35 1 0 2 0 0 0 0 0 0 +1 1000 1 +0 +55 24 0 +2 2 27 12 2 2 0 +End_Of_Object VChipConfigC1000 2 +VChipConfigC462 2 Begin_Of_Object +1 +462 16000 0 0 +125000 0 0 1 3 0 0 0 0 0 0 28 28 28 28 8 0 0 10 +1 1000 0 +0 +End_Of_Object VChipConfigC462 2 +VChipConfigC462 2 Begin_Of_Object +1 +462 16000 0 0 +125000 0 0 1 3 0 0 0 0 0 0 28 28 28 28 8 0 0 10 +1 1000 1 +0 +End_Of_Object VChipConfigC462 2 +0 +10 +3 0 +5 0 +6 0 +7 0 +8 0 +9 0 +11 1 +13 0 +14 0 +15 0 +VScanBaudrateConfiguration 2 Begin_Of_Object +1 +0 +End_Of_Object VScanBaudrateConfiguration 2 +4 +0 +VPersistentPath 2 Begin_Of_Object +1 + 1 "MakeConfig.cpd" +End_Of_Object VPersistentPath 2 +0 +3 +0 +0 +VPlugInsPersistentWrapper 2 Begin_Of_Object +1 + + +End_Of_Object VPlugInsPersistentWrapper 2 +0 +0 +VMacroStreamer 2 Begin_Of_Object +2 +VMacroManager 3 Begin_Of_Object +3 +0 +0 +0 +0 +End_Of_Object VMacroManager 3 +End_Of_Object VMacroStreamer 2 +VSignalGeneratorStreamer 2 Begin_Of_Object +1 +VAnlyzSigGeneratorManager 3 Begin_Of_Object +2 +0 +0 +End_Of_Object VAnlyzSigGeneratorManager 3 +End_Of_Object VSignalGeneratorStreamer 2 +SignalGeneratorsReplay 1 +VNETStandaloneComponent 2 Begin_Of_Object +1 +VNETControlBox 3 Begin_Of_Object +2 +VUniqueBox 4 Begin_Of_Object +1 +VBoxRoot 5 Begin_Of_Object +1 +3 +1 -1 0 1 0 0 -1 -1 387 290 1533 916 +Signalgeneratoren und Signal Replay +1 + +MDI_DOCK_INFO_END +5 +1 +6 +0 1 0 0 -1 -1 387 290 1349 718 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 387 290 1533 916 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +0 0 +END_OF_DESKTOP_MEMBER +{B58E4D7C-A178-49C8-B94F-0517372DCBD6} +0 +End_Of_Object VBoxRoot 5 +1 -1 0 0 0 0 0 0 0 0 0 0 +End_Of_Object VUniqueBox 4 +0 +0 +End_Of_Object VNETControlBox 3 +31 +APPDIR Vector.CANoe.SignalGenerators.DLL +Vector.CANoe.SignalGenerators, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANoe.SignalGenerators.ComponentWrapper +1 +1 +APPDIR CANoe_Net.DLL +CANoe_Net, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.ApplicationSerializer +2 +Application +2 +APPDIR Components\Vector.CANalyzer.Serialization\1.5.0.0\Vector.CANalyzer.Serialization.dll +Vector.CANalyzer.Serialization, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b273882a063429a6 +Vector.CANalyzer.Serialization.SerializationVersion +3 +SerializationVersion +3 +UInt16 +mMajor +1 +UInt16 +mMinor +0 +UInt16 +mPatch +1 +--TextFormatter: End of Object-- +--TextFormatter: End of Object-- +TypeRef:2 +2 +--TextFormatter: End of Object-- +End_Of_Object VNETStandaloneComponent 2 +2 +1 +1 +1 +1 +HistoryBegin +1 0 +HistoryEnd +FiltersBegin +Begin +3 0 0 +1 +MakeConfig + ( 0 ) +SymbSelHeaderMgrBegin +1 6 +0 1 200 0 0 +1 1 100 0 0 +2 0 100 0 0 +3 0 75 1 1 +5 1 75 1 1 +6 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 0 +0 +SymbSelHeaderMgrBegin +1 4 +0 1 200 0 0 +10 1 75 0 0 +11 1 100 0 0 +6 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 0 +0 +SymbSelHeaderMgrBegin +1 3 +0 1 200 0 0 +7 0 100 0 0 +6 1 200 0 0 +SymbSelHeaderMgrEnd +End + +FiltersEnd +0 0 +END_OF_WORKSPACE_MEMBER_DATA +END_OF_WORKSPACE_MEMBER +1 +0 +0 + +END_OF_WORKSPACE_DATA + +END_OF_WORKSPACE_CONFIGURATION +LinNMWindow 0 +LinScopeWindow 0 +CANBusyCalculation 1 +CANDefaultILActivation 1 +0 +1 +0 + +StartOfComment +EndOfComment +8.2 SP0 +VHILInterfaceMgrAnlyz 2 Begin_Of_Object +4 +0 +0 +2809 +0 +3030 +End_Of_Object VHILInterfaceMgrAnlyz 2 +0 +BasicDiagnosticsEditor 1 +VNETStandaloneComponent 2 Begin_Of_Object +1 +VNETControlBox 3 Begin_Of_Object +2 +VUniqueBox 4 Begin_Of_Object +1 +VBoxRoot 5 Begin_Of_Object +1 +3 +1 -1 0 1 0 0 -1 -1 204 115 1063 889 +Basisdiagnose +1 + +MDI_DOCK_INFO_END +5 +1 +6 +0 1 0 0 -1 -1 204 115 820 462 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 204 115 1063 889 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +0 0 +END_OF_DESKTOP_MEMBER +{C7BA2C34-75C6-4B9F-A244-6CAAD311B25A} +0 +End_Of_Object VBoxRoot 5 +1 -1 0 0 0 0 0 0 0 0 0 0 +End_Of_Object VUniqueBox 4 +0 +0 +End_Of_Object VNETControlBox 3 +31 +APPDIR Vector.CANalyzer.BasicDiagnosticsEditor.DLL +Vector.CANalyzer.BasicDiagnosticsEditor, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.BasicDiagnosticsEditor.VBasicDiagnosticsEditorWrapper +1 +1 +APPDIR CANoe_Net.DLL +CANoe_Net, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.ApplicationSerializer +2 +Application +2 +APPDIR Components\Vector.CANalyzer.Serialization\1.5.0.0\Vector.CANalyzer.Serialization.dll +Vector.CANalyzer.Serialization, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b273882a063429a6 +Vector.CANalyzer.Serialization.SerializationVersion +3 +SerializationVersion +3 +UInt16 +mMajor +1 +UInt16 +mMinor +0 +UInt16 +mPatch +0 +--TextFormatter: End of Object-- +--TextFormatter: End of Object-- +TypeRef:2 +2 +--TextFormatter: End of Object-- +End_Of_Object VNETStandaloneComponent 2 +0 +CalculateExtendedStatistics 1 +1 +VIPBGlobalSettings 2 Begin_Of_Object +1 +VIPBStackSetting 3 Begin_Of_Object +3 +0 +1 +VIPBAdapterSetting 4 Begin_Of_Object +4 +0 +4 +02:00:00:00:00:00 +End_Of_Serialized_Data 4 +4 +192.168.1.1 +End_Of_Serialized_Data 4 +4 +255.255.255.0 +End_Of_Serialized_Data 4 +4 +0.0.0.0 +End_Of_Serialized_Data 4 +1 +VPersistentIFv4Address 5 Begin_Of_Object +1 +VPersistentIFAddress 6 Begin_Of_Object +1 +VPersistentAddress 7 Begin_Of_Object +1 +End_Of_Object VPersistentAddress 7 +End_Of_Object VPersistentIFAddress 6 +5 +192.168.1.1 +End_Of_Serialized_Data 5 +5 +255.255.255.0 +End_Of_Serialized_Data 5 +End_Of_Object VPersistentIFv4Address 5 +0 +1 +11 + +1 +0 +0 +End_Of_Object VIPBAdapterSetting 4 +0 +1 +0 +End_Of_Object VIPBStackSetting 3 +End_Of_Object VIPBGlobalSettings 2 +1 +VIPBProtocolSettings 2 Begin_Of_Object +2 +6 +2147483648001 +13400-13402 +2147483648002 +13400 +2748779069440 +80, 8080 +2817498546179 +5555,5555 +10995116277765 + +10995116277766 + +3 +eth +Ethertype +9 +arp +1 +2054 +2054 +avtp +1 +8944 +8944 +ipv4 +1 +2048 +2048 +ipv6 +1 +34525 +34525 +mmrp +1 +35062 +35062 +msrp +1 +8938 +8938 +mvrp +1 +35061 +35061 +ptp +1 +35063 +35063 +rarp +1 +32821 +32821 +tcp +Port +5 +doip +1 +13400 +13400 +fsa +0 +http +2 +80 +80 +8080 +8080 +someip +0 +xcp +1 +5555 +5555 +udp +Port +7 +dhcpv4 +1 +67 +68 +doip +1 +13400 +13402 +fsa +0 +ntp +1 +123 +123 +pdumarshalling +0 +someip +0 +xcp +1 +5555 +5555 +End_Of_Object VIPBProtocolSettings 2 +25 +APPDIR CANoe_Net.DLL +CANoe_Net, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.SymbolSelectionListBox.Data.SymbolMRUList +1 +1 +Int32 +Count +0 +APPDIR Components\Vector.CANalyzer.Serialization\1.5.0.0\Vector.CANalyzer.Serialization.dll +Vector.CANalyzer.Serialization, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b273882a063429a6 +Vector.CANalyzer.Serialization.SerializationVersion +2 +SerializationVersion +2 +UInt16 +mMajor +1 +UInt16 +mMinor +0 +UInt16 +mPatch +0 +--TextFormatter: End of Object-- +--TextFormatter: End of Object-- +J1939::VGlobalSettings 2 Begin_Of_Object +2 +1 +0 +End_Of_Object J1939::VGlobalSettings 2 +VNETStandaloneComponent 2 Begin_Of_Object +1 +VNETControlBox 3 Begin_Of_Object +2 +VUniqueBox 4 Begin_Of_Object +1 +VBoxRoot 5 Begin_Of_Object +1 +3 +1 -1 0 1 0 0 0 0 199 118 800 474 +Startwerte +1 + +MDI_DOCK_INFO_END +5 +1 +6 +0 1 0 0 -1 -1 199 118 815 556 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 199 118 815 556 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +0 1 +1 +6 +0 1 0 0 -1 -1 199 118 815 556 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 199 118 815 556 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +END_OF_DESKTOP_MEMBER +{BF7B541D-D0C6-4C96-8143-1970174CCBEA} +0 +End_Of_Object VBoxRoot 5 +1 -1 0 0 0 0 0 0 0 0 0 0 +End_Of_Object VUniqueBox 4 +1 +1 -1 0 0 0 0 0 0 0 0 0 0 +0 +End_Of_Object VNETControlBox 3 +273 +APPDIR Vector.CANalyzer.StartValues.DLL +Vector.CANalyzer.StartValues, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.StartValues.StartValuesController +1 +1 +APPDIR CANoe_Net.DLL +CANoe_Net, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.ApplicationSerializer +2 +Application +2 +APPDIR Vector.CANalyzer.StartValues.DLL +Vector.CANalyzer.StartValues, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.StartValues.Model.StartValuesModel +3 +StartValuesModel +3 +APPDIR Vector.CANalyzer.StartValues.DLL +Vector.CANalyzer.StartValues, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.StartValues.GUI.GUISettings +4 +GUISettings +4 +APPDIR Components\Vector.CANalyzer.Serialization\1.5.0.0\Vector.CANalyzer.Serialization.dll +Vector.CANalyzer.Serialization, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b273882a063429a6 +Vector.CANalyzer.Serialization.SerializationVersion +5 +SerializationVersion +5 +UInt16 +mMajor +1 +UInt16 +mMinor +0 +UInt16 +mPatch +1 +--TextFormatter: End of Object-- +--TextFormatter: End of Object-- +TypeRef:2 +2 +--TextFormatter: End of Object-- +TypeRef:3 +3 +Boolean +SetValuesOnMeasurementStart +True + +mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 +System.Collections.Generic.List`1[[Vector.CANalyzer.StartValues.Model.StartValue, Vector.CANalyzer.StartValues, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null]] +6 +StartValues +6 +TypeRef:5 +SerializationVersion +7 +UInt16 +mMajor +1 +UInt16 +mMinor +0 +UInt16 +mPatch +0 +--TextFormatter: End of Object-- +--TextFormatter: End of Object-- +TypeRef:4 +4 + +mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 +System.Collections.Generic.List`1[[Vector.CANalyzer.StartValues.GUI.ColumnSettings, Vector.CANalyzer.StartValues, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null]] +7 +ColumnSettings +8 +TypeRef:5 +SerializationVersion +9 +UInt16 +mMajor +1 +UInt16 +mMinor +0 +UInt16 +mPatch +0 +--TextFormatter: End of Object-- +--TextFormatter: End of Object-- +TypeRef:6 +6 +Array +_items +10 +APPDIR Vector.CANalyzer.StartValues.DLL +Vector.CANalyzer.StartValues, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.StartValues.Model.StartValue +8 +1 +0 +-1 +Int32 +_size +0 +Int32 +_version +0 +--TextFormatter: End of Object-- +TypeRef:7 +8 +Array +_items +11 +APPDIR Vector.CANalyzer.StartValues.DLL +Vector.CANalyzer.StartValues, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.StartValues.GUI.ColumnSettings +9 +1 +0 +7 +TypeRef:9 +ArrayElement +12 +TypeRef:9 +ArrayElement +13 +TypeRef:9 +ArrayElement +14 +TypeRef:9 +ArrayElement +15 +TypeRef:9 +ArrayElement +16 +TypeRef:9 +ArrayElement +17 +TypeRef:9 +ArrayElement +18 + +mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 +System.Object +10 +ArrayElement +0 +Int32 +_size +7 +Int32 +_version +7 +--TextFormatter: End of Object-- +TypeRef:9 +12 +Int32 +mHandle +0 +Int32 +mDefaultWidth +25 +Int32 +mWidth +25 +Int32 +SortOrderInt +0 +TypeRef:5 +SerializationVersion +19 +UInt16 +mMajor +1 +UInt16 +mMinor +0 +UInt16 +mPatch +1 +--TextFormatter: End of Object-- +--TextFormatter: End of Object-- +TypeRef:9 +13 +Int32 +mHandle +1 +Int32 +mDefaultWidth +150 +Int32 +mWidth +150 +Int32 +SortOrderInt +0 +--TextFormatter: End of Object-- +TypeRef:9 +14 +Int32 +mHandle +2 +Int32 +mDefaultWidth +75 +Int32 +mWidth +75 +Int32 +SortOrderInt +0 +--TextFormatter: End of Object-- +TypeRef:9 +15 +Int32 +mHandle +3 +Int32 +mDefaultWidth +75 +Int32 +mWidth +75 +Int32 +SortOrderInt +0 +--TextFormatter: End of Object-- +TypeRef:9 +16 +Int32 +mHandle +4 +Int32 +mDefaultWidth +75 +Int32 +mWidth +75 +Int32 +SortOrderInt +0 +--TextFormatter: End of Object-- +TypeRef:9 +17 +Int32 +mHandle +5 +Int32 +mDefaultWidth +50 +Int32 +mWidth +50 +Int32 +SortOrderInt +0 +--TextFormatter: End of Object-- +TypeRef:9 +18 +Int32 +mHandle +6 +Int32 +mDefaultWidth +25 +Int32 +mWidth +25 +Int32 +SortOrderInt +0 +--TextFormatter: End of Object-- +End_Of_Object VNETStandaloneComponent 2 +VStandaloneLoggingUserConfig 2 Begin_Of_Object +2 +0 +VLogCfgData 3 Begin_Of_Object +5 +1 +1 +0 +1 +1 +0 +0 +0 +1024 +60 +1 +0 +1 +1 +0 +0 +0 +0 +0 +2 +0 +0 +3 +VLogExportPersister 4 Begin_Of_Object +3 +1416 +11060193 + 1 "C:\Users\Public\Documents\Vector\CANwin\Public\Documents\Vector\CANwin 8.0.918\templates" + 1 "C:\Users\Public\Documents\Vector\CANwin\Public\Documents\Vector\CANwin 8.0.918\templates" + 1 "" +0 +2 +1 +:: +, +. + +0 +2 +0 +0.10000000000000001 +6 +1 +0 +2 +19 +0.10000000000000001 +1 +0 +End_Of_Object VLogExportPersister 4 + +End_Of_Serialized_Data 3 + 1 "C:\Users\Public\Documents\Vector\CANwin\Public\Documents\demos\demo_can_cn\cansystemdemo\CANOE.blf" +0 +0 +1 +30 +80 +0 +End_Of_Object VLogCfgData 3 +0 +VAutoRunPreLoggingCaplBox 3 Begin_Of_Object +1 + 0 "" +0 +End_Of_Object VAutoRunPreLoggingCaplBox 3 +End_Of_Object VStandaloneLoggingUserConfig 2 +Mapping::VMappingManager 2 Begin_Of_Object +1 +0 +End_Of_Object Mapping::VMappingManager 2 +VTSystemControl 0 +TestConfigurationSetup +VTestConfigurationSetupWrapper 2 Begin_Of_Object +1 +VNETStandaloneComponent 3 Begin_Of_Object +1 +VNETControlBox 4 Begin_Of_Object +2 +VUniqueBox 5 Begin_Of_Object +1 +VBoxRoot 6 Begin_Of_Object +1 +3 +1 -1 0 1 0 0 0 0 201 120 806 481 +Testkonfigurationen für Test Units +1 + +MDI_DOCK_INFO_END +5 +1 +6 +0 1 0 0 -1 -1 201 120 806 481 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 201 120 806 481 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +0 1 +1 +6 +0 1 0 0 -1 -1 201 120 806 481 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 201 120 806 481 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +END_OF_DESKTOP_MEMBER +{33B9F808-ED25-4B57-A8AD-13752B7918E7} +0 +End_Of_Object VBoxRoot 6 +1 -1 0 0 0 0 0 0 0 0 0 0 +End_Of_Object VUniqueBox 5 +1 +1 -1 0 0 0 0 0 0 0 0 0 0 +1 +End_Of_Object VNETControlBox 4 +31 +APPDIR Vector.CANoe.TestConfigurationSetup.DLL +Vector.CANoe.TestConfigurationSetup, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANoe.TestConfigurationSetup.TestConfigurationSetup +1 +1 +APPDIR CANoe_Net.DLL +CANoe_Net, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.ApplicationSerializer +2 +Application +2 +APPDIR Components\Vector.CANalyzer.Serialization\1.5.0.0\Vector.CANalyzer.Serialization.dll +Vector.CANalyzer.Serialization, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b273882a063429a6 +Vector.CANalyzer.Serialization.SerializationVersion +3 +SerializationVersion +3 +UInt16 +mMajor +1 +UInt16 +mMinor +0 +UInt16 +mPatch +1 +--TextFormatter: End of Object-- +--TextFormatter: End of Object-- +TypeRef:2 +2 +--TextFormatter: End of Object-- +End_Of_Object VNETStandaloneComponent 3 +0 +End_Of_Object VTestConfigurationSetupWrapper 2 +AFDXVLStatisticSysVars +NAFDX::NStatisticsMonitor::VSVClient 2 Begin_Of_Object +1 +Begin_Of_Multi_Line_String +2 + + +End_Of_Serialized_Data 2 +End_Of_Object NAFDX::NStatisticsMonitor::VSVClient 2 +DocumentViewer +VDocumentViewerWrapper 2 Begin_Of_Object +1 +VNETStandaloneComponent 3 Begin_Of_Object +1 +VNETControlBox 4 Begin_Of_Object +2 +VUniqueBox 5 Begin_Of_Object +1 +VBoxRoot 6 Begin_Of_Object +1 +3 +1 -1 0 1 0 0 0 0 199 118 800 473 +Dokumente +1 + +MDI_DOCK_INFO_END +5 +1 +6 +0 1 0 0 -1 -1 199 118 800 473 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 199 118 800 473 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +0 1 +1 +6 +0 1 0 0 -1 -1 199 118 800 473 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 199 118 800 473 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +END_OF_DESKTOP_MEMBER +{453ACD9D-8489-41B4-8298-C715BADBED58} +0 +End_Of_Object VBoxRoot 6 +1 -1 0 0 0 0 0 0 0 0 0 0 +End_Of_Object VUniqueBox 5 +1 +1 -1 0 0 0 0 0 0 0 0 0 0 +1 +End_Of_Object VNETControlBox 4 +37 +APPDIR Vector.CANalyzer.DocumentViewer.DLL +Vector.CANalyzer.DocumentViewer, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.DocumentViewer.ComponentWrapper +1 +1 +APPDIR CANoe_Net.DLL +CANoe_Net, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.ApplicationSerializer +2 +Application +2 +Boolean +SplitterExpanded +True +Int32 +DocumentListHeight +150 +APPDIR Components\Vector.CANalyzer.Serialization\1.5.0.0\Vector.CANalyzer.Serialization.dll +Vector.CANalyzer.Serialization, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b273882a063429a6 +Vector.CANalyzer.Serialization.SerializationVersion +3 +SerializationVersion +3 +UInt16 +mMajor +1 +UInt16 +mMinor +0 +UInt16 +mPatch +0 +--TextFormatter: End of Object-- +--TextFormatter: End of Object-- +TypeRef:2 +2 +--TextFormatter: End of Object-- +End_Of_Object VNETStandaloneComponent 3 +0 +0 +End_Of_Object VDocumentViewerWrapper 2 +AutomationSequences +VAutomationSequencesWrapper 2 Begin_Of_Object +1 +VNETStandaloneComponent 3 Begin_Of_Object +1 +VNETControlBox 4 Begin_Of_Object +2 +VUniqueBox 5 Begin_Of_Object +1 +VBoxRoot 6 Begin_Of_Object +1 +3 +1 -1 0 1 0 0 0 0 199 118 800 473 +Automatisierungssequenzen +1 + +MDI_DOCK_INFO_END +5 +1 +6 +0 1 0 0 -1 -1 199 118 800 473 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 199 118 800 473 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +0 1 +1 +6 +0 1 0 0 -1 -1 199 118 800 473 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 199 118 800 473 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +END_OF_DESKTOP_MEMBER +{7EA440CD-851A-42EA-96CC-6B1D602C5666} +0 +End_Of_Object VBoxRoot 6 +1 -1 0 0 0 0 0 0 0 0 0 0 +End_Of_Object VUniqueBox 5 +1 +1 -1 0 0 0 0 0 0 0 0 0 0 +1 +End_Of_Object VNETControlBox 4 +34 +APPDIR Vector.CANalyzer.AutomationSequences.DLL +Vector.CANalyzer.AutomationSequences, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.AutomationSequences.ComponentWrapper +1 +1 +APPDIR CANoe_Net.DLL +CANoe_Net, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.ApplicationSerializer +2 +Application +2 +Int32 +SelectedTabPage +0 +APPDIR Components\Vector.CANalyzer.Serialization\1.5.0.0\Vector.CANalyzer.Serialization.dll +Vector.CANalyzer.Serialization, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b273882a063429a6 +Vector.CANalyzer.Serialization.SerializationVersion +3 +SerializationVersion +3 +UInt16 +mMajor +1 +UInt16 +mMinor +0 +UInt16 +mPatch +0 +--TextFormatter: End of Object-- +--TextFormatter: End of Object-- +TypeRef:2 +2 +--TextFormatter: End of Object-- +End_Of_Object VNETStandaloneComponent 3 +End_Of_Object VAutomationSequencesWrapper 2 +LogFileConverter +VLogFileConverter 2 Begin_Of_Object +1 +2 +VLogExportPersister 3 Begin_Of_Object +3 +1416 +11060193 + 1 "" + 1 "" + 1 "" +0 +2 +1 +:: +, +. + +0 +2 +0 +0.10000000000000001 +6 +1 +0 +2 +19 +0.10000000000000001 +1 +0 +End_Of_Object VLogExportPersister 3 + +End_Of_Serialized_Data 2 +End_Of_Object VLogFileConverter 2 +ThreadingSettings +VPersistentThreadingSettings 2 Begin_Of_Object +1 +3 +7 +End_Of_Object VPersistentThreadingSettings 2 +GlSignalSamplingSettings +GlLoggerConfig::VGlSignalSamplingSettings 2 Begin_Of_Object +1 +0 +End_Of_Object GlLoggerConfig::VGlSignalSamplingSettings 2 +NodeLayerConfiguration +32 +APPDIR Vector.CANoe.NodeLayer.Configuration.Persistency.DLL +Vector.CANoe.NodeLayer.Configuration.Persistency, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANoe.NodeLayer.Configuration.Persistency.Persistor +1 +1 +String +NodeLayers +7 + + 3 + + + + + +APPDIR Components\Vector.CANalyzer.Serialization\1.5.0.0\Vector.CANalyzer.Serialization.dll +Vector.CANalyzer.Serialization, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b273882a063429a6 +Vector.CANalyzer.Serialization.SerializationVersion +2 +SerializationVersion +2 +UInt16 +mMajor +1 +UInt16 +mMinor +0 +UInt16 +mPatch +0 +--TextFormatter: End of Object-- +--TextFormatter: End of Object-- +ILConfigurationComponent +VNETStandaloneComponent 2 Begin_Of_Object +1 +VNETControlBox 3 Begin_Of_Object +2 +VUniqueBox 4 Begin_Of_Object +1 +VBoxRoot 5 Begin_Of_Object +1 +3 +1 -1 0 1 0 0 0 0 199 118 800 473 + +1 + +MDI_DOCK_INFO_END +5 +1 +6 +0 1 0 0 -1 -1 199 118 800 473 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 199 118 800 473 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +0 1 +1 +6 +0 1 0 0 -1 -1 199 118 800 473 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 199 118 800 473 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +END_OF_DESKTOP_MEMBER +{1E635B15-7974-4CE8-89F6-CC4E9FA3EB1D} +0 +End_Of_Object VBoxRoot 5 +1 -1 0 0 0 0 0 0 0 0 0 0 +End_Of_Object VUniqueBox 4 +1 +1 -1 0 0 0 0 0 0 0 0 0 0 +1 +End_Of_Object VNETControlBox 3 +47 +APPDIR Vector.CANoe.ILConfiguration.DLL +Vector.CANoe.ILConfiguration, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANoe.ILConfiguration.ILConfigurationComponent +1 +1 +APPDIR Vector.CANoe.ILConfiguration.DLL +Vector.CANoe.ILConfiguration, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANoe.ILConfiguration.GUI.GUISettings +2 +GUISettings +2 +APPDIR Components\Vector.CANalyzer.Serialization\1.5.0.0\Vector.CANalyzer.Serialization.dll +Vector.CANalyzer.Serialization, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b273882a063429a6 +Vector.CANalyzer.Serialization.SerializationVersion +3 +SerializationVersion +3 +UInt16 +mMajor +1 +UInt16 +mMinor +0 +UInt16 +mPatch +0 +--TextFormatter: End of Object-- +--TextFormatter: End of Object-- +TypeRef:2 +2 +Boolean +DbcSettingsAvailable +False +TypeRef:3 +SerializationVersion +4 +UInt16 +mMajor +1 +UInt16 +mMinor +0 +UInt16 +mPatch +0 +--TextFormatter: End of Object-- +--TextFormatter: End of Object-- +End_Of_Object VNETStandaloneComponent 2 +End_Of_Object VGlobalConfiguration 1 diff --git a/Modbus-DLL/ModbusNet.cfg b/Modbus-DLL/ModbusNet.cfg new file mode 100644 index 0000000..0c78987 --- /dev/null +++ b/Modbus-DLL/ModbusNet.cfg @@ -0,0 +1,7343 @@ +;CANoe Version |4|7|1|55220 ModbusNet +Version: 8.2.40 Build 40 +32 PRO +10 +APPDIR Vector.CANoe.SignalGenerators.DLL +Vector.CANoe.SignalGenerators, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANoe.SignalGenerators.ComponentWrapper +1 +1.0.1 +APPDIR Vector.CANoe.Debugger.DLL +Vector.CANoe.Debugger, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANoe.Debugger.DebuggerComponent +2 +1.0.0 +VGlobalConfiguration 1 Begin_Of_Object +17 +VGlobalParameters 2 Begin_Of_Object +20 +0 +3,100,200,500 +1000000 1.000000 0 1000 1 1 0 0 1 1 1 0 0 0 1 0 0 0 +1 +0 +1 0 +ResetSignalsOnMeasurementStart=1 +VDatabaseContainerStreamer 3 Begin_Of_Object +5 +1 + 1 "include\DBC\generated.dbc" +Modbus + +1 11 +0 +1 +0 +1 + +End_Of_Object VDatabaseContainerStreamer 3 +0 +0 +1 + 1 "ModbusNet.cfg" +0 +0 +0 +1 +VPersistentEnvarSelectionData 3 Begin_Of_Object +1 +1 1 0 0 +~ +~ +End_Of_Object VPersistentEnvarSelectionData 3 +VPersistentExtensionData 3 Begin_Of_Object +3 +VPersistentRelation 4 Begin_Of_Object +1 +HookDLLActivations +1 +1 +End_Of_Object VPersistentRelation 4 +End_Of_Object VPersistentExtensionData 3 +VPersistentTreeStateInfo 3 Begin_Of_Object +1 +Version +5 +DialogBegin +1 +285 569 816 1103 +SymbolExplorerDialogBegin + +1 +HistoryBegin +1 0 +HistoryEnd +FiltersBegin +Begin +3 0 -1 +5 +Bus statistic signals + ( 1 ( 1 ( 0 ) 0 ) 0 ) +Busstatistik Signale + ( 1 ( 1 ( 0 ) 0 ) 0 ) +Modbus +( 2 ( 0 ) 0) +TE0001 + ( 2 ( 2 ( 0 ) 0 ) 0 ) +TE0002 + ( 2 ( 2 ( 0 ) 0 ) 0 ) +SymbSelHeaderMgrBegin +1 6 +0 1 278 0 0 +1 1 100 0 0 +2 1 100 0 0 +3 1 75 1 1 +5 1 200 1 1 +6 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 0 +-1 +SymbSelHeaderMgrBegin +1 4 +0 1 200 0 0 +10 1 100 0 0 +11 1 100 0 0 +6 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 0 +1 +TE0001 + ( 1 ( 0 ) 0 ) +SymbSelHeaderMgrBegin +1 4 +0 1 200 0 0 +1 1 100 0 0 +3 1 75 1 1 +6 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 0 +-1 +SymbSelHeaderMgrBegin +1 2 +0 1 200 0 0 +6 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 -1 +2 +Modbus + +System variables + ( 2 ( 0 ) 0 ) +SymbSelHeaderMgrBegin +1 1 +0 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 0 +-1 +SymbSelHeaderMgrBegin +1 1 +0 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 0 +-1 +SymbSelHeaderMgrBegin +1 2 +0 1 200 0 0 +6 1 100 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 0 +-1 +SymbSelHeaderMgrBegin +1 3 +0 1 200 0 0 +7 1 100 0 0 +6 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 0 +-1 +SymbSelHeaderMgrBegin +1 4 +0 1 200 0 0 +1 1 100 0 0 +3 1 75 1 1 +6 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 0 +-1 +SymbSelHeaderMgrBegin +1 4 +0 1 200 0 0 +1 1 100 0 0 +3 1 75 1 1 +6 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 0 +-1 +SymbSelHeaderMgrBegin +1 2 +0 1 200 0 0 +6 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 0 +-1 +SymbSelHeaderMgrBegin +1 2 +0 1 200 0 0 +6 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 8 +2 +Modbus + +Systemvariablen + ( 1 ( 1 ( 0 ) 2 ( 0 ) 0 ) 3 ( 1 ( 2 ( 3 ( 0 ) 0 ) 0 ) 0 ) 0 ) +SymbSelHeaderMgrBegin +1 4 +0 1 200 0 0 +10 1 75 0 0 +11 1 100 0 0 +6 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 0 +-1 +SymbSelHeaderMgrBegin +1 6 +0 1 200 0 0 +1 1 100 0 0 +2 1 100 0 0 +3 1 75 1 1 +5 1 80 1 1 +6 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 0 +-1 +SymbSelHeaderMgrBegin +1 3 +0 1 200 0 0 +12 1 100 0 0 +6 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 0 +-1 +SymbSelHeaderMgrBegin +1 2 +0 1 200 0 0 +13 1 75 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 0 +-1 +SymbSelHeaderMgrBegin +1 2 +0 1 200 0 0 +6 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 0 +-1 +SymbSelHeaderMgrBegin +1 1 +0 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 0 +-1 +SymbSelHeaderMgrBegin +1 2 +0 1 200 0 0 +13 1 75 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 0 +-1 +SymbSelHeaderMgrBegin +1 2 +0 1 200 0 0 +13 1 75 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 0 +-1 +SymbSelHeaderMgrBegin +1 1 +0 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 0 +-1 +SymbSelHeaderMgrBegin +1 1 +0 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 -1 +-1 +SymbSelHeaderMgrBegin +1 1 +0 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 -1 +-1 +SymbSelHeaderMgrBegin +1 2 +0 1 200 0 0 +13 1 75 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 -1 +-1 +SymbSelHeaderMgrBegin +1 1 +0 1 200 0 0 +SymbSelHeaderMgrEnd +End + +FiltersEnd +1 12 +SymbolExplorerDialogEnd + +DialogEnd +End_Of_Object VPersistentTreeStateInfo 3 +VPrintSettings 3 Begin_Of_Object +1 +0 0 0 0 0 +0 0 0 0 0 0 0 0 0 1 + 1 "" +@@@@ +Ausdruck Seite: {PAGE} {DATE} {TIME} +Lizenznehmer: {LICENSENAME} +Seriennummer: {LICENSENO} +@@@@ +0 + +End_Of_Object VPrintSettings 3 + 1 "..\..\..\..\..\Public\Documents\Vector\CANwin\Public\Documents\Vector\CANwin 8.0.918\templates\portlink1.pre" +1 +VPortlinkConfigurationStreamer 3 Begin_Of_Object +1 +1 +0 +0 +0 +END_OF_DRIVER +END_OF_PORT_CONFIGURATION_STREAM +End_Of_Object VPortlinkConfigurationStreamer 3 +0 +1 +VWTP20ObsParameters-1:0:0: +FlexRayTP2ObsParameters: 2 0x3 36 VFrTPParams 2 0 1 0 1 1 0 0 8 255 0 : +FlexRayTP2ObsParametersEnd +VDoIPObserverParams 3 Begin_Of_Object +1 +1 +End_Of_Object VDoIPObserverParams 3 +VISOTPParameters-1:active:onlyknown:interleave:firststmin:stmin:seqnr:unexpected:sender:extended:baseaddr=1024:rxmask=255:storedata:maxlen=65536 +EOO +DiagnosticsSettingsV1.1 +EOO +DiagnosticsSettingsV2.0 +EOO +0 +0 + V2 275 + 6 + V2 20 1 -1 36 + V2 1 1 -1 47 + V2 0 1 -1 40 + V2 2 1 -1 47 + V2 4 1 -1 33 + V2 5 3 0 24 1 24 2 24 + 3 +6 0 7 + V2 9 1 -1 33 + V2 7 1 -1 47 + V2 15 1 -1 35 + V2 27 2 0 24 1 24 + V2 12 1 -1 37 + V2 13 1 -1 37 + V2 14 1 -1 40 +7 0 2 + V2 23 1 -1 47 + V2 29 1 -1 47 +9 0 1 + V2 41 1 -1 47 +EndOf +VGlobalActionsStreamer 3 Begin_Of_Object +2 +2 +0 +End_Of_Object VGlobalActionsStreamer 3 +VEventSortingConfigStreamer 3 Begin_Of_Object +1 +0 +0 +0 +0 +0 +1 +0 +End_Of_Object VEventSortingConfigStreamer 3 +FlexRayOptionParameters: 1 1 1 0 1 1 : +FlexRayOptionParametersEnd +VCaplOptionsStreamer 3 Begin_Of_Object +1 +16 +1448 +0 +2001 +1 +2002 +0 +2005 +1 +2008 +1 +2013 +1 +2020 +1 +2032 +1 +2039 +0 +2040 +1 +2041 +1 +2054 +0 +2055 +1 +2065 +0 +2135 +1 +2201 +0 +1 +End_Of_Object VCaplOptionsStreamer 3 +VSVConfigurationStreamer 3 Begin_Of_Object +1 +77 + + +2 +1 + 1 "include\SysVars\generated.vsysvar" +1 + +End_Of_Object VSVConfigurationStreamer 3 +VOfflineBusStatisticSettings 3 Begin_Of_Object +1 +1 +1 +0 1 +1 0 +0 2 +1 0 +0 3 +1 0 +0 4 +1 0 +0 5 +1 0 +0 6 +1 0 +0 7 +1 0 +0 8 +1 0 +0 9 +1 0 +0 10 +1 0 +0 11 +1 0 +0 12 +1 0 +0 13 +1 0 +0 14 +1 0 +0 15 +1 0 +0 16 +1 0 +0 17 +1 0 +0 18 +1 0 +0 19 +1 0 +0 20 +1 0 +0 21 +1 0 +0 22 +1 0 +0 23 +1 0 +0 24 +1 0 +0 25 +1 0 +0 26 +1 0 +0 27 +1 0 +0 28 +1 0 +0 29 +1 0 +0 30 +1 0 +0 31 +1 0 +0 32 +1 0 +End_Of_Object VOfflineBusStatisticSettings 3 +VNETOptionsStreamer 3 Begin_Of_Object +1 +0 +End_Of_Object VNETOptionsStreamer 3 +0 +1 +VUserFileMgrAnlyz 3 Begin_Of_Object +1 +0 +End_Of_Object VUserFileMgrAnlyz 3 +VBasicDiagnosticStreamer 3 Begin_Of_Object +1 +0 +End_Of_Object VBasicDiagnosticStreamer 3 +VPersistentCLibraryOptions 3 Begin_Of_Object +1 +0 +End_Of_Object VPersistentCLibraryOptions 3 +NValueObjectDisplay::VNameDisplaySettings 3 Begin_Of_Object +3 +12 +0 +4 +1 +6 +2 +4 +3 +4 +4 +1 +5 +1 +6 +4 +7 +4 +8 +4 +9 +6 +10 +4 +11 +4 +12 +0 +1 +1 +1 +2 +1 +3 +1 +4 +1 +5 +1 +6 +1 +7 +1 +8 +1 +9 +1 +10 +1 +11 +1 +12 +0 +0 +1 +0 +2 +0 +3 +0 +4 +0 +5 +0 +6 +0 +7 +0 +8 +0 +9 +0 +10 +0 +11 +0 +0 +1 +9 +128 +13 +Ethernet +Ethernet::%NODE_TITLE% +Ethernet::%NODE_TITLE%::Data +Ethernet::%TITLE% +Ethernet::%TITLE%::Data +Ethernet::<< default >> +Ethernet::<< default >>::Config +Ethernet::ModbusClientUDP.can +Ethernet::ModbusClientUDP.can::Data +sysvar +sysvar::Ethernet +sysvar::Ethernet::<< default >> +sysvar::Ethernet::<< default >>::Config +End_Of_Object NValueObjectDisplay::VNameDisplaySettings 3 +ConfigurationSavedByCANwBeginner 0 +VGlobalExportSettings 3 Begin_Of_Object +2 +2 +1 +0 +0 +6 +0 +0.10000000000000001 +2 +0 +0.10000000000000001 +2 +19 +0 +1 +0 +1 +0 +:: +, +. + 1 "" +0 +End_Of_Object VGlobalExportSettings 3 +0 +VPersistentRTFilterOptions 3 Begin_Of_Object +2 +0 +0 +0 +0 +End_Of_Object VPersistentRTFilterOptions 3 +VPersistentRTTxBufferOptions 3 Begin_Of_Object +2 +1 +1 +500 +End_Of_Object VPersistentRTTxBufferOptions 3 +VPersistentRTIRQReductionOptions 3 Begin_Of_Object +2 +500 +End_Of_Object VPersistentRTIRQReductionOptions 3 +VPersistentDebuggerOptions 3 Begin_Of_Object +1 +64 +10000 +End_Of_Object VPersistentDebuggerOptions 3 +7 +0 +0 +0 +0 +0 +0 +0 +0 +1 +VAFDXGlobalSettings 3 Begin_Of_Object +1 +1000 +0 +End_Of_Object VAFDXGlobalSettings 3 +VPersistentRTCanErrorFrameOptions 3 Begin_Of_Object +1 +0 +0 +End_Of_Object VPersistentRTCanErrorFrameOptions 3 +1 +ILConfiguration::VProxyManager 3 Begin_Of_Object +1 +0 +0 +End_Of_Object ILConfiguration::VProxyManager 3 +End_Of_Object VGlobalParameters 2 +VDesktopManager 2 Begin_Of_Object +1 +0 +2 +VDesktop 3 Begin_Of_Object +1 +Setup +{78F025EB-D99B-4037-AADA-2489DA9362EC} +Begin_Of_Multi_Line_String +3 + +End_Of_Serialized_Data 3 +End_Of_Object VDesktop 3 +VDesktop 3 Begin_Of_Object +1 +Measurement +{9FC02A21-7124-467F-9E38-4ABD1D96597B} +Begin_Of_Multi_Line_String +3 + +End_Of_Serialized_Data 3 +End_Of_Object VDesktop 3 +4294967295 +4294967295 +4294967295 +End_Of_Object VDesktopManager 2 +0 +VGBAnlyzBox 2 Begin_Of_Object +2 +VGrMnBox 3 Begin_Of_Object +1 +VUniqueBox 4 Begin_Of_Object +1 +VBoxRoot 5 Begin_Of_Object +1 +3 +0 2 0 3 -1 -1 -1 -1 22 22 1522 983 + +1 + +MDI_DOCK_INFO_END +5 +1 +6 +0 1 -1 -1 -1 -1 1 1 538 543 +6 1 300 180 0 0 381 598 300 180 0 61440 1 20372 1904 0 0 0 0 260 0 0 0 5 -2 32767 1 59421 5 -2 386 592 4 1151 79 1 0 0 0 1 381 0 59421 1 +END_OF_DOCK_INFO +0 +2 +0 +0 +1 +1582 856 +END_OF_DESKTOP_DATA +6 +0 1 -1 -1 -1 -1 22 22 1522 983 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +2 +0 +0 +1 +999 592 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +0 1 +1 +6 +0 1 -1 -1 -1 -1 1 1 498 425 +6 0 300 180 0 0 438 862 300 180 0 61440 1 20356 1904 0 0 0 0 260 0 0 0 5 -2 32767 1 59421 5 -2 443 860 4 1151 79 1 0 0 0 1 438 0 59421 1 +END_OF_DOCK_INFO +1 +0 +0 +0 +1 +1007 434 +END_OF_DESKTOP_DATA +6 +0 1 -1 -1 -1 -1 22 22 1522 983 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +END_OF_DESKTOP_MEMBER +{49714911-9568-49CC-A9CE-3B0905658C4A} +0 +End_Of_Object VBoxRoot 5 +0 0 0 1 -1 -1 -1 -1 1 1 498 425 +End_Of_Object VUniqueBox 4 +End_Of_Object VGrMnBox 3 +VDOLocalInfoStruct 3 Begin_Of_Object +3 +1 +64 +VDAOGBFunctionBlock 4 Begin_Of_Object +1 +1 +0 +TABPredecessor: +0 +TABSuccessor: +34 +VPlugConf 5 Begin_Of_Object +1 +End_Of_Object VPlugConf 5 +VDAOSwitch 5 Begin_Of_Object +1 +34 +0 +TABPredecessor: +1 +TABSuccessor: +35 +VDAOGBHSStd 6 Begin_Of_Object +1 +35 +0 +0 0 +TABPredecessor: +34 +TABSuccessor: +37 +VDODynamicLine 7 Begin_Of_Object +1 +36 +0 +0 +VDOFRamification 8 Begin_Of_Object +1 +37 +0 +TABPredecessor: +35 +TABSuccessor: +39 +5 +VDORefinement 9 Begin_Of_Object +1 +38 +0 +2 +VDAOGBHSStd 10 Begin_Of_Object +1 +39 +0 +0 0 +TABPredecessor: +37 +TABSuccessor: +41 +VDODynamicLine 11 Begin_Of_Object +1 +40 +0 +0 +VDAOGBFunctionBlock 12 Begin_Of_Object +1 +41 +0 +TABPredecessor: +39 +TABSuccessor: +44 +VBusStatisticConfiguration 13 Begin_Of_Object +1 +VBusStatisticBox 14 Begin_Of_Object +1 +VBoxRoot 15 Begin_Of_Object +1 +1 +1 0 0 1 -1 -1 -1 -1 0 350 662 692 +Bus statistic +1 + +MDI_DOCK_INFO_END +5 +1 +6 +0 1 -1 -1 -1 -1 0 350 662 692 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +0 +0 +0 +1 +1188 696 +END_OF_DESKTOP_DATA +6 +0 1 -1 -1 -1 -1 780 375 999 611 +6 0 1010 180 0 0 300 180 300 180 0 61440 1 36740 1904 0 0 0 0 261 0 0 0 1 5 300 1 59422 1 5 1011 185 8192 802 433 1 1 0 0 1 180 0 59422 1 +END_OF_DOCK_INFO +1 +0 +0 +0 +1 +1596 747 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +0 0 +END_OF_DESKTOP_MEMBER +{652EDEC7-8CB1-4A6F-B326-5D0CF875F481} +0 +End_Of_Object VBoxRoot 15 +8000 +2 +110 +100 +End_Of_Object VBusStatisticBox 14 +End_Of_Object VBusStatisticConfiguration 13 +VDOLine 13 Begin_Of_Object +1 +42 +0 +130 0 +NULL +End_Of_Object VDOLine 13 + +EndOfComment +0 +1 +End_Of_Object VDAOGBFunctionBlock 12 +End_Of_Object VDODynamicLine 11 +End_Of_Object VDAOGBHSStd 10 +NULL +End_Of_Object VDORefinement 9 +VDORefinement 9 Begin_Of_Object +1 +43 +0 +5 +VDAOGBHSStd 10 Begin_Of_Object +1 +44 +0 +0 0 +TABPredecessor: +41 +TABSuccessor: +46 +VDODynamicLine 11 Begin_Of_Object +1 +45 +0 +0 +VDAOGBFunctionBlock 12 Begin_Of_Object +1 +46 +0 +TABPredecessor: +44 +TABSuccessor: +49 +VGraphBoxConf 13 Begin_Of_Object +1 +VNETGraphBox 14 Begin_Of_Object +1 +VNETControlBox 15 Begin_Of_Object +2 +VUniqueBox 16 Begin_Of_Object +1 +VBoxRoot 17 Begin_Of_Object +1 +1 +1 1 0 1 -1 -1 -1 -1 1 375 779 615 +Graphic +1 + +MDI_DOCK_INFO_END +5 +1 +6 +0 1 0 0 -1 -1 196 115 786 460 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +1 +0 +0 +0 +999 591 +END_OF_DESKTOP_DATA +6 +0 1 -1 -1 -1 -1 1 375 779 615 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +1 +1 +0 +0 +1 +1596 747 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +0 1 +1 +6 +0 1 0 0 -1 -1 196 115 786 460 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 196 115 786 460 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +END_OF_DESKTOP_MEMBER +{74B29E4F-CCEF-4429-ABCA-E5B398A25F47} +0 +End_Of_Object VBoxRoot 17 +1 -1 0 0 0 0 0 0 0 0 0 0 +End_Of_Object VUniqueBox 16 +1 +1 -1 0 0 0 0 0 0 0 0 0 0 +0 +End_Of_Object VNETControlBox 15 +End_Of_Object VNETGraphBox 14 +50 +APPDIR Vector.CANalyzer.Graphic.DLL +Vector.CANalyzer.Graphic, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.Graphic.ComponentWrapper +1 +1 +APPDIR CANoe_Net.DLL +CANoe_Net, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.ApplicationSerializer +2 +Application +2 +Boolean +Expanded +True +Int32 +SplitterWidth +237 +Int32 +SplitterHeight +237 +APPDIR Vector.CANalyzer.Graphic.DLL +Vector.CANalyzer.Graphic, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.Graphic.Position +3 +LegendPosition +3 +Int32 +value__ +0 +--TextFormatter: End of Object-- +APPDIR Components\Vector.CANalyzer.Serialization\1.5.0.0\Vector.CANalyzer.Serialization.dll +Vector.CANalyzer.Serialization, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b273882a063429a6 +Vector.CANalyzer.Serialization.SerializationVersion +4 +SerializationVersion +4 +UInt16 +mMajor +1 +UInt16 +mMinor +0 +UInt16 +mPatch +0 +--TextFormatter: End of Object-- +--TextFormatter: End of Object-- +TypeRef:2 +2 +--TextFormatter: End of Object-- +VSignalObjectStreamer 14 Begin_Of_Object +1 +4 +VPredefinedSignalObject 15 Begin_Of_Object +1 +VHostSignal 16 Begin_Of_Object +2 +0 +Eth 1::Rx Bus load +0 +End_Of_Object VHostSignal 16 +15 +ValueObjectConfiguration::VConfiguredPredefinedSignal 16 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 17 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 18 Begin_Of_Object +1 +VConfigBusStatistics 19 Begin_Of_Object +1 +VConfigBusEvent 20 Begin_Of_Object +1 +VConfigEvent 21 Begin_Of_Object +1 +End_Of_Object VConfigEvent 21 +1 +11 +End_Of_Object VConfigBusEvent 20 +End_Of_Object VConfigBusStatistics 19 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 18 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 17 +16 +VBusStatisticSignal 17 Begin_Of_Object +1 +VPredefinedSignalImpl 18 Begin_Of_Object +1 +1 +% +Eth 1::Rx Bus load +11 +6 +End_Of_Object VPredefinedSignalImpl 18 +1 +0 +End_Of_Object VBusStatisticSignal 17 + +End_Of_Serialized_Data 16 +End_Of_Object ValueObjectConfiguration::VConfiguredPredefinedSignal 16 + +End_Of_Serialized_Data 15 +End_Of_Object VPredefinedSignalObject 15 +[MeasurementObject] +Eth 1::Rx Bus load +"%" 1 800080 0. 100. -100. 100. 20 -5 0 0 36000000 1 1 0 0 +VPredefinedSignalObject 15 Begin_Of_Object +1 +VHostSignal 16 Begin_Of_Object +2 +0 +Eth 1::Tx Bus load +0 +End_Of_Object VHostSignal 16 +15 +ValueObjectConfiguration::VConfiguredPredefinedSignal 16 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 17 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 18 Begin_Of_Object +1 +VConfigBusStatistics 19 Begin_Of_Object +1 +VConfigBusEvent 20 Begin_Of_Object +1 +VConfigEvent 21 Begin_Of_Object +1 +End_Of_Object VConfigEvent 21 +1 +11 +End_Of_Object VConfigBusEvent 20 +End_Of_Object VConfigBusStatistics 19 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 18 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 17 +16 +VBusStatisticSignal 17 Begin_Of_Object +1 +VPredefinedSignalImpl 18 Begin_Of_Object +1 +2 +% +Eth 1::Tx Bus load +11 +6 +End_Of_Object VPredefinedSignalImpl 18 +1 +0 +End_Of_Object VBusStatisticSignal 17 + +End_Of_Serialized_Data 16 +End_Of_Object ValueObjectConfiguration::VConfiguredPredefinedSignal 16 + +End_Of_Serialized_Data 15 +End_Of_Object VPredefinedSignalObject 15 +[MeasurementObject] +Eth 1::Tx Bus load +"%" 1 80 0. 100. -100. 100. 20 -5 0 0 36000000 1 1 0 0 +VPredefinedSignalObject 15 Begin_Of_Object +1 +VHostSignal 16 Begin_Of_Object +2 +0 +Eth 1::Rx Packet rate +0 +End_Of_Object VHostSignal 16 +15 +ValueObjectConfiguration::VConfiguredPredefinedSignal 16 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 17 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 18 Begin_Of_Object +1 +VConfigBusStatistics 19 Begin_Of_Object +1 +VConfigBusEvent 20 Begin_Of_Object +1 +VConfigEvent 21 Begin_Of_Object +1 +End_Of_Object VConfigEvent 21 +1 +11 +End_Of_Object VConfigBusEvent 20 +End_Of_Object VConfigBusStatistics 19 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 18 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 17 +16 +VBusStatisticSignal 17 Begin_Of_Object +1 +VPredefinedSignalImpl 18 Begin_Of_Object +1 +7 +pkt/s +Eth 1::Rx Packet rate +11 +6 +End_Of_Object VPredefinedSignalImpl 18 +1 +0 +End_Of_Object VBusStatisticSignal 17 + +End_Of_Serialized_Data 16 +End_Of_Object ValueObjectConfiguration::VConfiguredPredefinedSignal 16 + +End_Of_Serialized_Data 15 +End_Of_Object VPredefinedSignalObject 15 +[MeasurementObject] +Eth 1::Rx Packet rate +"pkt/s" 1 800000 0. 10000. -100. 100. 2000 -5 0 0 36000000 1 1 0 0 +VPredefinedSignalObject 15 Begin_Of_Object +1 +VHostSignal 16 Begin_Of_Object +2 +0 +Eth 1::Tx Packet rate +0 +End_Of_Object VHostSignal 16 +15 +ValueObjectConfiguration::VConfiguredPredefinedSignal 16 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 17 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 18 Begin_Of_Object +1 +VConfigBusStatistics 19 Begin_Of_Object +1 +VConfigBusEvent 20 Begin_Of_Object +1 +VConfigEvent 21 Begin_Of_Object +1 +End_Of_Object VConfigEvent 21 +1 +11 +End_Of_Object VConfigBusEvent 20 +End_Of_Object VConfigBusStatistics 19 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 18 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 17 +16 +VBusStatisticSignal 17 Begin_Of_Object +1 +VPredefinedSignalImpl 18 Begin_Of_Object +1 +8 +pkt/s +Eth 1::Tx Packet rate +11 +6 +End_Of_Object VPredefinedSignalImpl 18 +1 +0 +End_Of_Object VBusStatisticSignal 17 + +End_Of_Serialized_Data 16 +End_Of_Object ValueObjectConfiguration::VConfiguredPredefinedSignal 16 + +End_Of_Serialized_Data 15 +End_Of_Object VPredefinedSignalObject 15 +[MeasurementObject] +Eth 1::Tx Packet rate +"pkt/s" 1 808000 0. 10000. -100. 100. 2000 -5 0 0 36000000 1 1 0 0 +[GraphWindow:x_x_x_x_x_x_WindowBk_Grid_AxisBk_XAxisFr_YAxisFr_x_x_x_x_x_x] +0 100000 100000 200000 36000000 1 ffffff b2b2b2 ffffff 0 0 0 0 1 1 1 0 +0 30 5000 +0 +0 100 +0 +16777215 +0 +2 +0 +1 +41943040 +0 +1416 25200245 +Grafik-Fenster + 1 "" +0 2 1 +:: +, + +4 +. +0 2 0 +0.1 +6 + 1 "" +1 0 +2 19 +0.1 +1 +[End_of_Export] +12 +18 16 143 20 18 55 55 55 55 55 57 13 +237 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +11711154 +32768 +0 +0 +0 +0 +0 +0 +0 +0 +0 +128 +0 10 +1 +2 +1 +0 1 +Eth 1::Bus load [%] +Eth 1::Bus load [%] +8388736 0 +1 +2 3 +Eth 1::Packet rate [pkt/s] +Eth 1::Packet rate [pkt/s] +8388608 0 +0 + 1 "..\..\..\..\..\Public\Documents\Vector\CANwin\Public\Documents\demos\demo_can_cn\cansystemdemo\CANoe_Grafik_2.mdf" +0 0 0 0 0 0 0 0 +1416 11060193 + 1 "" + 1 "" +0 2 1 +:: +, + +4 +. +0 2 0 +0.1 +6 + 1 "" +1 0 +2 19 +0.1 +1 +[End_of_Export] +0 1024 0 60 +1 1 +0 0 0 0 0 2 0 0 0 +0 128 +527 343 1256 778 +1 40 20 15 +0 -1 +0 +1 +1 +1 +0 +0 +0 +1 12 +1 1 1 0 0 0 0 0 0 0 0 0 +0 1 2 3 4 5 6 7 8 9 10 11 +18 16 163 55 55 55 55 55 57 57 82 30 +237 237 +End_Of_Object VSignalObjectStreamer 14 +End_Of_Object VGraphBoxConf 13 +VDOLine 13 Begin_Of_Object +1 +47 +0 +130 0 +NULL +End_Of_Object VDOLine 13 + +EndOfComment +0 +1 +End_Of_Object VDAOGBFunctionBlock 12 +End_Of_Object VDODynamicLine 11 +End_Of_Object VDAOGBHSStd 10 +NULL +End_Of_Object VDORefinement 9 +VDORefinement 9 Begin_Of_Object +1 +48 +0 +7 +VDAOGBHSStd 10 Begin_Of_Object +1 +49 +0 +0 0 +TABPredecessor: +46 +TABSuccessor: +51 +VDODynamicLine 11 Begin_Of_Object +1 +50 +0 +0 +VDAOGBFunctionBlock 12 Begin_Of_Object +1 +51 +0 +TABPredecessor: +49 +TABSuccessor: +54 +VTraceConfiguration 13 Begin_Of_Object +1 +VTraceControlCfg 14 Begin_Of_Object +8 +VTraceSearchCfg 15 Begin_Of_Object +1 +VEvCondBlock 16 Begin_Of_Object +1 +VEvCondGroup 17 Begin_Of_Object +2 +VEvCondPrimitive 18 Begin_Of_Object +1 +1 +End_Of_Object VEvCondPrimitive 18 +1 +0 +0 +End_Of_Object VEvCondGroup 17 +End_Of_Object VEvCondBlock 16 +0 +End_Of_Object VTraceSearchCfg 15 +VTraceFilterCfg 15 Begin_Of_Object +1 +0 +1 +VTraceAnalysisFilterGroup 16 Begin_Of_Object +2 +0 +Filter Group 0 +2 +VTraceAnalysisSingleFilter 17 Begin_Of_Object +3 +0 +1 +0 +End_Of_Object VTraceAnalysisSingleFilter 17 +VTraceAnalysisSingleFilter 17 Begin_Of_Object +3 +0 +0 +0 +End_Of_Object VTraceAnalysisSingleFilter 17 +1 +End_Of_Object VTraceAnalysisFilterGroup 16 +End_Of_Object VTraceFilterCfg 15 +1 +1 +0 +0 +28 +0 +0 +1 +1 +14 +ver=2: FF FT FT FT FT FT +End_Of_Serialized_Data 14 +2 +0 +3 +0 +4 +0 +5 +0 +6 +1 +14 +ver=2: FT TF TF FF FT FF;F T Config;F T Ethernet1;F T GLLogger;T F _Statistics +End_Of_Serialized_Data 14 +7 +0 +8 +0 +9 +0 +10 +0 +11 +0 +12 +0 +13 +0 +14 +1 +14 +ver=3: FF FT FT FT +End_Of_Serialized_Data 14 +15 +0 +16 +0 +17 +0 +18 +0 +19 +0 +20 +0 +21 +1 +14 +ver=2: FT FT FT FT +End_Of_Serialized_Data 14 +22 +1 +14 +ver=2: FF +End_Of_Serialized_Data 14 +23 +1 +14 +ver=2: FF +End_Of_Serialized_Data 14 +24 +1 +14 +ver=2: FF +End_Of_Serialized_Data 14 +25 +0 +26 +1 +14 +ver=2: FF +End_Of_Serialized_Data 14 +27 +1 +14 +ver=2: FF +End_Of_Serialized_Data 14 +0 +2 +VTraceColumnConfiguration 15 Begin_Of_Object +3 +1 +Initial +82 +VTNColumnData 16 Begin_Of_Object +3 +0 +100 +0 +Time +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +1 +34 +1 +Chn +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +2 +92 +-1 +ID +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +3 +130 +-1 +Name +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +4 +170 +-1 +ID / name +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +5 +22 +2 +Dir +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +6 +45 +9 +Payload Length +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +7 +420 +10 +Payload Data +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +8 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +9 +102 +3 +Source MAC ID +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +10 +116 +4 +Destination MAC ID +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +11 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +12 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +13 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +14 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +15 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +16 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +17 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +18 +37 +5 +Ethernet Type +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +19 +65 +-1 +Ethernet Size +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +20 +270 +-1 +Ethernet Data +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +21 +30 +7 +Protocol +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +22 +83 +8 +Protocol Info +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +23 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +24 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +25 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +26 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +27 +43 +6 +Packet Length +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +28 +110 +-1 +HH:MM:SS +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +29 +85 +-1 +Time difference +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +30 +50 +-1 +Bustype +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +31 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +32 +50 +-1 +Bus +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +33 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +34 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +35 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +36 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +37 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +38 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +39 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +40 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +41 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +42 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +43 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +44 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +45 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +46 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +47 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +48 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +49 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +50 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +51 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +52 +10 +-1 + +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +53 +10 +-1 + +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +54 +50 +-1 +Namespace +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +55 +120 +-1 +Diff time (ref. event) +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +56 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +57 +100 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +58 +100 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +59 +120 +-1 +Date / Time +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +60 +50 +-1 +Receive Node +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +61 +50 +-1 +VL No. +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +62 +200 +-1 +Sub-VL ID +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +63 +50 +-1 +Transmitter +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +64 +200 +-1 +Receiver +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +65 +50 +-1 +Tx Port ID +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +66 +50 +-1 +Rx Port ID +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +67 +65 +-1 +Port Char. +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +68 +50 +-1 +IP Frag. +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +69 +150 +-1 +Master Port Name +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +70 +65 +-1 +BAG +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +71 +65 +-1 +Seq. No. +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +72 +50 +-1 +Line +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +73 +50 +-1 +Interface ID +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +74 +50 +-1 +Equipment +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +75 +50 +-1 +Partition +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +76 +50 +-1 +BRS +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +77 +50 +-1 +ESI +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +78 +45 +-1 +Data length +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +79 +10 +-1 + +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +80 +10 +-1 + +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +81 +10 +-1 + +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +End_Of_Object VTraceColumnConfiguration 15 +VTraceColumnConfiguration 15 Begin_Of_Object +3 +21 +Ethernet IP/UDP/TCP Layout 1 +82 +VTNColumnData 16 Begin_Of_Object +3 +0 +112 +0 +Time +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +1 +39 +-1 +Chn +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +2 +92 +-1 +ID +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +3 +95 +-1 +Name +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +4 +170 +-1 +ID / Name +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +5 +23 +1 +Dir +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +6 +29 +7 +Payload Length +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +7 +433 +9 +Payload Data +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +8 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +9 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +10 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +11 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +12 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +13 +100 +-1 +Frame Duration +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +14 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +15 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +16 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +17 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +18 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +19 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +20 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +21 +25 +-1 +Protocol +1 +0 +1 +1 +0 +tcp +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +22 +195 +5 +Protocol Info +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +23 +66 +2 +Source IP +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +24 +90 +3 +Destination IP +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +25 +46 +4 +Source Port +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +26 +90 +-1 +Destination Port +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +27 +28 +6 +Packet Length +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +28 +110 +-1 +d:hh:mm:ss +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +29 +85 +-1 +Diff Time +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +30 +50 +-1 +Bustype +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +31 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +32 +50 +-1 +Bus +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +33 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +34 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +35 +100 +-1 +Start of Frame +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +36 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +37 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +38 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +39 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +40 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +41 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +42 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +43 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +44 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +45 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +46 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +47 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +48 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +49 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +50 +185 +8 +Payload Data ASCII +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +51 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +52 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +53 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +54 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +55 +120 +-1 +Diff Time (Ref. Event) +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +56 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +57 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +58 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +59 +120 +-1 +Date and Time +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +60 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +61 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +62 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +63 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +64 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +65 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +66 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +67 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +68 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +69 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +70 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +71 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +72 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +73 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +74 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +75 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +76 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +77 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +78 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +79 +50 +-1 +--- +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +80 +10 +-1 + +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +VTNColumnData 16 Begin_Of_Object +3 +81 +10 +-1 + +1 +0 +1 +0 +End_Of_Object VTNColumnData 16 +End_Of_Object VTraceColumnConfiguration 15 +1 +0 +VTraceControlFixedModeExpansionItems 15 Begin_Of_Object +3 +0 +End_Of_Object VTraceControlFixedModeExpansionItems 15 +14 +J:\HsKA\NB7\Bachelorthesis\CANoe\Modbus +End_Of_Serialized_Data 14 +14 +Trace Window +End_Of_Serialized_Data 14 +14 +J:\Public\Documents\Vector\CANwin\Public\Documents\Vector\CANwin 8.0.918\templates +End_Of_Serialized_Data 14 +0 +0 +1 +1 +14 +VLogExportPersister 15 Begin_Of_Object +3 +1416 +44616677 +Trace Window + 1 "..\..\..\..\..\Public\Documents\Vector\CANwin\Public\Documents\Vector\CANwin 8.0.918\templates" + 1 "" +0 +2 +1 +:: +, +. + +0 +2 +0 +0.10000000000000001 +6 +1 +0 +2 +19 +0.10000000000000001 +1 +0 +End_Of_Object VLogExportPersister 15 + +End_Of_Serialized_Data 14 +1 +0 +0 +290 +1 +160 + 1 "" +End_Of_Object VTraceControlCfg 14 +VNETTraceControlBox 14 Begin_Of_Object +1 +VNETControlBox 15 Begin_Of_Object +2 +VUniqueBox 16 Begin_Of_Object +1 +VBoxRoot 17 Begin_Of_Object +1 +1 +1 3 0 1 -1 -1 -1 -1 -15 105 1285 623 + +1 + +MDI_DOCK_INFO_END +5 +1 +6 +0 1 -1 -1 -1 -1 -15 105 1285 623 +6 1 0 0 0 0 0 0 1192 514 0 0 1 36756 1904 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 111 442 1 0 0 0 1 281 0 59422 1 +END_OF_DOCK_INFO +1 +3 +0 +0 +1 +1188 696 +END_OF_DESKTOP_DATA +6 +0 1 -1 -1 -1 -1 22 7 1450 571 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +1 +2 +0 +0 +1 +1596 747 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +0 0 +END_OF_DESKTOP_MEMBER +{28077F35-C142-4ACC-B040-1BF0AB026C11} +0 +End_Of_Object VBoxRoot 17 +1 -1 0 0 0 0 0 0 0 0 0 0 +End_Of_Object VUniqueBox 16 +0 +0 +End_Of_Object VNETControlBox 15 +End_Of_Object VNETTraceControlBox 14 +End_Of_Object VTraceConfiguration 13 +VDOLine 13 Begin_Of_Object +1 +52 +0 +130 0 +NULL +End_Of_Object VDOLine 13 + +EndOfComment +0 +1 +End_Of_Object VDAOGBFunctionBlock 12 +End_Of_Object VDODynamicLine 11 +End_Of_Object VDAOGBHSStd 10 +NULL +End_Of_Object VDORefinement 9 +VDORefinement 9 Begin_Of_Object +1 +53 +0 +6 +VDAOGBHSStd 10 Begin_Of_Object +1 +54 +0 +1 0 +TABPredecessor: +51 +TABSuccessor: +56 +VDODynamicLine 11 Begin_Of_Object +1 +55 +0 +0 +VDAOGBFunctionBlock 12 Begin_Of_Object +1 +56 +0 +TABPredecessor: +54 +TABSuccessor: +58 +VTriggerConfiguration 13 Begin_Of_Object +2 +VMigratedGenericConfiguration 14 Begin_Of_Object +1 +VTriggerCfgData 15 Begin_Of_Object +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +200000 +1 +1 +1 +1 +1000 +VEvCondBlock 16 Begin_Of_Object +1 +VEvCondGroup 17 Begin_Of_Object +2 +VEvCondPrimitive 18 Begin_Of_Object +1 +1 +End_Of_Object VEvCondPrimitive 18 +1 +0 +0 +End_Of_Object VEvCondGroup 17 +End_Of_Object VEvCondBlock 16 +VEvCondBlock 16 Begin_Of_Object +1 +VEvCondGroup 17 Begin_Of_Object +2 +VEvCondPrimitive 18 Begin_Of_Object +1 +1 +End_Of_Object VEvCondPrimitive 18 +1 +0 +0 +End_Of_Object VEvCondGroup 17 +End_Of_Object VEvCondBlock 16 +0 +0 +0 +116 +0 +End_Of_Object VTriggerCfgData 15 +End_Of_Object VMigratedGenericConfiguration 14 +VTriggerBox 14 Begin_Of_Object +1 +VBoxRoot 15 Begin_Of_Object +1 +1 +1 -1 0 1 0 0 0 0 233 253 918 769 + +1 + +MDI_DOCK_INFO_END +5 +1 +6 +0 1 0 0 -1 -1 233 253 918 769 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 233 253 918 769 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +0 0 +END_OF_DESKTOP_MEMBER +{3C7808FB-3653-4239-BC99-C442DF039126} +0 +End_Of_Object VBoxRoot 15 +End_Of_Object VTriggerBox 14 +0 +End_Of_Object VTriggerConfiguration 13 +VDOLine 13 Begin_Of_Object +1 +57 +0 +10 0 +VDAOGBFunctionBlock 14 Begin_Of_Object +1 +58 +0 +TABPredecessor: +56 +TABSuccessor: +61 +VLoggingConfiguration 15 Begin_Of_Object +2 +VMigratedGenericConfiguration 16 Begin_Of_Object +1 +VLogCfgData 17 Begin_Of_Object +5 +0 +1 +1 +1 +0 +0 +0 +0 +1024 +60 +1 +0 +1 +1 +0 +0 +0 +0 +0 +2 +0 +0 +17 +VLogExportPersister 18 Begin_Of_Object +3 +1416 +11060193 + 1 "..\..\..\..\..\Public\Documents\Vector\CANwin\Public\Documents\Vector\CANwin 8.0.918\templates" + 1 "..\..\..\..\..\Public\Documents\Vector\CANwin\Public\Documents\Vector\CANwin 8.0.918\templates" + 1 "" +0 +2 +1 +:: +, +. + +0 +2 +0 +0.10000000000000001 +6 +1 +0 +2 +19 +0.10000000000000001 +1 +0 +End_Of_Object VLogExportPersister 18 + +End_Of_Serialized_Data 17 + 1 "..\..\..\..\..\public\documents\vector\canwin\8.1.32\canwin demos\templates\CANOE.blf" +0 +0 +0 +10 +80 +0 +End_Of_Object VLogCfgData 17 +End_Of_Object VMigratedGenericConfiguration 16 +End_Of_Object VLoggingConfiguration 15 +VDOLine 15 Begin_Of_Object +1 +59 +0 +60 0 +NULL +End_Of_Object VDOLine 15 + +EndOfComment +1 +1 +End_Of_Object VDAOGBFunctionBlock 14 +End_Of_Object VDOLine 13 + +EndOfComment +0 +1 +End_Of_Object VDAOGBFunctionBlock 12 +End_Of_Object VDODynamicLine 11 +End_Of_Object VDAOGBHSStd 10 +NULL +End_Of_Object VDORefinement 9 +VDORefinement 9 Begin_Of_Object +1 +60 +0 +4 +VDAOGBHSStd 10 Begin_Of_Object +1 +61 +0 +0 0 +TABPredecessor: +58 +TABSuccessor: +63 +VDODynamicLine 11 Begin_Of_Object +1 +62 +0 +0 +VDAOGBFunctionBlock 12 Begin_Of_Object +1 +63 +0 +TABPredecessor: +61 +TABSuccessor: +0 +VDataListControlHost 13 Begin_Of_Object +1 +VConfigurationRoot 14 Begin_Of_Object +1 +End_Of_Object VConfigurationRoot 14 +VDataBox 14 Begin_Of_Object +1 +VBoxRoot 15 Begin_Of_Object +1 +1 +1 2 0 1 -1 -1 -8 -30 -138 106 539 323 + +1 + +MDI_DOCK_INFO_END +5 +1 +6 +0 1 -1 -1 -8 -30 -138 106 539 323 +6 1 0 0 0 0 0 0 677 213 0 0 1 8084 1904 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 6 66 1 0 0 0 1 444 0 59420 1 +END_OF_DOCK_INFO +1 +2 +0 +0 +1 +603 389 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 238 146 956 584 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +0 0 +END_OF_DESKTOP_MEMBER +{E6849C53-63F6-4A32-9B1C-7018D50DDE09} +0 +End_Of_Object VBoxRoot 15 +End_Of_Object VDataBox 14 +1 +6 +14 +VSysVarObject 14 Begin_Of_Object +1 +VHostSignal 15 Begin_Of_Object +2 +3 +Ethernet1::Client_2::Info::DeviceCode +0 +End_Of_Object VHostSignal 15 +14 +ValueObjectConfiguration::VConfiguredSysVar 15 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 Begin_Of_Object +1 +VConfigSysVar 18 Begin_Of_Object +1 +VConfigEvent 19 Begin_Of_Object +1 +End_Of_Object VConfigEvent 19 +Ethernet1::Client_2::Info +DeviceCode +End_Of_Object VConfigSysVar 18 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 +-1 +2 +End_Of_Object ValueObjectConfiguration::VConfiguredSysVar 15 + +End_Of_Serialized_Data 14 +End_Of_Object VSysVarObject 14 +[Begin_of_Item] +2 1 +1 1 2 0 0 16777215 +1 10000 1 0 +[End_of_Item] +VSysVarObject 14 Begin_Of_Object +1 +VHostSignal 15 Begin_Of_Object +2 +3 +Ethernet1::Client_2::Info::SerialCode +0 +End_Of_Object VHostSignal 15 +14 +ValueObjectConfiguration::VConfiguredSysVar 15 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 Begin_Of_Object +1 +VConfigSysVar 18 Begin_Of_Object +1 +VConfigEvent 19 Begin_Of_Object +1 +End_Of_Object VConfigEvent 19 +Ethernet1::Client_2::Info +SerialCode +End_Of_Object VConfigSysVar 18 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 +-1 +2 +End_Of_Object ValueObjectConfiguration::VConfiguredSysVar 15 + +End_Of_Serialized_Data 14 +End_Of_Object VSysVarObject 14 +[Begin_of_Item] +2 2 +1 1 2 0 0 16777215 +1 10000 1 0 +[End_of_Item] +VSysVarObject 14 Begin_Of_Object +1 +VHostSignal 15 Begin_Of_Object +2 +3 +Ethernet1::Client_2::Info::InputBits +0 +End_Of_Object VHostSignal 15 +14 +ValueObjectConfiguration::VConfiguredSysVar 15 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 Begin_Of_Object +1 +VConfigSysVar 18 Begin_Of_Object +1 +VConfigEvent 19 Begin_Of_Object +1 +End_Of_Object VConfigEvent 19 +Ethernet1::Client_2::Info +InputBits +End_Of_Object VConfigSysVar 18 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 +-1 +2 +End_Of_Object ValueObjectConfiguration::VConfiguredSysVar 15 + +End_Of_Serialized_Data 14 +End_Of_Object VSysVarObject 14 +[Begin_of_Item] +2 3 +1 1 2 0 0 16777215 +0 2000 0 0 +[End_of_Item] +VSysVarObject 14 Begin_Of_Object +1 +VHostSignal 15 Begin_Of_Object +2 +3 +Ethernet1::Client_2::Info::InputRegisters +0 +End_Of_Object VHostSignal 15 +14 +ValueObjectConfiguration::VConfiguredSysVar 15 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 Begin_Of_Object +1 +VConfigSysVar 18 Begin_Of_Object +1 +VConfigEvent 19 Begin_Of_Object +1 +End_Of_Object VConfigEvent 19 +Ethernet1::Client_2::Info +InputRegisters +End_Of_Object VConfigSysVar 18 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 +-1 +2 +End_Of_Object ValueObjectConfiguration::VConfiguredSysVar 15 + +End_Of_Serialized_Data 14 +End_Of_Object VSysVarObject 14 +[Begin_of_Item] +2 4 +1 1 2 0 0 16777215 +0 123 0 0 +[End_of_Item] +VSysVarObject 14 Begin_Of_Object +1 +VHostSignal 15 Begin_Of_Object +2 +3 +Ethernet1::Client_2::Info::OutputBits +0 +End_Of_Object VHostSignal 15 +14 +ValueObjectConfiguration::VConfiguredSysVar 15 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 Begin_Of_Object +1 +VConfigSysVar 18 Begin_Of_Object +1 +VConfigEvent 19 Begin_Of_Object +1 +End_Of_Object VConfigEvent 19 +Ethernet1::Client_2::Info +OutputBits +End_Of_Object VConfigSysVar 18 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 +-1 +2 +End_Of_Object ValueObjectConfiguration::VConfiguredSysVar 15 + +End_Of_Serialized_Data 14 +End_Of_Object VSysVarObject 14 +[Begin_of_Item] +2 5 +1 1 2 0 0 16777215 +0 2000 0 0 +[End_of_Item] +VSysVarObject 14 Begin_Of_Object +1 +VHostSignal 15 Begin_Of_Object +2 +3 +Ethernet1::Client_2::Info::OutputRegisters +0 +End_Of_Object VHostSignal 15 +14 +ValueObjectConfiguration::VConfiguredSysVar 15 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 Begin_Of_Object +1 +VConfigSysVar 18 Begin_Of_Object +1 +VConfigEvent 19 Begin_Of_Object +1 +End_Of_Object VConfigEvent 19 +Ethernet1::Client_2::Info +OutputRegisters +End_Of_Object VConfigSysVar 18 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 +-1 +2 +End_Of_Object ValueObjectConfiguration::VConfiguredSysVar 15 + +End_Of_Serialized_Data 14 +End_Of_Object VSysVarObject 14 +[Begin_of_Item] +2 6 +1 1 2 0 0 16777215 +0 123 0 0 +[End_of_Item] +VSysVarObject 14 Begin_Of_Object +1 +VHostSignal 15 Begin_Of_Object +2 +3 +Ethernet1::Client_2::Info::Modules +0 +End_Of_Object VHostSignal 15 +14 +ValueObjectConfiguration::VConfiguredSysVar 15 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 Begin_Of_Object +1 +VConfigSysVar 18 Begin_Of_Object +1 +VConfigEvent 19 Begin_Of_Object +1 +End_Of_Object VConfigEvent 19 +Ethernet1::Client_2::Info +Modules +End_Of_Object VConfigSysVar 18 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 +-1 +2 +End_Of_Object ValueObjectConfiguration::VConfiguredSysVar 15 + +End_Of_Serialized_Data 14 +End_Of_Object VSysVarObject 14 +[Begin_of_Item] +2 7 +1 8 2 0 0 16777215 +-1000 1000 -1000 0 +[End_of_Item] +VSysVarObject 14 Begin_Of_Object +1 +VHostSignal 15 Begin_Of_Object +2 +3 +Ethernet1::Client_2::Data::OutputBits +0 +End_Of_Object VHostSignal 15 +14 +ValueObjectConfiguration::VConfiguredSysVar 15 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 Begin_Of_Object +1 +VConfigSysVar 18 Begin_Of_Object +1 +VConfigEvent 19 Begin_Of_Object +1 +End_Of_Object VConfigEvent 19 +Ethernet1::Client_2::Data +OutputBits +End_Of_Object VConfigSysVar 18 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 +-1 +2 +End_Of_Object ValueObjectConfiguration::VConfiguredSysVar 15 + +End_Of_Serialized_Data 14 +End_Of_Object VSysVarObject 14 +[Begin_of_Item] +2 11 +1 8 2 0 0 16777215 +3.18299e-313 1 3.18299e-313 0 +[End_of_Item] +VSysVarObject 14 Begin_Of_Object +1 +VHostSignal 15 Begin_Of_Object +2 +3 +Ethernet1::Client_2::Data::InputBits +0 +End_Of_Object VHostSignal 15 +14 +ValueObjectConfiguration::VConfiguredSysVar 15 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 Begin_Of_Object +1 +VConfigSysVar 18 Begin_Of_Object +1 +VConfigEvent 19 Begin_Of_Object +1 +End_Of_Object VConfigEvent 19 +Ethernet1::Client_2::Data +InputBits +End_Of_Object VConfigSysVar 18 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 +-1 +2 +End_Of_Object ValueObjectConfiguration::VConfiguredSysVar 15 + +End_Of_Serialized_Data 14 +End_Of_Object VSysVarObject 14 +[Begin_of_Item] +2 12 +1 8 2 0 0 16777215 +3.18299e-313 1 3.18299e-313 0 +[End_of_Item] +VSysVarObject 14 Begin_Of_Object +1 +VHostSignal 15 Begin_Of_Object +2 +3 +RxBitRateAvg +0 +End_Of_Object VHostSignal 15 +14 +ValueObjectConfiguration::VConfiguredSysVar 15 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 Begin_Of_Object +1 +VConfigSysVar 18 Begin_Of_Object +1 +VConfigEvent 19 Begin_Of_Object +1 +End_Of_Object VConfigEvent 19 +_Statistics::Eth1 +RxBitRateAvg +End_Of_Object VConfigSysVar 18 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 +-1 +2 +End_Of_Object ValueObjectConfiguration::VConfiguredSysVar 15 + +End_Of_Serialized_Data 14 +End_Of_Object VSysVarObject 14 +[Begin_of_Item] +2 13 +1 1 10 0 0 16777215 +0 1000 0 0 +[End_of_Item] +VSysVarObject 14 Begin_Of_Object +1 +VHostSignal 15 Begin_Of_Object +2 +3 +TxPacketRateAvg +0 +End_Of_Object VHostSignal 15 +14 +ValueObjectConfiguration::VConfiguredSysVar 15 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 Begin_Of_Object +1 +VConfigSysVar 18 Begin_Of_Object +1 +VConfigEvent 19 Begin_Of_Object +1 +End_Of_Object VConfigEvent 19 +_Statistics::Eth1 +TxPacketRateAvg +End_Of_Object VConfigSysVar 18 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 +-1 +2 +End_Of_Object ValueObjectConfiguration::VConfiguredSysVar 15 + +End_Of_Serialized_Data 14 +End_Of_Object VSysVarObject 14 +[Begin_of_Item] +2 10 +1 1 2 0 0 16777215 +0 1000 0 0 +[End_of_Item] +VSysVarObject 14 Begin_Of_Object +1 +VHostSignal 15 Begin_Of_Object +2 +3 +TxBitRateAvg +0 +End_Of_Object VHostSignal 15 +14 +ValueObjectConfiguration::VConfiguredSysVar 15 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 Begin_Of_Object +1 +VConfigSysVar 18 Begin_Of_Object +1 +VConfigEvent 19 Begin_Of_Object +1 +End_Of_Object VConfigEvent 19 +_Statistics::Eth1 +TxBitRateAvg +End_Of_Object VConfigSysVar 18 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 +-1 +2 +End_Of_Object ValueObjectConfiguration::VConfiguredSysVar 15 + +End_Of_Serialized_Data 14 +End_Of_Object VSysVarObject 14 +[Begin_of_Item] +2 9 +1 1 2 0 0 16777215 +0 1000 0 0 +[End_of_Item] +VSysVarObject 14 Begin_Of_Object +1 +VHostSignal 15 Begin_Of_Object +2 +3 +RxPacketRateAvg +0 +End_Of_Object VHostSignal 15 +14 +ValueObjectConfiguration::VConfiguredSysVar 15 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 Begin_Of_Object +1 +VConfigSysVar 18 Begin_Of_Object +1 +VConfigEvent 19 Begin_Of_Object +1 +End_Of_Object VConfigEvent 19 +_Statistics::Eth1 +RxPacketRateAvg +End_Of_Object VConfigSysVar 18 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 +-1 +2 +End_Of_Object ValueObjectConfiguration::VConfiguredSysVar 15 + +End_Of_Serialized_Data 14 +End_Of_Object VSysVarObject 14 +[Begin_of_Item] +2 14 +1 1 2 0 0 16777215 +0 1000 0 0 +[End_of_Item] +VSysVarObject 14 Begin_Of_Object +1 +VHostSignal 15 Begin_Of_Object +2 +3 +Ethernet1::Client_2::Config::Interval +0 +End_Of_Object VHostSignal 15 +14 +ValueObjectConfiguration::VConfiguredSysVar 15 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 Begin_Of_Object +1 +VConfigSysVar 18 Begin_Of_Object +1 +VConfigEvent 19 Begin_Of_Object +1 +End_Of_Object VConfigEvent 19 +Ethernet1::Client_2::Config +Interval +End_Of_Object VConfigSysVar 18 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 17 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 16 +-1 +2 +End_Of_Object ValueObjectConfiguration::VConfiguredSysVar 15 + +End_Of_Serialized_Data 14 +End_Of_Object VSysVarObject 14 +[Begin_of_Item] +2 8 +1 1 2 0 0 16777215 +10 10000 10 0 +[End_of_Item] +34 220 16 167 75 75 44 156 191 100 1 +35 35 +30 +1 1 0 1 0 0 1 1 1 0 1 +0 0 +0 +1 0 +5000 0 10000 0 10000 +1 0 + 1 "CANoe_Data.mdf" +0 0 0 0 0 0 0 0 +1416 11060193 + 1 "" + 1 "" +0 2 1 +:: +, + +4 +. +0 2 0 +0.1 +6 + 1 "" +1 0 +2 19 +0.1 +1 +[End_of_Export] +0 1024 0 60 +1 1 +0 0 0 0 0 2 0 0 0 +1 +[End_of_Control] +End_Of_Object VDataListControlHost 13 +VDOLine 13 Begin_Of_Object +1 +64 +0 +130 0 +NULL +End_Of_Object VDOLine 13 + +EndOfComment +0 +1 +End_Of_Object VDAOGBFunctionBlock 12 +End_Of_Object VDODynamicLine 11 +End_Of_Object VDAOGBHSStd 10 +NULL +End_Of_Object VDORefinement 9 +End_Of_Object VDOFRamification 8 +End_Of_Object VDODynamicLine 7 +End_Of_Object VDAOGBHSStd 6 +End_Of_Object VDAOSwitch 5 + +EndOfComment +1 +1 +End_Of_Object VDAOGBFunctionBlock 4 +VDAOGBFunctionBlock 4 Begin_Of_Object +1 +33 +0 +TABPredecessor: +0 +TABSuccessor: +34 +VOfflineSrcConfiguration 5 Begin_Of_Object +3 +VMigratedGenericConfiguration 6 Begin_Of_Object +1 +VOfflineCfgData 7 Begin_Of_Object +2 +VReplayCfgBase 8 Begin_Of_Object +1 +0 +1 +End_Of_Object VReplayCfgBase 8 +VCfgBreakCondition 8 Begin_Of_Object +1 +VDataBreakCondition 9 Begin_Of_Object +1 +0 +VEvCondBlock 10 Begin_Of_Object +1 +VEvCondGroup 11 Begin_Of_Object +2 +VEvCondPrimitive 12 Begin_Of_Object +1 +1 +End_Of_Object VEvCondPrimitive 12 +1 +0 +0 +End_Of_Object VEvCondGroup 11 +End_Of_Object VEvCondBlock 10 +End_Of_Object VDataBreakCondition 9 +End_Of_Object VCfgBreakCondition 8 +0 +0 +0 +0 +0 +0 +End_Of_Object VOfflineCfgData 7 +End_Of_Object VMigratedGenericConfiguration 6 +VChannelMapping 6 Begin_Of_Object +1 +0 +End_Of_Object VChannelMapping 6 +End_Of_Object VOfflineSrcConfiguration 5 +NULL + +EndOfComment +1 +1 +End_Of_Object VDAOGBFunctionBlock 4 +0 +End_Of_Object VDOLocalInfoStruct 3 +67305472 +0 +0 +2 +VDOLocalInfoStruct 3 Begin_Of_Object +End_Of_Object VDOLocalInfoStruct 3 +End_Of_Serialized_Data 2 +0.000000 +0 0 +End_Of_Object VGBAnlyzBox 2 +VGBRealTimeBox 2 Begin_Of_Object +1 +VGrMnBox 3 Begin_Of_Object +1 +VUniqueBox 4 Begin_Of_Object +1 +VBoxRoot 5 Begin_Of_Object +1 +3 +0 0 0 1 -1 -1 -8 -30 0 0 890 487 + +1 + +MDI_DOCK_INFO_END +5 +1 +6 +0 1 -1 -1 -8 -30 0 0 890 487 +6 1 0 0 0 0 0 0 890 483 0 0 1 20372 1904 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 347 323 1 0 0 0 1 641 0 59421 1 +END_OF_DOCK_INFO +1 +0 +1 +0 1 -1 -1 -1 -1 207 338 1101 829 +0 +1 +963 390 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 44 44 1544 1005 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +0 +0 +0 +0 +614 591 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +0 1 +1 +6 +0 1 -1 -1 -1 -1 1 1 1037 737 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +0 +0 +0 +1 +1137 856 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 44 44 1544 1005 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +0 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +END_OF_DESKTOP_MEMBER +{224229E5-10CA-425F-8B6F-C213CD04C44F} +0 +End_Of_Object VBoxRoot 5 +1 0 0 1 -1 -1 -1 -1 1 1 1037 737 +End_Of_Object VUniqueBox 4 +End_Of_Object VGrMnBox 3 +VDOLocalInfoStruct 3 Begin_Of_Object +3 +1 +195 +VDAOBus 4 Begin_Of_Object +1 +1 +1 +VDAOGBFunctionBlock 5 Begin_Of_Object +1 +46 +3 +TABPredecessor: +1 +TABSuccessor: +41 +VSimulationNode 6 Begin_Of_Object +3 +VProgrammedNode 7 Begin_Of_Object +4 +VConfigurationRoot 8 Begin_Of_Object +1 +End_Of_Object VConfigurationRoot 8 + 1 "include\CAPL\ModbusClient.can" +1 +J:\HsKA\NB7\Bachelorthesis\CANoe\Modbus\include\CAPL\ModbusClient.cbf +Client_2 +Modbus +5 +ECU 2 +ECU 2 +EOF_TITLE_INFO +Client_2 +1 +0 +1 +1 +0 +1 +0 +1 0 1 0 +SS_BEGIN_COMMON_INFO +1 +5 +Behavior +1 +Buses +1 +Misc +1 +Modules +1 +Timing +1 +SS_END_COMMON_INFO + +EOF_MBSSDATA +1 +0 1 +0 +EOF_NLDATA +0 +EOF_ASSEMBLYDATA + 1 "include\CAPL\ModbusClient.cbf" +VIPBStackSetting 8 Begin_Of_Object +3 +0 +1 +VIPBAdapterSetting 9 Begin_Of_Object +4 +1 +9 +02:4C:5C:2B:26:00 +End_Of_Serialized_Data 9 +9 +192.168.1.2 +End_Of_Serialized_Data 9 +9 +255.255.255.0 +End_Of_Serialized_Data 9 +9 +0.0.0.0 +End_Of_Serialized_Data 9 +1 +VPersistentIFv4Address 10 Begin_Of_Object +1 +VPersistentIFAddress 11 Begin_Of_Object +1 +VPersistentAddress 12 Begin_Of_Object +1 +End_Of_Object VPersistentAddress 12 +End_Of_Object VPersistentIFAddress 11 +10 +192.168.1.2 +End_Of_Serialized_Data 10 +10 +255.255.255.0 +End_Of_Serialized_Data 10 +End_Of_Object VPersistentIFv4Address 10 +0 +1 +11 +Ether1 +1 +0 +0 +End_Of_Object VIPBAdapterSetting 9 +0 +1 +0 +End_Of_Object VIPBStackSetting 8 +7 +NDebugger::VDebuggerHost 8 Begin_Of_Object +2 +0 +26 +NDebugger::VFile 9 Begin_Of_Object +1 + 1 "ModbusTcpCommon.cin" +5 +End_Of_Object NDebugger::VFile 9 +NDebugger::VFile 9 Begin_Of_Object +1 + 1 "TcpCommon.cin" +6 +End_Of_Object NDebugger::VFile 9 +NDebugger::VFile 9 Begin_Of_Object +1 + 1 "ModbusClientCommon.cin" +12 +End_Of_Object NDebugger::VFile 9 +NDebugger::VFile 9 Begin_Of_Object +1 + 1 "ModbusUdpClientCommon.cin" +13 +End_Of_Object NDebugger::VFile 9 +NDebugger::VFile 9 Begin_Of_Object +1 + 1 "Common.cin" +15 +End_Of_Object NDebugger::VFile 9 +NDebugger::VFile 9 Begin_Of_Object +1 + 1 "TcpUdpCommon.cin" +16 +End_Of_Object NDebugger::VFile 9 +NDebugger::VFile 9 Begin_Of_Object +1 + 1 "UdpCommon.cin" +17 +End_Of_Object NDebugger::VFile 9 +NDebugger::VFile 9 Begin_Of_Object +1 + 1 "ModbusCommonStructs.cin" +18 +End_Of_Object NDebugger::VFile 9 +NDebugger::VFile 9 Begin_Of_Object +1 + 1 "include\Common.cin" +19 +End_Of_Object NDebugger::VFile 9 +NDebugger::VFile 9 Begin_Of_Object +1 + 1 "include\ModbusClientCommon.cin" +20 +End_Of_Object NDebugger::VFile 9 +NDebugger::VFile 9 Begin_Of_Object +1 + 1 "include\ModbusCommonStructs.cin" +21 +End_Of_Object NDebugger::VFile 9 +NDebugger::VFile 9 Begin_Of_Object +1 + 1 "include\ModbusUdpClientCommon.cin" +22 +End_Of_Object NDebugger::VFile 9 +NDebugger::VFile 9 Begin_Of_Object +1 + 1 "include\TcpUdpCommon.cin" +23 +End_Of_Object NDebugger::VFile 9 +NDebugger::VFile 9 Begin_Of_Object +1 + 1 "include\UdpCommon.cin" +24 +End_Of_Object NDebugger::VFile 9 +NDebugger::VFile 9 Begin_Of_Object +1 + 1 "include\ModbusFunctions.cin" +25 +End_Of_Object NDebugger::VFile 9 +NDebugger::VFile 9 Begin_Of_Object +1 + 1 "include\CAPL\include\Common.cin" +28 +End_Of_Object NDebugger::VFile 9 +NDebugger::VFile 9 Begin_Of_Object +1 + 1 "include\CAPL\include\ModbusClientCommon.cin" +29 +End_Of_Object NDebugger::VFile 9 +NDebugger::VFile 9 Begin_Of_Object +1 + 1 "include\CAPL\include\ModbusFunctions.cin" +31 +End_Of_Object NDebugger::VFile 9 +NDebugger::VFile 9 Begin_Of_Object +1 + 1 "include\CAPL\include\TcpUdpCommon.cin" +33 +End_Of_Object NDebugger::VFile 9 +NDebugger::VFile 9 Begin_Of_Object +1 + 1 "include\CAPL\ModbusClient.can" +35 +End_Of_Object NDebugger::VFile 9 +NDebugger::VFile 9 Begin_Of_Object +1 + 1 "include\CAPL\include\EilCommon.cin" +36 +End_Of_Object NDebugger::VFile 9 +NDebugger::VFile 9 Begin_Of_Object +1 + 1 "include\CAPL\include\ModbusEilClientCommon.cin" +37 +End_Of_Object NDebugger::VFile 9 +NDebugger::VFile 9 Begin_Of_Object +1 + 1 "include\CAPL\include\ModbusTcpClientCommon.cin" +38 +End_Of_Object NDebugger::VFile 9 +NDebugger::VFile 9 Begin_Of_Object +1 + 1 "include\CAPL\include\TcpCommon.cin" +39 +End_Of_Object NDebugger::VFile 9 +NDebugger::VFile 9 Begin_Of_Object +1 + 1 "include\CAPL\include\ModbusUdpClientCommon.cin" +40 +End_Of_Object NDebugger::VFile 9 +NDebugger::VFile 9 Begin_Of_Object +1 + 1 "include\CAPL\include\UdpCommon.cin" +41 +End_Of_Object NDebugger::VFile 9 +VNETStandaloneComponent 9 Begin_Of_Object +1 +VNETControlBox 10 Begin_Of_Object +2 +VUniqueBox 11 Begin_Of_Object +1 +VBoxRoot 12 Begin_Of_Object +1 +3 +1 -1 2 3 -1 -1 -8 -30 171 76 688 306 +Debugger - Client_2 +1 + +MDI_DOCK_INFO_END +5 +1 +6 +2 3 -1 -1 -1 -1 171 76 688 306 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +859 382 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 171 76 688 306 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +0 1 +1 +6 +0 1 0 0 -1 -1 171 76 688 306 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 171 76 688 306 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +END_OF_DESKTOP_MEMBER +{48CC8AD8-485E-4CF0-AB4F-37B0280AD2E5} +0 +End_Of_Object VBoxRoot 12 +1 -1 0 0 0 0 0 0 0 0 0 0 +End_Of_Object VUniqueBox 11 +1 +1 -1 0 0 0 0 0 0 0 0 0 0 +0 +End_Of_Object VNETControlBox 10 +138 +APPDIR Vector.CANoe.Debugger.DLL +Vector.CANoe.Debugger, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANoe.Debugger.DebuggerComponent +1 +1 +APPDIR CANoe_Net.DLL +CANoe_Net, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.ApplicationSerializer +2 +mApplication +2 +APPDIR Vector.CANoe.Debugger.DLL +Vector.CANoe.Debugger, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANoe.Debugger.DebuggerModel +3 +mModel +3 +APPDIR Components\Vector.CANalyzer.Serialization\1.5.0.0\Vector.CANalyzer.Serialization.dll +Vector.CANalyzer.Serialization, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b273882a063429a6 +Vector.CANalyzer.Serialization.SerializationVersion +4 +SerializationVersion +4 +UInt16 +mMajor +1 +UInt16 +mMinor +0 +UInt16 +mPatch +0 +--TextFormatter: End of Object-- +--TextFormatter: End of Object-- +TypeRef:2 +2 +--TextFormatter: End of Object-- +TypeRef:3 +3 +Int32 +NrOfFiles +5 +Int32 +FileID0 +35 +Int32 +CurrentLine0 +0 +Int32 +FileID1 +28 +Int32 +CurrentLine1 +0 +Int32 +FileID2 +29 +Int32 +CurrentLine2 +0 +Int32 +FileID3 +31 +Int32 +CurrentLine3 +0 +Int32 +FileID4 +33 +Int32 +CurrentLine4 +0 +Int32 +SelectedFileID +35 +Int32 +NrOfWatchedVariables +0 +String +WindowLayout +37 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Boolean +ShowOnlyLocalsVar +True +Boolean +ShowOnlyLocalsWatch +True +TypeRef:4 +SerializationVersion +5 +UInt16 +mMajor +1 +UInt16 +mMinor +0 +UInt16 +mPatch +3 +--TextFormatter: End of Object-- +--TextFormatter: End of Object-- +End_Of_Object VNETStandaloneComponent 9 +0 +End_Of_Object NDebugger::VDebuggerHost 8 + +End_Of_Serialized_Data 7 +End_Of_Object VProgrammedNode 7 +0 +0 +Startdelay 1 0 10 +Jitter 0 0 1 0 0 0 0 +1 +1 ETHERNET_IL.DLL +EOF_NLDATA +3 +VSimulinkModelViewerConfiguration 7 Begin_Of_Object +2 + 1 "" + 1 "" + 1 "" +150 +0 +End_Of_Object VSimulinkModelViewerConfiguration 7 +1 +0 +657298843 +0 +NodeSignalPanelBustypeCount 0 +End_Of_Object VSimulationNode 6 +NULL + +EndOfComment +0 +1 +End_Of_Object VDAOGBFunctionBlock 5 +1 +VDAOGBFunctionBlock 5 Begin_Of_Object +1 +41 +3 +TABPredecessor: +46 +TABSuccessor: +2 +VSSPlugInConfiguration 6 Begin_Of_Object +1 +VConfigurationRoot 7 Begin_Of_Object +1 +End_Of_Object VConfigurationRoot 7 +V1 +VPlugInUniqueBox 7 Begin_Of_Object +1 +VUniqueBox 8 Begin_Of_Object +1 +VBoxRoot 9 Begin_Of_Object +1 +3 +1 1 1 1 0 166 -8 -30 61 86 1093 577 +Ethernet Packet Builder +1 + +MDI_DOCK_INFO_END +5 +1 +6 +1 1 0 166 -8 -30 61 86 1093 577 +6 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +1 +1 +0 1 -1 -1 -1 -1 48 170 1084 665 +0 +1 +963 193 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 216 113 867 455 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +2 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +0 1 +1 +6 +0 1 0 0 -1 -1 216 113 867 455 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 216 113 867 455 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +END_OF_DESKTOP_MEMBER +{110A49BE-E014-4CBC-9379-F6D7EDF49151} +0 +End_Of_Object VBoxRoot 9 +1 -1 0 0 0 0 0 0 0 0 0 0 +End_Of_Object VUniqueBox 8 +End_Of_Object VPlugInUniqueBox 7 +1 2 1 0 +SS_BEGIN_COMMON_INFO +1 +2 +Behavior +1 +Misc +1 +SS_END_COMMON_INFO + +EOF_MBSSDATA +1 +0 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +End_Of_Object VSSPlugInConfiguration 6 +NULL + +EndOfComment +0 +1 +End_Of_Object VDAOGBFunctionBlock 5 +TABPredecessor: +0 +TABSuccessor: +46 +VDAOGBFunctionBlock 5 Begin_Of_Object +1 +2 +0 +TABPredecessor: +41 +TABSuccessor: +0 +VCardConf 6 Begin_Of_Object +1 +End_Of_Object VCardConf 6 +NULL + +EndOfComment +0 +1 +End_Of_Object VDAOGBFunctionBlock 5 +End_Of_Object VDAOBus 4 +NULL +0 +End_Of_Object VDOLocalInfoStruct 3 +0.000000 +0 0 +1 1 0 59420 1 176 1 2882400001 639 815 319 694 2882400002 0 0 0 0 0 0 1 2882400001 1280 1280 321 321 2882400002 0 27 0 1629118104 0 0 3 +SS_BEGIN_COMMON_INFO +1 +0 +SS_END_COMMON_INFO + +EOF_MBSSDATA +1 +Ether1 +11 +1 +1 +345965688 1 0 1 0 1 1 0 81 42 2000 1 +SS_BEGIN_COMMON_INFO +1 +3 +Channels +1 +Databases +1 +Misc +1 +SS_END_COMMON_INFO + +EOF_BUSDATA +1 +_Start_VPRBSManager 1 +0 0x32 0x1 +_End_VPRBSManager +NodeSignalPanelBustypeCount 0 +EOF_BUS + +EOF_MBSSDATA +End_Of_Object VGBRealTimeBox 2 +VWriteBox 2 Begin_Of_Object +2 +VUniqueBox 3 Begin_Of_Object +1 +VBoxRoot 4 Begin_Of_Object +1 +3 +0 2 0 1 -1 -1 -8 -30 162 249 890 645 +Write +1 + +MDI_DOCK_INFO_END +5 +1 +6 +0 1 -1 -1 -8 -30 162 249 890 645 +6 1 1010 180 0 0 300 180 300 180 0 61440 1 12180 1904 0 0 0 0 260 0 0 0 1 5 32767 1 59422 1 5 1011 185 4 6 433 1 10 0 0 1 223 0 59419 1 +END_OF_DOCK_INFO +1 +2 +0 +0 +1 +1188 901 +END_OF_DESKTOP_DATA +6 +0 1 -1 -1 -1 -1 22 272 684 615 +6 0 1010 180 0 0 300 180 300 180 0 61440 1 12181 1904 0 0 0 0 260 1 0 0 -1 -1 32767 0 59422 0 0 0 0 0 0 0 1 10 0 0 1 229 0 59419 1 +END_OF_DOCK_INFO +1 +3 +0 +0 +1 +1596 747 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +0 1 +1 +6 +0 1 0 0 0 0 0 700 662 1043 +6 1 1010 180 0 0 300 180 300 180 0 61440 1 36756 1904 0 0 0 0 260 0 0 0 1 5 32767 1 59422 1 5 1586 185 4 6 433 1 1 0 0 1 180 0 59422 1 +END_OF_DOCK_INFO +1 +1 +0 +0 +1 +1582 1043 +END_OF_DESKTOP_DATA +6 +0 1 -1 -1 0 0 0 700 662 1043 +6 1 790 180 0 0 300 180 300 180 0 61440 0.5 36740 1904 0 0 0 0 261 0 0 0 1 5 32767 1 59422 1 5 1586 185 4 6 433 1 1 0 0 0.5 180 0 59422 1 +END_OF_DOCK_INFO +1 +2 +0 +0 +1 +1582 1043 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +END_OF_DESKTOP_MEMBER +{8F3DFCAC-9CCB-45C2-AF10-5DEC039B5956} +0 +End_Of_Object VBoxRoot 4 +0 1 0 1 -1 -1 0 0 0 700 662 1043 +End_Of_Object VUniqueBox 3 +2 +VWriteControlAdapter 3 Begin_Of_Object +2 +VControlAdapter 4 Begin_Of_Object +1 +End_Of_Object VControlAdapter 4 +1 +3 +WListVer 2 + 1 "C:\Users\Jonny\Desktop\CANoe.log" + 1 1 1 1 1 1 + False 147 90 0 +End_Of_Serialized_Data 3 +End_Of_Object VWriteControlAdapter 3 + +End_Of_Serialized_Data 2 +End_Of_Object VWriteBox 2 +VWinStore 2 Begin_Of_Object +1 +22 2 3 -32088 -32000 -1 -1 0 0 930 767 +End_Of_Child_List +End_Of_Object VWinStore 2 +VWinStore 2 Begin_Of_Object +1 +22 0 1 -1 -1 -1 -1 1 1 1591 1167 +End_Of_Child_List +End_Of_Object VWinStore 2 +VChipMultibusConfig 2 Begin_Of_Object +1 +Version 7 9 +5 32 +0 +9 0 +11 1 +1 +VEthernetChannelConfig 3 Begin_Of_Object +1 +2 0 +VEthernetFilterConfig 4 Begin_Of_Object +1 +1 0 0 +End_Of_Object VEthernetFilterConfig 4 +VEthernetProtocolConfig 4 Begin_Of_Object +1 +1 1 0 + +End_Of_Object VEthernetProtocolConfig 4 +VEthernetVnChannelConfig 4 Begin_Of_Object +1 +1 +0 0 0 0 0 0 0 0 0 +End_Of_Object VEthernetVnChannelConfig 4 +End_Of_Object VEthernetChannelConfig 3 +14 0 +1 +12 1 +3 +0 127 0 0 1 2900 10 0 0 0 +1 1 +3 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +13 0 +1 +15 0 +7 0 +End_Of_Object VChipMultibusConfig 2 +VChipConfigC200 2 Begin_Of_Object +1 +0 +200 16000 0 0 +0 58 250 0 255 0 0 +1 1000 0 +0 +End_Of_Object VChipConfigC200 2 +VChipConfigC200 2 Begin_Of_Object +1 +0 +200 16000 0 0 +0 58 250 0 255 0 0 +1 1000 1 +0 +End_Of_Object VChipConfigC200 2 +VChipConfigC005 2 Begin_Of_Object +1 +0 +5 16000 0 0 +0 35 96 0 2047 0 0 0 0 0 +1 1000 0 +0 +End_Of_Object VChipConfigC005 2 +VChipConfigC005 2 Begin_Of_Object +1 +0 +5 16000 0 0 +0 35 96 0 2047 0 0 0 0 0 +1 1000 1 +0 +End_Of_Object VChipConfigC005 2 +VChipConfigC527 2 Begin_Of_Object +1 +0 +527 16000 0 0 +1 35 0 0 0 0 0 0 0 0 +1 1000 0 +0 +End_Of_Object VChipConfigC527 2 +VChipConfigC527 2 Begin_Of_Object +1 +0 +527 16000 0 0 +1 35 0 0 0 0 0 0 0 0 +1 1000 1 +0 +End_Of_Object VChipConfigC527 2 +VChipConfigC1000 2 Begin_Of_Object +1 +0 +1000 16000 0 0 +1 35 1 0 2 0 0 0 0 0 0 +1 1000 0 +0 +55 24 0 +2 2 27 12 2 2 0 +End_Of_Object VChipConfigC1000 2 +VChipConfigC1000 2 Begin_Of_Object +1 +0 +1000 16000 0 0 +1 35 1 0 2 0 0 0 0 0 0 +1 1000 1 +0 +55 24 0 +2 2 27 12 2 2 0 +End_Of_Object VChipConfigC1000 2 +VChipConfigC462 2 Begin_Of_Object +1 +462 16000 0 0 +125000 0 0 1 3 0 0 0 0 0 0 28 28 28 28 8 0 0 10 +1 1000 0 +0 +End_Of_Object VChipConfigC462 2 +VChipConfigC462 2 Begin_Of_Object +1 +462 16000 0 0 +125000 0 0 1 3 0 0 0 0 0 0 28 28 28 28 8 0 0 10 +1 1000 1 +0 +End_Of_Object VChipConfigC462 2 +0 +10 +3 0 +5 0 +6 0 +7 0 +8 0 +9 0 +11 1 +13 0 +14 0 +15 0 +VScanBaudrateConfiguration 2 Begin_Of_Object +1 +0 +End_Of_Object VScanBaudrateConfiguration 2 +4 +0 +VPersistentPath 2 Begin_Of_Object +1 + 1 "ModbusNet.cpd" +End_Of_Object VPersistentPath 2 +0 +3 +0 +0 +VPlugInsPersistentWrapper 2 Begin_Of_Object +1 + + +End_Of_Object VPlugInsPersistentWrapper 2 +0 +0 +VMacroStreamer 2 Begin_Of_Object +2 +VMacroManager 3 Begin_Of_Object +3 +0 +0 +0 +0 +End_Of_Object VMacroManager 3 +End_Of_Object VMacroStreamer 2 +VSignalGeneratorStreamer 2 Begin_Of_Object +1 +VAnlyzSigGeneratorManager 3 Begin_Of_Object +2 +0 +0 +End_Of_Object VAnlyzSigGeneratorManager 3 +End_Of_Object VSignalGeneratorStreamer 2 +SignalGeneratorsReplay 1 +VNETStandaloneComponent 2 Begin_Of_Object +1 +VNETControlBox 3 Begin_Of_Object +2 +VUniqueBox 4 Begin_Of_Object +1 +VBoxRoot 5 Begin_Of_Object +1 +3 +1 -1 0 1 0 0 -1 -1 387 290 1533 916 +Signalgeneratoren und Signal Replay +1 + +MDI_DOCK_INFO_END +5 +1 +6 +0 1 0 0 -1 -1 387 290 1349 718 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 387 290 1533 916 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +0 0 +END_OF_DESKTOP_MEMBER +{B58E4D7C-A178-49C8-B94F-0517372DCBD6} +0 +End_Of_Object VBoxRoot 5 +1 -1 0 0 0 0 0 0 0 0 0 0 +End_Of_Object VUniqueBox 4 +0 +0 +End_Of_Object VNETControlBox 3 +31 +APPDIR Vector.CANoe.SignalGenerators.DLL +Vector.CANoe.SignalGenerators, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANoe.SignalGenerators.ComponentWrapper +1 +1 +APPDIR CANoe_Net.DLL +CANoe_Net, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.ApplicationSerializer +2 +Application +2 +APPDIR Components\Vector.CANalyzer.Serialization\1.5.0.0\Vector.CANalyzer.Serialization.dll +Vector.CANalyzer.Serialization, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b273882a063429a6 +Vector.CANalyzer.Serialization.SerializationVersion +3 +SerializationVersion +3 +UInt16 +mMajor +1 +UInt16 +mMinor +0 +UInt16 +mPatch +1 +--TextFormatter: End of Object-- +--TextFormatter: End of Object-- +TypeRef:2 +2 +--TextFormatter: End of Object-- +End_Of_Object VNETStandaloneComponent 2 +2 +1 +1 +1 +1 +HistoryBegin +1 0 +HistoryEnd +FiltersBegin +Begin +3 0 0 +2 +Busstatistik Signale + ( 1 ( 0 ) 0 ) +Netzwerke +( 0) +SymbSelHeaderMgrBegin +1 6 +0 1 200 0 0 +1 1 100 0 0 +2 0 100 0 0 +3 0 75 1 1 +5 0 200 1 1 +6 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 2 +3 +Modbus + +modbus + +Systemvariablen + ( 0 ) +SymbSelHeaderMgrBegin +1 4 +0 1 200 0 0 +10 0 100 0 0 +11 1 100 0 0 +6 1 200 0 0 +SymbSelHeaderMgrEnd +End +Begin +3 0 -1 +0 +SymbSelHeaderMgrBegin +1 3 +0 1 200 0 0 +7 0 100 0 0 +6 0 100 0 0 +SymbSelHeaderMgrEnd +End + +FiltersEnd +1 1 +END_OF_WORKSPACE_MEMBER_DATA +END_OF_WORKSPACE_MEMBER +1 +0 +0 + +END_OF_WORKSPACE_DATA + +END_OF_WORKSPACE_CONFIGURATION +LinNMWindow 0 +LinScopeWindow 0 +CANBusyCalculation 1 +CANDefaultILActivation 1 +0 +1 +0 + +StartOfComment +EndOfComment +8.2 SP0 +VHILInterfaceMgrAnlyz 2 Begin_Of_Object +4 +0 +0 +2809 +0 +3030 +End_Of_Object VHILInterfaceMgrAnlyz 2 +0 +BasicDiagnosticsEditor 1 +VNETStandaloneComponent 2 Begin_Of_Object +1 +VNETControlBox 3 Begin_Of_Object +2 +VUniqueBox 4 Begin_Of_Object +1 +VBoxRoot 5 Begin_Of_Object +1 +3 +1 -1 0 1 0 0 -1 -1 204 115 1063 889 +Basisdiagnose +1 + +MDI_DOCK_INFO_END +5 +1 +6 +0 1 0 0 -1 -1 204 115 820 462 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 204 115 1063 889 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +0 0 +END_OF_DESKTOP_MEMBER +{C7BA2C34-75C6-4B9F-A244-6CAAD311B25A} +0 +End_Of_Object VBoxRoot 5 +1 -1 0 0 0 0 0 0 0 0 0 0 +End_Of_Object VUniqueBox 4 +0 +0 +End_Of_Object VNETControlBox 3 +31 +APPDIR Vector.CANalyzer.BasicDiagnosticsEditor.DLL +Vector.CANalyzer.BasicDiagnosticsEditor, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.BasicDiagnosticsEditor.VBasicDiagnosticsEditorWrapper +1 +1 +APPDIR CANoe_Net.DLL +CANoe_Net, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.ApplicationSerializer +2 +Application +2 +APPDIR Components\Vector.CANalyzer.Serialization\1.5.0.0\Vector.CANalyzer.Serialization.dll +Vector.CANalyzer.Serialization, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b273882a063429a6 +Vector.CANalyzer.Serialization.SerializationVersion +3 +SerializationVersion +3 +UInt16 +mMajor +1 +UInt16 +mMinor +0 +UInt16 +mPatch +0 +--TextFormatter: End of Object-- +--TextFormatter: End of Object-- +TypeRef:2 +2 +--TextFormatter: End of Object-- +End_Of_Object VNETStandaloneComponent 2 +0 +CalculateExtendedStatistics 1 +1 +VIPBGlobalSettings 2 Begin_Of_Object +1 +VIPBStackSetting 3 Begin_Of_Object +3 +0 +1 +VIPBAdapterSetting 4 Begin_Of_Object +4 +0 +4 +02:00:00:00:00:00 +End_Of_Serialized_Data 4 +4 +192.168.1.1 +End_Of_Serialized_Data 4 +4 +255.255.255.0 +End_Of_Serialized_Data 4 +4 +0.0.0.0 +End_Of_Serialized_Data 4 +1 +VPersistentIFv4Address 5 Begin_Of_Object +1 +VPersistentIFAddress 6 Begin_Of_Object +1 +VPersistentAddress 7 Begin_Of_Object +1 +End_Of_Object VPersistentAddress 7 +End_Of_Object VPersistentIFAddress 6 +5 +192.168.1.1 +End_Of_Serialized_Data 5 +5 +255.255.255.0 +End_Of_Serialized_Data 5 +End_Of_Object VPersistentIFv4Address 5 +0 +1 +11 + +1 +0 +0 +End_Of_Object VIPBAdapterSetting 4 +0 +1 +0 +End_Of_Object VIPBStackSetting 3 +End_Of_Object VIPBGlobalSettings 2 +1 +VIPBProtocolSettings 2 Begin_Of_Object +2 +6 +2147483648001 +13400-13402 +2147483648002 +13400 +2748779069440 +80, 8080 +2817498546179 +5555,5555 +10995116277765 + +10995116277766 + +3 +eth +Ethertype +9 +arp +1 +2054 +2054 +avtp +1 +8944 +8944 +ipv4 +1 +2048 +2048 +ipv6 +1 +34525 +34525 +mmrp +1 +35062 +35062 +msrp +1 +8938 +8938 +mvrp +1 +35061 +35061 +ptp +1 +35063 +35063 +rarp +1 +32821 +32821 +tcp +Port +5 +doip +1 +13400 +13400 +fsa +0 +http +2 +80 +80 +8080 +8080 +someip +0 +xcp +1 +5555 +5555 +udp +Port +7 +dhcpv4 +1 +67 +68 +doip +1 +13400 +13402 +fsa +0 +ntp +1 +123 +123 +pdumarshalling +0 +someip +0 +xcp +1 +5555 +5555 +End_Of_Object VIPBProtocolSettings 2 +289 +APPDIR CANoe_Net.DLL +CANoe_Net, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.SymbolSelectionListBox.Data.SymbolMRUList +1 +1 +APPDIR CANoe_Net.DLL +CANoe_Net, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.ConfiguredSysVar +2 +Item0 +2 +TypeRef:2 +Item1 +3 +TypeRef:2 +Item2 +4 +TypeRef:2 +Item3 +5 +TypeRef:2 +Item4 +6 +TypeRef:2 +Item5 +7 +TypeRef:2 +Item6 +8 +TypeRef:2 +Item7 +9 +TypeRef:2 +Item8 +10 +Int32 +Count +9 +APPDIR Components\Vector.CANalyzer.Serialization\1.5.0.0\Vector.CANalyzer.Serialization.dll +Vector.CANalyzer.Serialization, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b273882a063429a6 +Vector.CANalyzer.Serialization.SerializationVersion +3 +SerializationVersion +11 +UInt16 +mMajor +1 +UInt16 +mMinor +0 +UInt16 +mPatch +0 +--TextFormatter: End of Object-- +--TextFormatter: End of Object-- +TypeRef:2 +2 +String +mNativeObject +20 +ValueObjectConfiguration::VConfiguredSysVar 2 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 3 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 4 Begin_Of_Object +1 +VConfigSysVar 5 Begin_Of_Object +1 +VConfigEvent 6 Begin_Of_Object +1 +End_Of_Object VConfigEvent 6 +Ethernet1::Client_2::Data +OutputBits +End_Of_Object VConfigSysVar 5 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 4 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 3 +7 +0 +End_Of_Object ValueObjectConfiguration::VConfiguredSysVar 2 + +--TextFormatter: End of Object-- +TypeRef:2 +3 +String +mNativeObject +20 +ValueObjectConfiguration::VConfiguredSysVar 2 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 3 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 4 Begin_Of_Object +1 +VConfigSysVar 5 Begin_Of_Object +1 +VConfigEvent 6 Begin_Of_Object +1 +End_Of_Object VConfigEvent 6 +Airbus::Out +MacheKaffee +End_Of_Object VConfigSysVar 5 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 4 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 3 +-1 +0 +End_Of_Object ValueObjectConfiguration::VConfiguredSysVar 2 + +--TextFormatter: End of Object-- +TypeRef:2 +4 +String +mNativeObject +20 +ValueObjectConfiguration::VConfiguredSysVar 2 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 3 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 4 Begin_Of_Object +1 +VConfigSysVar 5 Begin_Of_Object +1 +VConfigEvent 6 Begin_Of_Object +1 +End_Of_Object VConfigEvent 6 +Ethernet1::Client_2::Data +OutputBits +End_Of_Object VConfigSysVar 5 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 4 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 3 +0 +0 +End_Of_Object ValueObjectConfiguration::VConfiguredSysVar 2 + +--TextFormatter: End of Object-- +TypeRef:2 +5 +String +mNativeObject +20 +ValueObjectConfiguration::VConfiguredSysVar 2 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 3 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 4 Begin_Of_Object +1 +VConfigSysVar 5 Begin_Of_Object +1 +VConfigEvent 6 Begin_Of_Object +1 +End_Of_Object VConfigEvent 6 +Airbus::Out +MachDasLicht +End_Of_Object VConfigSysVar 5 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 4 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 3 +-1 +0 +End_Of_Object ValueObjectConfiguration::VConfiguredSysVar 2 + +--TextFormatter: End of Object-- +TypeRef:2 +6 +String +mNativeObject +20 +ValueObjectConfiguration::VConfiguredSysVar 2 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 3 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 4 Begin_Of_Object +1 +VConfigSysVar 5 Begin_Of_Object +1 +VConfigEvent 6 Begin_Of_Object +1 +End_Of_Object VConfigEvent 6 +Ethernet1::Client_2::Data +InputBits +End_Of_Object VConfigSysVar 5 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 4 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 3 +1 +0 +End_Of_Object ValueObjectConfiguration::VConfiguredSysVar 2 + +--TextFormatter: End of Object-- +TypeRef:2 +7 +String +mNativeObject +20 +ValueObjectConfiguration::VConfiguredSysVar 2 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 3 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 4 Begin_Of_Object +1 +VConfigSysVar 5 Begin_Of_Object +1 +VConfigEvent 6 Begin_Of_Object +1 +End_Of_Object VConfigEvent 6 +Ethernet1::Client_2::Data +InputBits +End_Of_Object VConfigSysVar 5 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 4 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 3 +0 +0 +End_Of_Object ValueObjectConfiguration::VConfiguredSysVar 2 + +--TextFormatter: End of Object-- +TypeRef:2 +8 +String +mNativeObject +20 +ValueObjectConfiguration::VConfiguredSysVar 2 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 3 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 4 Begin_Of_Object +1 +VConfigSysVar 5 Begin_Of_Object +1 +VConfigEvent 6 Begin_Of_Object +1 +End_Of_Object VConfigEvent 6 +Airbus::In +Licht +End_Of_Object VConfigSysVar 5 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 4 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 3 +-1 +0 +End_Of_Object ValueObjectConfiguration::VConfiguredSysVar 2 + +--TextFormatter: End of Object-- +TypeRef:2 +9 +String +mNativeObject +20 +ValueObjectConfiguration::VConfiguredSysVar 2 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 3 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 4 Begin_Of_Object +1 +VConfigSysVar 5 Begin_Of_Object +1 +VConfigEvent 6 Begin_Of_Object +1 +End_Of_Object VConfigEvent 6 +Airbus::In +Kaffeemaschine +End_Of_Object VConfigSysVar 5 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 4 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 3 +-1 +0 +End_Of_Object ValueObjectConfiguration::VConfiguredSysVar 2 + +--TextFormatter: End of Object-- +TypeRef:2 +10 +String +mNativeObject +20 +ValueObjectConfiguration::VConfiguredSysVar 2 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 3 Begin_Of_Object +1 +ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 4 Begin_Of_Object +1 +VConfigSysVar 5 Begin_Of_Object +1 +VConfigEvent 6 Begin_Of_Object +1 +End_Of_Object VConfigEvent 6 +Ethernet1::Client_2::Info +InputBits +End_Of_Object VConfigSysVar 5 +End_Of_Object ValueObjectConfiguration::Detail::AbstractConfiguredValueObject 4 +End_Of_Object ValueObjectConfiguration::Detail::VConfiguredValueObjectBase 3 +-1 +0 +End_Of_Object ValueObjectConfiguration::VConfiguredSysVar 2 + +--TextFormatter: End of Object-- +J1939::VGlobalSettings 2 Begin_Of_Object +2 +1 +0 +End_Of_Object J1939::VGlobalSettings 2 +VNETStandaloneComponent 2 Begin_Of_Object +1 +VNETControlBox 3 Begin_Of_Object +2 +VUniqueBox 4 Begin_Of_Object +1 +VBoxRoot 5 Begin_Of_Object +1 +3 +1 1 1 1 160 166 -1 -1 172 63 788 501 +Startwerte +1 + +MDI_DOCK_INFO_END +5 +1 +6 +1 1 160 166 -1 -1 172 63 788 501 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +1 +0 +0 +1 +963 193 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 199 118 815 556 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +0 1 +1 +6 +0 1 0 0 -1 -1 199 118 815 556 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 199 118 815 556 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +END_OF_DESKTOP_MEMBER +{BF7B541D-D0C6-4C96-8143-1970174CCBEA} +0 +End_Of_Object VBoxRoot 5 +1 -1 0 0 0 0 0 0 0 0 0 0 +End_Of_Object VUniqueBox 4 +1 +1 -1 0 0 0 0 0 0 0 0 0 0 +0 +End_Of_Object VNETControlBox 3 +273 +APPDIR Vector.CANalyzer.StartValues.DLL +Vector.CANalyzer.StartValues, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.StartValues.StartValuesController +1 +1 +APPDIR CANoe_Net.DLL +CANoe_Net, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.ApplicationSerializer +2 +Application +2 +APPDIR Vector.CANalyzer.StartValues.DLL +Vector.CANalyzer.StartValues, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.StartValues.Model.StartValuesModel +3 +StartValuesModel +3 +APPDIR Vector.CANalyzer.StartValues.DLL +Vector.CANalyzer.StartValues, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.StartValues.GUI.GUISettings +4 +GUISettings +4 +APPDIR Components\Vector.CANalyzer.Serialization\1.5.0.0\Vector.CANalyzer.Serialization.dll +Vector.CANalyzer.Serialization, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b273882a063429a6 +Vector.CANalyzer.Serialization.SerializationVersion +5 +SerializationVersion +5 +UInt16 +mMajor +1 +UInt16 +mMinor +0 +UInt16 +mPatch +1 +--TextFormatter: End of Object-- +--TextFormatter: End of Object-- +TypeRef:2 +2 +--TextFormatter: End of Object-- +TypeRef:3 +3 +Boolean +SetValuesOnMeasurementStart +True + +mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 +System.Collections.Generic.List`1[[Vector.CANalyzer.StartValues.Model.StartValue, Vector.CANalyzer.StartValues, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null]] +6 +StartValues +6 +TypeRef:5 +SerializationVersion +7 +UInt16 +mMajor +1 +UInt16 +mMinor +0 +UInt16 +mPatch +0 +--TextFormatter: End of Object-- +--TextFormatter: End of Object-- +TypeRef:4 +4 + +mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 +System.Collections.Generic.List`1[[Vector.CANalyzer.StartValues.GUI.ColumnSettings, Vector.CANalyzer.StartValues, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null]] +7 +ColumnSettings +8 +TypeRef:5 +SerializationVersion +9 +UInt16 +mMajor +1 +UInt16 +mMinor +0 +UInt16 +mPatch +0 +--TextFormatter: End of Object-- +--TextFormatter: End of Object-- +TypeRef:6 +6 +Array +_items +10 +APPDIR Vector.CANalyzer.StartValues.DLL +Vector.CANalyzer.StartValues, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.StartValues.Model.StartValue +8 +1 +0 +-1 +Int32 +_size +0 +Int32 +_version +0 +--TextFormatter: End of Object-- +TypeRef:7 +8 +Array +_items +11 +APPDIR Vector.CANalyzer.StartValues.DLL +Vector.CANalyzer.StartValues, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.StartValues.GUI.ColumnSettings +9 +1 +0 +7 +TypeRef:9 +ArrayElement +12 +TypeRef:9 +ArrayElement +13 +TypeRef:9 +ArrayElement +14 +TypeRef:9 +ArrayElement +15 +TypeRef:9 +ArrayElement +16 +TypeRef:9 +ArrayElement +17 +TypeRef:9 +ArrayElement +18 + +mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 +System.Object +10 +ArrayElement +0 +Int32 +_size +7 +Int32 +_version +7 +--TextFormatter: End of Object-- +TypeRef:9 +12 +Int32 +mHandle +0 +Int32 +mDefaultWidth +25 +Int32 +mWidth +25 +Int32 +SortOrderInt +0 +TypeRef:5 +SerializationVersion +19 +UInt16 +mMajor +1 +UInt16 +mMinor +0 +UInt16 +mPatch +1 +--TextFormatter: End of Object-- +--TextFormatter: End of Object-- +TypeRef:9 +13 +Int32 +mHandle +1 +Int32 +mDefaultWidth +150 +Int32 +mWidth +150 +Int32 +SortOrderInt +0 +--TextFormatter: End of Object-- +TypeRef:9 +14 +Int32 +mHandle +2 +Int32 +mDefaultWidth +75 +Int32 +mWidth +75 +Int32 +SortOrderInt +0 +--TextFormatter: End of Object-- +TypeRef:9 +15 +Int32 +mHandle +3 +Int32 +mDefaultWidth +75 +Int32 +mWidth +75 +Int32 +SortOrderInt +0 +--TextFormatter: End of Object-- +TypeRef:9 +16 +Int32 +mHandle +4 +Int32 +mDefaultWidth +75 +Int32 +mWidth +75 +Int32 +SortOrderInt +0 +--TextFormatter: End of Object-- +TypeRef:9 +17 +Int32 +mHandle +5 +Int32 +mDefaultWidth +50 +Int32 +mWidth +50 +Int32 +SortOrderInt +0 +--TextFormatter: End of Object-- +TypeRef:9 +18 +Int32 +mHandle +6 +Int32 +mDefaultWidth +25 +Int32 +mWidth +25 +Int32 +SortOrderInt +0 +--TextFormatter: End of Object-- +End_Of_Object VNETStandaloneComponent 2 +VStandaloneLoggingUserConfig 2 Begin_Of_Object +2 +0 +VLogCfgData 3 Begin_Of_Object +5 +1 +1 +0 +1 +1 +0 +0 +0 +1024 +60 +1 +0 +1 +1 +0 +0 +0 +0 +0 +2 +0 +0 +3 +VLogExportPersister 4 Begin_Of_Object +3 +1416 +11060193 + 1 "..\..\..\..\..\Public\Documents\Vector\CANwin\Public\Documents\Vector\CANwin 8.0.918\templates" + 1 "..\..\..\..\..\Public\Documents\Vector\CANwin\Public\Documents\Vector\CANwin 8.0.918\templates" + 1 "" +0 +2 +1 +:: +, +. + +0 +2 +0 +0.10000000000000001 +6 +1 +0 +2 +19 +0.10000000000000001 +1 +0 +End_Of_Object VLogExportPersister 4 + +End_Of_Serialized_Data 3 + 1 "..\..\..\..\..\Public\Documents\Vector\CANwin\Public\Documents\demos\demo_can_cn\cansystemdemo\CANOE.blf" +0 +0 +1 +30 +80 +0 +End_Of_Object VLogCfgData 3 +0 +VAutoRunPreLoggingCaplBox 3 Begin_Of_Object +1 + 0 "" +0 +End_Of_Object VAutoRunPreLoggingCaplBox 3 +End_Of_Object VStandaloneLoggingUserConfig 2 +Mapping::VMappingManager 2 Begin_Of_Object +1 +0 +End_Of_Object Mapping::VMappingManager 2 +VTSystemControl 0 +TestConfigurationSetup +VTestConfigurationSetupWrapper 2 Begin_Of_Object +1 +VNETStandaloneComponent 3 Begin_Of_Object +1 +VNETControlBox 4 Begin_Of_Object +2 +VUniqueBox 5 Begin_Of_Object +1 +VBoxRoot 6 Begin_Of_Object +1 +3 +1 -1 0 1 0 0 0 0 202 119 809 478 +Testkonfigurationen für Test Units +1 + +MDI_DOCK_INFO_END +5 +1 +6 +0 1 0 0 -1 -1 202 119 809 478 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 202 119 809 478 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +0 1 +1 +6 +0 1 0 0 -1 -1 202 119 809 478 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 202 119 809 478 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +END_OF_DESKTOP_MEMBER +{5FA19BE6-097B-40BD-8B0E-6633D65EF2C4} +0 +End_Of_Object VBoxRoot 6 +1 -1 0 0 0 0 0 0 0 0 0 0 +End_Of_Object VUniqueBox 5 +1 +1 -1 0 0 0 0 0 0 0 0 0 0 +1 +End_Of_Object VNETControlBox 4 +31 +APPDIR Vector.CANoe.TestConfigurationSetup.DLL +Vector.CANoe.TestConfigurationSetup, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANoe.TestConfigurationSetup.TestConfigurationSetup +1 +1 +APPDIR CANoe_Net.DLL +CANoe_Net, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.ApplicationSerializer +2 +Application +2 +APPDIR Components\Vector.CANalyzer.Serialization\1.5.0.0\Vector.CANalyzer.Serialization.dll +Vector.CANalyzer.Serialization, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b273882a063429a6 +Vector.CANalyzer.Serialization.SerializationVersion +3 +SerializationVersion +3 +UInt16 +mMajor +1 +UInt16 +mMinor +0 +UInt16 +mPatch +1 +--TextFormatter: End of Object-- +--TextFormatter: End of Object-- +TypeRef:2 +2 +--TextFormatter: End of Object-- +End_Of_Object VNETStandaloneComponent 3 +0 +End_Of_Object VTestConfigurationSetupWrapper 2 +AFDXVLStatisticSysVars +NAFDX::NStatisticsMonitor::VSVClient 2 Begin_Of_Object +1 +Begin_Of_Multi_Line_String +2 + + +End_Of_Serialized_Data 2 +End_Of_Object NAFDX::NStatisticsMonitor::VSVClient 2 +DocumentViewer +VDocumentViewerWrapper 2 Begin_Of_Object +1 +VNETStandaloneComponent 3 Begin_Of_Object +1 +VNETControlBox 4 Begin_Of_Object +2 +VUniqueBox 5 Begin_Of_Object +1 +VBoxRoot 6 Begin_Of_Object +1 +3 +1 -1 0 1 0 0 0 0 199 118 800 473 +Dokumente +1 + +MDI_DOCK_INFO_END +5 +1 +6 +0 1 0 0 -1 -1 199 118 800 473 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 199 118 800 473 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +0 1 +1 +6 +0 1 0 0 -1 -1 199 118 800 473 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 199 118 800 473 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +END_OF_DESKTOP_MEMBER +{453ACD9D-8489-41B4-8298-C715BADBED58} +0 +End_Of_Object VBoxRoot 6 +1 -1 0 0 0 0 0 0 0 0 0 0 +End_Of_Object VUniqueBox 5 +1 +1 -1 0 0 0 0 0 0 0 0 0 0 +1 +End_Of_Object VNETControlBox 4 +37 +APPDIR Vector.CANalyzer.DocumentViewer.DLL +Vector.CANalyzer.DocumentViewer, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.DocumentViewer.ComponentWrapper +1 +1 +APPDIR CANoe_Net.DLL +CANoe_Net, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.ApplicationSerializer +2 +Application +2 +Boolean +SplitterExpanded +True +Int32 +DocumentListHeight +150 +APPDIR Components\Vector.CANalyzer.Serialization\1.5.0.0\Vector.CANalyzer.Serialization.dll +Vector.CANalyzer.Serialization, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b273882a063429a6 +Vector.CANalyzer.Serialization.SerializationVersion +3 +SerializationVersion +3 +UInt16 +mMajor +1 +UInt16 +mMinor +0 +UInt16 +mPatch +0 +--TextFormatter: End of Object-- +--TextFormatter: End of Object-- +TypeRef:2 +2 +--TextFormatter: End of Object-- +End_Of_Object VNETStandaloneComponent 3 +0 +0 +End_Of_Object VDocumentViewerWrapper 2 +AutomationSequences +VAutomationSequencesWrapper 2 Begin_Of_Object +1 +VNETStandaloneComponent 3 Begin_Of_Object +1 +VNETControlBox 4 Begin_Of_Object +2 +VUniqueBox 5 Begin_Of_Object +1 +VBoxRoot 6 Begin_Of_Object +1 +3 +1 -1 0 1 0 0 0 0 199 118 800 473 +Automatisierungssequenzen +1 + +MDI_DOCK_INFO_END +5 +1 +6 +0 1 0 0 -1 -1 199 118 800 473 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 199 118 800 473 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +0 1 +1 +6 +0 1 0 0 -1 -1 199 118 800 473 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 199 118 800 473 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +END_OF_DESKTOP_MEMBER +{7EA440CD-851A-42EA-96CC-6B1D602C5666} +0 +End_Of_Object VBoxRoot 6 +1 -1 0 0 0 0 0 0 0 0 0 0 +End_Of_Object VUniqueBox 5 +1 +1 -1 0 0 0 0 0 0 0 0 0 0 +1 +End_Of_Object VNETControlBox 4 +34 +APPDIR Vector.CANalyzer.AutomationSequences.DLL +Vector.CANalyzer.AutomationSequences, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.AutomationSequences.ComponentWrapper +1 +1 +APPDIR CANoe_Net.DLL +CANoe_Net, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANalyzer.ApplicationSerializer +2 +Application +2 +Int32 +SelectedTabPage +0 +APPDIR Components\Vector.CANalyzer.Serialization\1.5.0.0\Vector.CANalyzer.Serialization.dll +Vector.CANalyzer.Serialization, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b273882a063429a6 +Vector.CANalyzer.Serialization.SerializationVersion +3 +SerializationVersion +3 +UInt16 +mMajor +1 +UInt16 +mMinor +0 +UInt16 +mPatch +0 +--TextFormatter: End of Object-- +--TextFormatter: End of Object-- +TypeRef:2 +2 +--TextFormatter: End of Object-- +End_Of_Object VNETStandaloneComponent 3 +End_Of_Object VAutomationSequencesWrapper 2 +LogFileConverter +VLogFileConverter 2 Begin_Of_Object +1 +2 +VLogExportPersister 3 Begin_Of_Object +3 +1416 +11060193 + 1 "" + 1 "" + 1 "" +0 +2 +1 +:: +, +. + +0 +2 +0 +0.10000000000000001 +6 +1 +0 +2 +19 +0.10000000000000001 +1 +0 +End_Of_Object VLogExportPersister 3 + +End_Of_Serialized_Data 2 +End_Of_Object VLogFileConverter 2 +ThreadingSettings +VPersistentThreadingSettings 2 Begin_Of_Object +1 +1 +0 +End_Of_Object VPersistentThreadingSettings 2 +GlSignalSamplingSettings +GlLoggerConfig::VGlSignalSamplingSettings 2 Begin_Of_Object +1 +0 +End_Of_Object GlLoggerConfig::VGlSignalSamplingSettings 2 +NodeLayerConfiguration +32 +APPDIR Vector.CANoe.NodeLayer.Configuration.Persistency.DLL +Vector.CANoe.NodeLayer.Configuration.Persistency, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANoe.NodeLayer.Configuration.Persistency.Persistor +1 +1 +String +NodeLayers +7 + + 3 + + + + + +APPDIR Components\Vector.CANalyzer.Serialization\1.5.0.0\Vector.CANalyzer.Serialization.dll +Vector.CANalyzer.Serialization, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b273882a063429a6 +Vector.CANalyzer.Serialization.SerializationVersion +2 +SerializationVersion +2 +UInt16 +mMajor +1 +UInt16 +mMinor +0 +UInt16 +mPatch +0 +--TextFormatter: End of Object-- +--TextFormatter: End of Object-- +ILConfigurationComponent +VNETStandaloneComponent 2 Begin_Of_Object +1 +VNETControlBox 3 Begin_Of_Object +2 +VUniqueBox 4 Begin_Of_Object +1 +VBoxRoot 5 Begin_Of_Object +1 +3 +1 -1 0 1 0 0 0 0 238 168 955 675 + +1 + +MDI_DOCK_INFO_END +5 +1 +6 +0 1 0 0 -1 -1 238 168 955 675 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 238 168 955 675 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +0 1 +1 +6 +0 1 0 0 -1 -1 238 168 955 675 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +6 +0 1 0 0 -1 -1 238 168 955 675 +6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 32767 0 0 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 0 0 +END_OF_DOCK_INFO +0 +-1 +0 +0 +0 +0 0 +END_OF_DESKTOP_DATA +END_OF_DESKTOP_DATA_COLLECTION +0 +END_OF_DESKTOP_MEMBER +{35C77CE4-A82E-4D04-9136-D1178FC6E7F5} +0 +End_Of_Object VBoxRoot 5 +1 -1 0 0 0 0 0 0 0 0 0 0 +End_Of_Object VUniqueBox 4 +1 +1 -1 0 0 0 0 0 0 0 0 0 0 +1 +End_Of_Object VNETControlBox 3 +47 +APPDIR Vector.CANoe.ILConfiguration.DLL +Vector.CANoe.ILConfiguration, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANoe.ILConfiguration.ILConfigurationComponent +1 +1 +APPDIR Vector.CANoe.ILConfiguration.DLL +Vector.CANoe.ILConfiguration, Version=8.2.40.0, Culture=neutral, PublicKeyToken=null +Vector.CANoe.ILConfiguration.GUI.GUISettings +2 +GUISettings +2 +APPDIR Components\Vector.CANalyzer.Serialization\1.5.0.0\Vector.CANalyzer.Serialization.dll +Vector.CANalyzer.Serialization, Version=1.5.0.0, Culture=neutral, PublicKeyToken=b273882a063429a6 +Vector.CANalyzer.Serialization.SerializationVersion +3 +SerializationVersion +3 +UInt16 +mMajor +1 +UInt16 +mMinor +0 +UInt16 +mPatch +0 +--TextFormatter: End of Object-- +--TextFormatter: End of Object-- +TypeRef:2 +2 +Boolean +DbcSettingsAvailable +False +TypeRef:3 +SerializationVersion +4 +UInt16 +mMajor +1 +UInt16 +mMinor +0 +UInt16 +mPatch +0 +--TextFormatter: End of Object-- +--TextFormatter: End of Object-- +End_Of_Object VNETStandaloneComponent 2 +End_Of_Object VGlobalConfiguration 1 diff --git a/Modbus-DLL/include/CAPL/MakeConfig.can b/Modbus-DLL/include/CAPL/MakeConfig.can new file mode 100644 index 0000000..f2c2d2d --- /dev/null +++ b/Modbus-DLL/include/CAPL/MakeConfig.can @@ -0,0 +1,529 @@ +/*@!Encoding:1252*/ +includes +{ + #include "include/ModbusUdpClientCommon.cin" + #include "include/ModbusFunctions.cin" +} + +variables +{ + struct device + { + char Ip[16]; + char IpLsb[4]; + char IpNet[4]; + enum Vendor Vendor; + word SerialCode; + word DeviceCode; + struct deviceIOs DeviceIOs; + }; + + char[16] gIps[long]; + char gScanFirstIp[16]; + char gScanLastIp[16]; + + char fnSysvar[40]; // Filename of Sysvars + char fnDbc[40]; // Filename of DBC + char name[20]; // Name of project + dword ips[50]; // detected IPs + + + file f; + byte gIpNets[long]; + struct device gIpsSorted[long]; + dword gScanFirst, gScanLast; + word ADi, ADn, ADl; + + byte gMaxTransmissionCount; +} + +on preStart +{ + // List of IPs of devices go here + /* + strncpy(gIps[0], "192.168.1.3", 16); + strncpy(gIps[2], "192.168.1.4", 16); + strncpy(gIps[3], "192.168.1.8", 16); + */ + + // Scan a range of IPs for devices. Start and Stop go here + // Please note: Currelty .255 will be skipped! + strncpy(gScanFirstIp, "192.168.1.2", 16); + strncpy(gScanLastIp, "192.168.1.10", 16); + + // Name of the project + strncpy(name, "Modbus", elCount(name)); + // Paths to the generated files relative to .cfg + strncpy(fnSysvar, "include/SysVars/generated.vsysvar", elCount(fnSysvar)); + strncpy(fnDbc, "include/DBC/generated.dbc", elCount(fnDbc)); + + OutputDebugLevel = Error; +} + +on start +{ + gMaxTransmissionCount = @sysvar::Config::Modbus::MaxTransmissionCount; + + if (gIps.Size() == 0) + DetectDevices(); + else + MakeIpNets(); +} + +/// +void PutString(file f, char str[]) +{ + f.PutString(str, strlen(str)); +} +/// +void PutString(file f, word d) +{ + char str[6]; + ltoa(d, str, 10); + f.PutString(str, strlen(str)); +} +/// +void PutString(file f, byte d) +{ + char str[4]; + ltoa(d, str, 10); + f.PutString(str, strlen(str)); +} + +// Step 1: Detect active devices and collect IP addresses +/// +void DetectDevices() +{ + @sysvar::Config::Modbus::MaxTransmissionCount = 1; + write("Scanning from %s to %s with timeout of %d ms", gScanFirstIp, gScanLastIp, @sysvar::Config::Modbus::RequestTimeout); + gScanFirst = ipGetAddressAsNumber(gScanFirstIp); + gScanLast = ipGetAddressAsNumber(gScanLastIp); + write("%d.%d.%d.%d ", gScanFirst & 0xFF, (gScanFirst >> 8) & 0xFF, (gScanFirst >> 16) & 0xFF, gScanFirst >> 24); + ModbusConnectTo(gScanFirst, @sysvar::Config::Modbus::Port); + ModbusReadBits(0, 1); +} +/// +void DetectDevicesNext() +{ + // next IP + // 0xFE...... --> Skip xxx.xxx.xxx.255 which is broadcast address in 192.168.xxx.0 nets + if ((gScanFirst & 0xFFFFFF00) == 0xFEFFFF00) + { + gScanFirst &= 0x000000FF; + gScanFirst += 0x00000001; + write("%d.%d.%d.%d ", gScanFirst & 0xFF, (gScanFirst >> 8) & 0xFF, (gScanFirst >> 16) & 0xFF, gScanFirst >> 24); + } + else if ((gScanFirst & 0xFFFF0000) == 0xFEFF0000) + { + gScanFirst &= 0x0000FFF; + gScanFirst += 0x00000100; + write("%d.%d.%d.%d ", gScanFirst & 0xFF, (gScanFirst >> 8) & 0xFF, (gScanFirst >> 16) & 0xFF, gScanFirst >> 24); + } + else if ((gScanFirst & 0xFF000000) == 0xFE000000) + { + gScanFirst &= 0x00FFFFFF; + gScanFirst += 0x00010000; + + write("%d.%d.%d.%d ", gScanFirst & 0xFF, (gScanFirst >> 8) & 0xFF, (gScanFirst >> 16) & 0xFF, gScanFirst >> 24); + } + else + { + gScanFirst += 0x01000000; + } + if (gScanFirst == gScanLast) + { + @sysvar::Config::Modbus::MaxTransmissionCount = gMaxTransmissionCount; + MakeIpNets(); + return; + } + writeEx(1, 1, "."); + gRemoteIP = gScanFirst; // Don't open new socket, it takes too much time. + ModbusReadBits(0, 1); +} +/// +void OnModbusReadBitsFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap) +{ + DetectDevicesNext(); +} +/// +void OnModbusReadBitsSuccess(struct ModbusResReceiveBits mbres, byte bitStatus[], struct ModbusReqRead mbreq) +{ + ipGetAddressAsString(gScanFirst, gIps[gScanFirst], 16); + DetectDevicesNext(); +} + +// Step 2: Sort into subnets +// Sort the IPs from gIps to gIpsSorted and add their subnet to gIpNets +/// +void MakeIpNets() +{ + long ipNum; + + if (gIps.Size() == 0) + { + stop(); + return; + } + + for (long i : gIps) + { + ipNum = ipGetAddressAsNumber(gIps[i]); // convert IP to dword + + gIpNets[(ipNum >> 16) & 0xFF] = 1; // add subnet + ips[gIpsSorted.size()] = ipNum; // add ip to array + strncpy(gIpsSorted[ipNum].IP, gIps[i], 16); // copy to new array + ltoa((ipNum >> 16) & 0xFF, gIpsSorted[ipNum].IpNet, 10); // add .IpNet + ltoa((ipNum >> 24) & 0xFF, gIpsSorted[ipNum].IpLsb, 10); // add .IpLsb + + gIps.Remove(i); + } + + AnalyzeDevices(); +} + + +// Step 3: Retreive configuration of devices +/// +void AnalyzeDevices() +{ + ADn = 0; + ADi = 0; + ADl = gIpsSorted.Size(); + write("Analyzing %s...", gIpsSorted[ips[ADi]].Ip); + gIpsSorted[ips[ADi]].Vendor = Wago; + if (gRemoteIP != INVALID_IP) + gRemoteIP = ips[ADi]; + else + ModbusConnectTo(ips[ADi], @sysvar::Config::Modbus::Port); + ModbusReadRegisters(0x2011, 1); + ModbusReadRegisters(0x2012, 1); + ModbusReadRegisters(0x2030, 65); + ModbusReadRegisters(0x2031, 64); + ModbusReadRegisters(0x2032, 64); + ModbusReadRegisters(0x2033, 63); +} + +/// +void AnalyzeDevicesNext() +{ + if (++ADi >= ADl) // we have analyzed all devices + { + MakeFiles(); + return; + } + + ADn = 0; + gRemoteIP = ips[ADi]; + write("Analyzing %s...", gIpsSorted[ips[ADi]].Ip); + ModbusReadRegisters(0x2011, 1); + ModbusReadRegisters(0x2012, 1); + ModbusReadRegisters(0x2030, 65); + ModbusReadRegisters(0x2031, 64); + ModbusReadRegisters(0x2032, 64); + ModbusReadRegisters(0x2033, 63); +} + +/// +void OnModbusReadRegistersFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap) +{ + switch (error) + { + case FinalTimeout: + writeLineEx(0, 3, "Error while analyzing %s! The device did not respond! Ignoring...", gIpsSorted[ips[ADi]].IP); + gQueueAck.Clear(); + gQueuePending.Clear(); + gQueueSent.Clear(); + gIpsSorted.Remove(ips[ADi]); + AnalyzeDevicesNext(); + break; + case Exception: + writeLineEx(0, 3, "Error while analyzing %s! The device respond with exception code %d! Ignoring...", gIpsSorted[ips[ADi]].IP, ex); + gQueueAck.Clear(); + gQueuePending.Clear(); + gQueueSent.Clear(); + gIpsSorted.Remove(ips[ADi]); + AnalyzeDevicesNext(); + break; + } +} + +/// +void OnModbusReadRegistersSuccess(struct ModbusResReceiveRegisters mbres, struct ModbusReqRead mbreq) +{ + byte i; + + switch (mbreq.Address) + { + case 0x2011: + gIpsSorted[ips[ADi]].serialCode = mbres.Data[0]; + break; + case 0x2012: + gIpsSorted[ips[ADi]].deviceCode = mbres.Data[0]; + break; + case 0x2030: + case 0x2031: + case 0x2032: + case 0x2033: + for (i = 0; i < mbreq.Count; i++) + { + if (mbres.Data[i] == 0x0000) + break; + ParseDeviceCode(mbres.Data[i], gIpsSorted[ips[ADi]].Vendor, gIpsSorted[ips[ADi]].DeviceIOs); + } + break; + } + + if (++ADn == 6) + AnalyzeDevicesNext(); +} + +// Step 4: Create the files with the queried data +/// +void MakeFiles() +{ + GenSysvars(); + GenDbc(); + stop(); +} + +// Generate the SysVars XML +/// +void GenSysvars() +{ + write("GenSysvars() -> %s", fnSysvar); + f.Open(fnSysvar, 0, 0); // rewrite file in ASCII + + PutString(f, "\n"); + PutString(f, "\n"); + PutString(f, " \n"); + + PutString(f, " \n"); + PutString(f, " \n"); + PutString(f, " \n"); + PutString(f, " \n"); + PutString(f, " \n"); + PutString(f, " \n"); + PutString(f, " \n"); + PutString(f, " \n"); + PutString(f, " \n"); + PutString(f, " \n"); + + for (long net : gIpNets) + { + byte nett; + nett = net; + PutString(f, " \n"); + + for (long ipN : gIpsSorted) + { + + if (((ipN >> 16) & 0xFF) != net) + continue; + + PutString(f, " \n"); + + // Namespace Config + PutString(f, " \n"); + // IP + PutString(f, " \n"); + // Intveral + PutString(f, " \n"); + PutString(f, " \n"); + + //Namespace Info + PutString(f, " \n"); + // Vendor + PutString(f, " \n"); + PutString(f, " \n"); + PutString(f, " \n"); + PutString(f, " \n"); + PutString(f, " \n"); + PutString(f, " \n"); + // SerialCode + PutString(f, " \n"); + // DeviceCode + PutString(f, " \n"); + // Modules + gIpsSorted[ipN].DeviceIOs.Modules[strlen(gIpsSorted[ipN].DeviceIOs.Modules)-1] = 0; + PutString(f, " \n"); + // InputRegisters + PutString(f, " \n"); + // InputBits + PutString(f, " \n"); + // OutputRegisters + PutString(f, " \n"); + // OutputBits + PutString(f, " \n"); + PutString(f, " \n"); + + // Namespace Data + PutString(f, " \n"); + // InputRegisters + PutString(f, " \n"); + // InputBits + PutString(f, " \n"); + // OutputRegisters + PutString(f, " \n"); + // OutputBits + PutString(f, " \n"); + + PutString(f, " \n"); + PutString(f, " \n"); + } + PutString(f, " \n"); + } + + PutString(f, " \n"); + PutString(f, "\n"); + + f.Close(); +} + +// Generate the Database +/// +void GenDbc() +{ + write("GenDbc() -> %s", fnDbc); + f.Open(fnDbc, 0, 0); // rewrite file in ASCII + + PutString(f, "VERSION \"\"\n\n\n"); + PutString(f, "NS_ :\n"); + PutString(f, " NS_DESC_\n"); + PutString(f, " CM_\n"); + PutString(f, " BA_DEF_\n"); + PutString(f, " BA_\n"); + PutString(f, " VAL_\n"); + PutString(f, " CAT_DEF_\n"); + PutString(f, " CAT_\n"); + PutString(f, " FILTER\n"); + PutString(f, " BA_DEF_DEF_\n"); + PutString(f, " EV_DATA_\n"); + PutString(f, " ENVVAR_DATA_\n"); + PutString(f, " SGTYPE_\n"); + PutString(f, " SGTYPE_VAL_\n"); + PutString(f, " BA_DEF_SGTYPE_\n"); + PutString(f, " BA_SGTYPE_\n"); + PutString(f, " SIG_TYPE_REF_\n"); + PutString(f, " VAL_TABLE_\n"); + PutString(f, " SIG_GROUP_\n"); + PutString(f, " SIG_VALTYPE_\n"); + PutString(f, " SIGTYPE_VALTYPE_\n"); + PutString(f, " BO_TX_BU_\n"); + PutString(f, " BA_DEF_REL_\n"); + PutString(f, " BA_REL_\n"); + PutString(f, " BA_DEF_DEF_REL_\n"); + PutString(f, " BU_SG_REL_\n"); + PutString(f, " BU_EV_REL_\n"); + PutString(f, " BU_BO_REL_\n"); + PutString(f, " SG_MUL_VAL_\n"); + PutString(f, "\n"); + PutString(f, "BS_:\n"); + PutString(f, "\nBU_:"); + + for (long ipN : gIpsSorted) + { + PutString(f, " Client_"); + //PutString(f, gIpsSorted[ipN].IpNet); + //PutString(f, "_"); + PutString(f, gIpsSorted[ipN].IpLsb); + } + PutString(f, "\n\n\n\n"); + PutString(f, "BA_DEF_ BU_ \"NodeLayerModules\" STRING ;\n"); + PutString(f, "BA_DEF_ \"DBName\" STRING ;\n"); + PutString(f, "BA_DEF_ \"BusType\" STRING ;\n"); + PutString(f, "BA_DEF_DEF_ \"NodeLayerModules\" \"Ethernet_IL.DLL\";\n"); + PutString(f, "BA_DEF_DEF_ \"DBName\" \"\";\n"); + PutString(f, "BA_DEF_DEF_ \"BusType\" \"Ethernet\";\n"); + PutString(f, "BA_ \"BusType\" \"Ethernet\";\n"); + PutString(f, "BA_ \"DBName\" \""); + PutString(f, name); + PutString(f, "\";\n"); + + f.Close(); +} + + + + + + + + +/// +void OnModbusClientPanics(enum FatalErrors reason) +{ + writeLineEx(0, 4, "<%NODE_NAME%> FATAL! %d", reason); + switch(reason) + { + case ParsingBuffer: + case ModbusPackageWasSplit: + case DeviceCodeUnknown: + case VendorIdUnknown: + case ConnectionError: + break; + } +} +/// +void OnModbusWriteBitFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap){} +/// +void OnModbusWriteRegisterFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap){} +/// +void OnModbusWriteMasksFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap){} +/// +void OnModbusReadWriteRegistersFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap){} +/// +void OnModbusWriteBitsFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap){} +/// +void OnModbusWriteRegistersFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap){} +/// +void OnModbusWriteBitSuccess(struct ModbusResConfirmSingle mbc){} +/// +void OnModbusWriteRegisterSuccess(struct ModbusResConfirmSingle mbc){} +/// +void OnModbusWriteBitsSuccess(struct ModbusResConfirmMultiple mbc){} +/// +void OnModbusWriteRegistersSuccess(struct ModbusResConfirmMultiple mbc){} +/// +void OnModbusWriteMasksSuccess(struct ModbusResConfirmMasks mbc){} \ No newline at end of file diff --git a/Modbus-DLL/include/CAPL/MakeConfig.cbf b/Modbus-DLL/include/CAPL/MakeConfig.cbf new file mode 100644 index 0000000000000000000000000000000000000000..7d13f4e757017255b74878f8b5646366f60cd248 GIT binary patch literal 206780 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 literal 0 HcmV?d00001 diff --git a/Modbus-DLL/include/CAPL/ModbusClient.can b/Modbus-DLL/include/CAPL/ModbusClient.can new file mode 100644 index 0000000..0b87453 --- /dev/null +++ b/Modbus-DLL/include/CAPL/ModbusClient.can @@ -0,0 +1,246 @@ +/*@!Encoding:1252*/ + +includes +{ + #include "include\ModbusUdpClientCommon.cin" + #include "include\ModbusFunctions.cin" +} + +variables +{ + msTimer gtRead; +} + +// Get information of local network interface such like ip address + +on preStart +{ + writeClear(0); + setStartdelay(10); + OutputDebugLevel = Warning; +} + +on start +{ + ModbusInit(); + + + // Read serial code, additional stuff is done in OnModbusReceiveRegisters + // This has to be done by MakeConfig to properly size the arrays + //ModbusReadRegisters(0x2011, 1); + //ModbusReadRegisters(0x2012, 1); + //ModbusReadRegisters(0x2030, 65); + //ModbusReadRegisters(0x2031, 64); + //ModbusReadRegisters(0x2032, 64); + //ModbusReadRegisters(0x2033, 63); + if (@sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::OutputBits > 0) + ModbusReadBits(0x200, @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::OutputBits); + if (@sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::OutputRegisters > 0) + ModbusReadRegisters(0x200, @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::OutputRegisters); + + setTimerCyclic(gtRead, 1, @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Config::Interval); +} + + +// Modbus events ---------------------------------------------------------------------- +void OnModbusReadBitsFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap) +{ + word i; + + switch (error) + { + case Exception: + break; + case Timeout: + break; + case FinalTimeout: + sysBeginVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "InputBits"); + for (i = 0; i < @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::InputBits; i++) + @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data::InputBits[i] = -1; + sysEndVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "InputBits"); + break; + } +} + +void OnModbusReadRegistersFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap) +{ + byte i; + + switch (error) + { + case Exception: + break; + case Timeout: + break; + case FinalTimeout: + sysBeginVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "InputRegisters"); + for (i = 0; i < @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::InputRegisters; i++) + @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data::InputRegisters[i] = -1; + sysEndVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "InputRegisters"); + break; + } +} + +void OnModbusWriteBitFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap) +{ +} +void OnModbusWriteRegisterFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap) +{ +} +void OnModbusWriteMasksFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap) +{ +} +void OnModbusReadWriteRegistersFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap) +{ +} +void OnModbusWriteBitsFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap) +{ +} +void OnModbusWriteRegistersFailed(enum ModbusRequestError error, enum ModbusException ex, struct ModbusApHeader mbap) +{ +} + + +void OnModbusReadBitsSuccess(struct ModbusResReceiveBits mbres, byte bitStatus[], struct ModbusReqRead mbreq) +{ + word i; + + switch(mbreq.Address) + { + case 0x200: // set output bits + sysBeginVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "OutputBits"); + for (i = 0; i < @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::OutputBits; i++) + @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data::OutputBits[i] = bitStatus[i]; + sysEndVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "OutputBits"); + break; + default: // set input bits + sysBeginVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "InputBits"); + for (i = 0; i < @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::InputBits; i++) + @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data::InputBits[i] = bitStatus[i]; + sysEndVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "InputBits"); + break; + } +} + +void OnModbusReadRegistersSuccess(struct ModbusResReceiveRegisters mbres, struct ModbusReqRead mbreq) +{ + char str[20*5]; + long fehler; + byte i; + + switch (mbreq.Address) + { + case 0x200: // set output registers + sysBeginVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "OutputRegisters"); + for (i = 0; i < @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::OutputRegisters; i++) + @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data::OutputRegisters[i] = mbres.Data[i]; + sysEndVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "OutputRegisters"); + break; + case 0x000: // set output registers + sysBeginVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "InputRegisters"); + for (i = 0; i < @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::InputRegisters; i++) + @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data::InputRegisters[i] = mbres.Data[i]; + sysEndVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "InputRegisters"); + break; + default: + // Not recognized + dbin_to_strhex(mbres.Data, str); + writeLineEx(0, 1, "<%NODE_NAME%> OnModbusReceiveRegisters: Received %d bytes at 0x%04X: %s", mbres.ByteCount, mbreq.Address, str); + break; + } +} + +void OnModbusWriteBitSuccess(struct ModbusResConfirmSingle mbc) +{ +} +void OnModbusWriteRegisterSuccess(struct ModbusResConfirmSingle mbc) +{ +} +void OnModbusWriteBitsSuccess(struct ModbusResConfirmMultiple mbc) +{ +} +void OnModbusWriteRegistersSuccess(struct ModbusResConfirmMultiple mbc) +{ +} +void OnModbusWriteMasksSuccess(struct ModbusResConfirmMasks mbc) +{ +} + +void OnModbusClientPanics(enum FatalErrors reason) +{ + writeLineEx(0, 4, "<%NODE_NAME%> FATAL! %d", reason); + switch(reason) + { + case ParsingBuffer: + case ModbusPackageWasSplit: + case DeviceCodeUnknown: + case VendorIdUnknown: + runError(1001, reason); + break; + case ConnectionError: + gtRead.Cancel(); + break; + } +} + +// Key events ------------------------------------------------------------------------- +on timer gtRead +{ + if (@sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::InputRegisters > 0) + ModbusReadRegisters(0x0000, @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::InputRegisters); + if (@sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::InputBits > 0) + ModbusReadBits(@sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::InputRegisters * 2, @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::InputBits); +} + +on sysvar %BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data::OutputBits +{ + word firstBitAddr, count, i; + byte bitStatus[1968]; + + firstBitAddr = @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::InputRegisters * 2; + count = @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::OutputBits; + + for (i = 0; i < count; i++) + bitStatus[i] = @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data::OutputBits[i]; + + ModbusWriteBitsB(firstBitAddr, count, bitStatus); +} +on sysvar %BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data::OutputRegisters +{ + word count, i; + word regValues[123]; + + count = @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::OutputRegisters; + + for (i = 0; i < count; i++) + regValues[i] = @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data::OutputRegisters[i]; + + ModbusWriteRegisters(0x000, count, regValues); +} + +on sysvar %BUS_TYPE%%CHANNEL%::%NODE_NAME%::Config::Interval +{ + if (@this <= 0) + gtRead.Cancel(); + else + setTimerCyclic(gtRead, @this); +} + +on key '+' +{ + word i; + + sysBeginVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "OutputBits"); + for (i = 0; i < @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::OutputBits; i++) + @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data::OutputBits[i] = 1; + sysEndVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "OutputBits"); +} +on key '-' +{ + word i; + + sysBeginVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "OutputBits"); + for (i = 0; i < @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Info::OutputBits; i++) + @sysvar::%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data::OutputBits[i] = 0; + sysEndVariableStructUpdate("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Data", "OutputBits"); +} \ No newline at end of file diff --git a/Modbus-DLL/include/CAPL/ModbusClient.cbf b/Modbus-DLL/include/CAPL/ModbusClient.cbf new file mode 100644 index 0000000000000000000000000000000000000000..4e5fada8b89c37cb4316cfc2351b4ff9aff2bbb0 GIT binary patch literal 182994 zcmeHw4V+a~x&Brd#UqL-8JgrFAyJV~Q4mo;LERo zzpMCS>He>VOA`yUGq=8l+P$W`;|yNsIKO|=aaP^rIJcg*k0cBFw<4tHFbxm-$05A! zjD4I+_)o5v+;_|GiFBWQTGMsJXA>_m{6U{N%rxPJ{7Mw`!Y{O(Vb}ZDHZ0eF`{pUg z@qho<$5i3ag&nJl6@hPckY5pToX76g{7=|LF_zz1ri>@dVET8Si5>W} z^ZpiN$WHt;MqSI_a;M&xz)SupcHp4#?ekx=)aSn${BNIIn4kIacf%d()7=VrDE71b z%jWnT)35WdbFVHdGsw`T37~JHd_^j)+1X!E)1mzXlJeEpP3$u2s85(I>8p z*#BATh62_k-Gg3WmpwteU(7T&zKol+xJ@NrM{e#?IL(4vx=|ZVfP1ZzSc|CpH`E$8 zjDp9W(AJye8zfh{37gVorz%rJ8#8WbW7|xldxjc45)p+OP5J3aqaP%nkv6ury+$`3 zibglXv5nT=HH~I$kw&uz5}8r33MRQWS}_X=p~XQmGdLuXuAz;2G_&V;U+=8%VxOIEEw3LW;u<>45 zibQ7CeqM5g!$4p)LozUJe*nDJXt0S!6b|W-D8$*O4vZL&ldpqD;}R&4I|+_$I~B^) z48|5|JA?#npS!=8d{>$ws^lw(WNlEnAGtKNF~^W84cm)i62W90L1iWRIyj_^{|uUS zE*y&rEAOGg*dnNi70A>=0!;FdM2Nij5J)}-0?vi3Qm~~3N0VX@u+KUI!9xN8xp%D; zXT;Hlk#H;o#My&@u|*(Ili75Dm%I=JIo49LGf1pQN-GQjB*NCR7!s&fhmd%Ld>vGg zA)iH4PJ&~R2&o8Tiy%S75}7oX8YX!=NaSdTx zf5@b+L3E+vgmO5ux#Y;tVIlIkc z{8d+0GO1sL$q~vT>v}Gj-+m=HhhNVOxd`IAM^`_pbUIa+<<`MqNw>gY`0FjqMa_C^ zDXy{(hFDX^%;rX}t9m^yULZZ2?yc8Y5nZo!NAB6y?r0{b`@J5QRT)=jZ1p~yd#!_j za88IBIX!O~qFqV1S(acrPn7axdH9K7amd~jH3y8-iiLW706P%MoHCi2$o&kzIy+AWM#P3vcp~UCOvdy0Y^|WS2+~-R8!{ za!ogYObA)tD6$6uvFt>@s!SEEO%v|jIM~xIy!7gV9$18X^Z-5FE%fh9cO!6t2GTQ{ zn!V(G)}8&7qwe#-ly0QUS}z&|nQ=MRG&iOshHkO;VB9k8aoL^)OiP(dw=h+(JvF#@ z2TK$$o4UEDOBt28NjK6hRtC4N6tgBMRJM;_22%ygn2mc=1}{;@2q~i+H|a*Y#may^ zHDzpP8EbKC+QC%8GN$9+l)+2s7ur70u1!N|x{zWN33eV zX04H``WAFG?v2gjrRav~fmOIi570w@tn}}En?+*{7J9H*OqYG=1Ik_jo3$KFX))E* zBDGnZ4mCF}lNh?i^oygiwx{xwC?jCAm@24WOL1>>otLmD1Eh>4xJirUFIEOb(3CL} z8!bVb#k9dP7W-xJ5@n#_Xh)NjLAO{Lhk0eJU>R$1Yit%%1ypB~v01#N&7x^4XtR35 z)VE`^#sVqW5qcfBS>(1hYrJNlUSGx(wORH1Nm*oF&*{-#u~`s5gW3|J_8H6$&>oi2 zF`I>MH|c-c2kC#$jR|&X{tWhU=J*`&hJw+1f@YjM=^JpPYYfkh(E#a8wppi{;))dJ z&uaNxSUY~dBT$8_SOuK`v?3eKy(XYF#*RIO5EHpcB7Mu@;vRD^a->^$BQhF7doAN+ zBJ0^P+Ml${XYKO~nw?_$0*Fjin_1O0evbm1RY+*;Qy@JpkGEbxB9ngTkw{;I^cHQV zrjSz&&{#n`V9uW4w2x@h?xn*s-Q^NQH_vwEqm6P+6;iCitB^zksG6=I+Dnn8i6kmP z9i$Bc+T=*L@FpK^+M={fXuX+klLXP#DQH?|paHblN)N41dsTg#RXqn)^<|s(258d@ zqz|FZwZ971{m3f2FPmy)o5^y~rkO#G^t|QS0^Fo!D(uO2N`mM%H`d5CU8zGp+I_t$ z{E1b#*QH@ zxHr=VUSeueDrNM+4R)2`7AxZzuZ%MwS=n)Z8B7%{qc`qN8N5UpGo*||aD%49Emj7n zdukx=Wf_0Ot?3u03YO6m_ofV9O22Th$C-iOIk&WR-_r7r4|nd|(kO1p6^Qx$&$qNV zVBPsxcX4^0K>^sB>48h^R?ze2N`FK0bR*s7#vO7^w^+pocopv!N5u!?)>NFSf)(G6 zdox$!CFe?<5*3^)EkQQ>O$fLz_y{$W|^B>YA!;0Grw5bQiNzO!#vQ zFJVY@25$5>m^ z8b(h$mep9zOHH(jmmKZE&ESN{S3;|SFvce|S7}ed`Yi{Ozldq%xZ|9G1;-i^WnXT`k4mS!=uoGFGsn zO_GML09lR<4J3;YW*}L}OCu!=&V_{W7Lxm6gj^Mw+aY3FsFj)1k$sjH#Jx>mPcdVI zHLnvcS3XAAaK))@2H{y=XSrJ>>XgM)6jKg~YG|W+T%ku*oX{@$a75(mjauEH;#hgu zijs6^ySbzV^-GJp9-%t{@={eRYKiKK0ColIbe}Y4v&7J(>lU{~jNu7)5W*onn|PxK zSxhq(t5%>QZL=+w{WPgS0xj*q)FN((e-3#djGpC2bWwZ=gTW_!swIwye0*#v+q4vV z%_YwZ9CULO(Z@{S;Jiv^7tJNV_LA62o`y(shNt8u#F}4D1YLh6siOdctZg7FvTyik7OpCkz&%n%YaE>AVVjxGFTK7;S z)Mpef&k>{AYgvRf#8<*v=wl1_(DQjIhFBA=VtQkB)DZU}Vp)T#AT%!O*@8+60-b`&u6s^TrdAi*~c^|AN+`@mBC<>7+&Ap~)iZiOeT3 zQ-FYr$tWa8?0NqY*`l+Mg?qdJB!Xa25kYXNbBWBKF_aiN+QCbR5r&ow^2r_rh_aH! zxsnAt*#ava?hcVGPCU-bVmL1YS^O5))^JL{-Y7Y-FHKh(n`Zjg9Vt1&aok7!j@4As zu_E$zgw>8UJt|2?R4JTX-6&HieNZktsprO>S*W_9WV7bNeZ-t!ZXt!q&4@lCsQ(Ha5AS^&5_e{EmZF zItI;vJt7=XDtfphBIeFaMG;6m5J(S04b$1aCLV}ks&or)W;S=zxQ13(APW<&u*FOa z5D$I|$9nc8AEyxwn}!y`j%*U%LU;n1GLg=P+?}{gw>*bH2>sc^KxFvNs` z?J`KDZ6n>0QYkjcWg(CoUMJMDf?KL(Qkm+_lO&V`)1;?xnU+0X(~Pw2!sL!GUEK^_C0A;@GpH!!k1!X+e>EZs;J+k*KbvJw@v}#K-4iR~b_2`^ z(;HYy+chgDGM(t8W=BwU^{MqFdVotnOqZ+%yVXqF5m9BN1}VItW~ja0yOMVcA(d27W> zo<}AwTddM12U=D#qjeI6_Yru9nT$EU!|u|#lMGIq0jG;Xu!{dBazZM4>sc<+n1$sE zNkdoClrxRgY+YX#&j%*Ug@tafb$yuycjJ~xAl+u&krtPE=sOl`AlN8H-?6}q!)*FI z6~~yg5QUgFgciVl>UXt{ni?k4r2Yry)!B1cMMdQR#OO0O83zH#5>$wLF-`EXrOzWk zi*SiWwR#7!{@l}Fj8L;vj{M~G%0dK5KIxXFxWsnmuS{bX2s7i;Exg8Fl!DnLTi3{a z9z*5ig}Lz-_%(<@7(MNWY#kQtUh^w8nqE`mZ2!hfU#?;FnxxyaSv+190GegH*<~$t zw^=019$c7?6cFxd^jvlaZl>}kgZ4s`SHmr+$uzMAH2LN!EM^;WP!*LL(y(upAi6>0 z>UZXW$j=jn6L6#Zf2W;{&aA<$yIOMIj11gixJNx%O2Xw-JmF4&n{Ig-A?#RkQT{f< zPm8M@iOe7SgU`H1vH`Io`pApY439y!>1<)arcXsgfu?V~+;2Lo7Hp>-L~h5b-c?4{ zvA`h01*tcPkh9%EL>bx{L|&Fk(dJnL#Os7Rn(fUSM2>{&xP8$+one@oJ|#76m2^Fs zuFxPdh!L4Nv`d;nu|Y&zzgqI7TVN1*6uGoBh)hRO1@Ipt^;XeiHLc8vn0S*<>FDqv zA`&F>?vBECju}KWI|{_E29X&HYtP_ zLr=1D-nv@qNo(MuEE)r~45N7CSrkPek+~MO+TAWmM1ZxGY8zCFjYVNl&TNwzX5iQi ze47zw)I3*8UFoW*uaGO*ZBJzW0Z|Wa3Wb*i+;Pb7M%THLip?Iga-!YC5VV^&@Ys8% zLiR>?_N3}PB@cF`RbE~v+&+?uC75}e94ufT0z-OO#Y?1251--UOuFzHGe$joI&jen zO8@A*R^SS~bP{f85moIUXegVrXR1o|(^30il+(Vd%5c%)QTrO?XS;wXxP;b1-?>pc z5okL5wa}>j31Y2`?7RY_wroVmnigtDPOEmNLn-9`(oY!zqxLf*M4n!{)1*@DS1UBU zPPpUPY){8DRU&iL8K~ZUl7y;gYTBVuoBPv=O!pC92CA9)%BZdPHL$>_eLiw&XVfmD zV{4?|d!S=5g{b;7tol=uN4}29#;D5@it3m~7SXX|&qU^0!OrX0Zvze8a~*>nGdlJJ zdcA!e6D!nV9XkLW)L9){g4*TV(Jdvhs~l%b3+?3=v6{bq?GM>4=80M_d8=_YpAF6C zE>WiM*=X2kTtd(fL4f}#pUSjFjH71r`**g;RDb7VocQm2j1nLgaEt5&?R<>3V&`M* zyUcZQE^!YH`ZiiN@SXVmtpml z#*W2nkj(9ca?&llgi&Co)+kVo(74_b&l`@b%AiJJl`^pP=@#Dj3_7!2NrrXOoV2X( zO$p61-q~(k4lcV`qR1uOztc4dVL!Bforkk<%m}v}N!mP|T6t5F5bVFQb!di%aUu$Z3mgaTbtN3 zIA+jh>xy!!(kf-XgtfAA2DhIWrMpYS$lFpl12;N3nKcH@y&U>rwsEKg*v7d7McF+o znP1o!h2*BW5&GEB>?Sm#VxZFzd=5iy5BQ-h&{4oaCqj^l&z= z6UNkvq#%sdN|+W;!F3MO6A%QX>4BM#%9=4?M+qBUwn7cqC@|@a zq551@yb+I!JOf5fHDG<1QkA!b*S?z!IJt6BM zLE?Hs*1bSdNBHP^N#EyjtVVIYq&%XSmV=7Ta^6r+9ZIhqjHc$imB9@>?Y4mv(E6{y z7Usw&PaN8wWQ%g;lU21H%JYpm@|i&pdXygIlbIzlZ$LtPE5D5#cvuLph-_hCF_rw> zd8p){0I|iD^AXy&tw@cfG+hsgmnDoY_TuE4ZZRYvY^IR^U?E>*KVozTU`&ZHZUyh&mjc4(8Hn)E)858{DMg^WRp=C(k;Ah>Sne4 zDT$$rQQEuq)MKp#(KTAWo$8@lz6PNdO}3Z2?5hiet&%+GV$_vux&HVT{)b|46T*yRP)B;{=`gy#BgmCgij)Z%R-jK%> zjn|>%hJ&-2kZL_@5DbA2&3My|3^kR>AO&WfoLm;1bu!2NS*Keg72YOhLg)8e<(eU= zCvPl9`k>M7Gs%8{6zVRJJT`;XPSbgvaF1joq=eum@kYd10yFlmB8#Iz$BJj|HYS4ZkBpeIT#@$qhCbj+Ft{o2;PoA z9h!r|(26RXF9VTLh`6@1j5X}pEJ-?o(+OAjqw;olkikHF;`NY9{{eGK--eF^C3 z^K~N_OThti3fEg=GsvD#&?Pp;M{ChEgT<1Hu3cgqK{B~6l6bmm8WzfxtOydBk>}9Z zEkvHXW9+t0XU(@s#=B+gFdm`u$6g2l-!6I3z=e(7(PVL1LQ!L6Q!YkJ zl#v}-U{jqZ8@)&2O~W#JArIcKwIb~GWT9WjUuQ< zqr&I)ha;i@+S3DQ?@FVjDt7t+X}9K}O7h6ps6J$ISwgWb^vsw0q3K!&;@-hwvPfHQ z4YXy?mF6PUS{FwLPu`W%d|p~O0d7amk6eTNI;%8ID62p>wlhO`45+xDKr(Dw^Ez*a zu#OC^f*t1udTKRyhCrr7W(!(iSgAS%W(c1WEZCPAznQ7kJEJv6Njz_;cghf&Ay8=i z2gb^vf=P{nv~vcnGXy^eN~ZY)l2vU^415NvyO|HHDAM>Kx-IK*#L-t7t6-hi+$ja|{NB=NK?y)~IL(izF3Ye~uxdXryp~#M4!aI8UzR zupD+AU<@1Ds4>POhQFIP9T5doX=52{zD+XTl|}5f59(_z;v}j396XG2x0W*xv51=8 z2FZ@D*3)PMJ#3HZdD8D8R*Ra@6xK@f_`Y{XgO$tnmW|(?uZVzb#J0buX_Y&C;76I+2!K|&VgZ0e|Um{C6Ijjzr z${X~=J$e|9R>nVt-uM-+X-|`y(CFA=d7W_MEH*O@Qs6bgbgOyOonxH;vh||H;J0ut zV{Vs8#!H2Z0TxdE+@IY$Jb5B|^iE-2?5AqtrIA(!C)|c03ff|1NIshr7*wPZnVXhMMvU3u6nYZ>%i8@2J95s8tVo;4T-vX>DQ zc#C;FYy3&%p>sxyKc(56I?{#)GvA<@(@SKQV@D@D0yXUQjEFX#-Lguor;4#I)_Co! zV;k;teI-__j+MAlDnWU*CHj)>BGgJYubI0@yXhaMO1Ra?1|7lz;V~XEtNNDtKDJF{ zk3Nxkb~DiSsFPx5;>{n5k`@9I-RNUMD)|i58_i~hEB}k8`U_MQ8_5?{khJ%q$IhjMS2D;%Y za85uJs!Fd(zMX@ciMWv|5Rfnf{a6I)6JBE5I2ZkD88JQuW(1>zk*+Xa7+^$;0*oVt zk*+X~4=_@r{Gx{oBVA$a8(^eR`;0?{k*+Wv9$=(t@)?H+BVA$a6=3WYVjLulbcL}; zfRXC!=QvOp=?ddM0mj2ajQxd?t}wofNQ)zvwSJCqVWcaJZy_>!2(mRYag;>UHH#LJ zuk2u-qqlI-4RQ4JIeH2Q-4MrLQIsjAyKvAAaXja9ypMrV9~6f;9`HH-CLDA_9E*I8 z?ZQDf!~u(9>#wSAZ@PwoQZz6o&voL(aHP^ndDwL}{j z`FJBe&m3M-&g?fLsG*IcVZp6rj_CQrB+B6|DmW50m+W6*%M8@&WgrZ0dZEvOuWvwl zUnVw7chD7?FiN-;_v^nLV%#K*bcN9QVDDwmxLIf5=Oeh$o~nljCY3^ zU16jvjQa%`zY$_wD~xo7k!qdg;~yQAf}gX7ys&50$Y$S1E|zDNi+`h=b9DeMsm1Cz{QoepHBbHKCF!@>W|va@M3 zdasnM=mtN>9>|s=u6vi+0g~;nk2Sj>z6qds>Kslvb#=^4Uo{ePZ4Aenhs?77i^}xuRtbxtOMZFT<~v@v&6Z1~$aPeEM^6q}Mf zGi;K9@HT;vh1>pleh$msDj~Xk_6G@Jxwf**At9goMunv2-gyYE-XsiTwg}V_8TvBV zT=Fogkrr2Q{2t~hdYi`ivPUG6E;LO0`GxD5L#}+P9O@X>h6+Kd>G?aTlvZUjOKpA4 z+~4A6&7P!#??Lp&?u@t5Eh%N04nZ)x6t3h(*X#W3vs_t7jlH_oRxux6yn~`=)@gjR zc@^@3nWkqd+$2w%blq;h%&=0qL?`Tl@?fR^QwpPqA}{6QjbG{IxC^YokAhgZ>qH2a zA;x~}g4YT8(lVMM$Y)N0T;#OuGu3R_V#$$i_)Gjv%#U@`7r0@(a+3c;k}s6xbc2Uv z_4D~T35M0Myp$xMYrl%T0N2*CRZ1*fGey#mCI=Vkvk?i=pr>lnP!px_(RLBdE^82dvUZ5_jlnt{SdH;*yAsOc|^bn_T{ zg^G>~Bi%g4Lqd#42_xM+#_*!1k1*2BV+=29dJ7|6k1@+RrxBb(7%hV6ty~$D$jrkA zN|tj@!`LIAkwJ;fEyKb1ceKJVI{AzYN@NC)1mp8Q<3BLL&ncQgiOij6gK?$LxFesD zL5a-W7lH96pD~lq$e={#tK3WAgB(-Gt@(@$!okGLz<8X`xH+GZL1xYgKG-R0u|2|X z27j(yVEo|{^hG=_oui%GWSfD@o}38gi48KzfUXW$+4K2rSTkc9B8In3Sm-vF^nnpb zi!0@IhbrkU$F!p)QU|j)WHfD+q;&0HnwssLrzC=|fJnSd=tj2<7Aw&+}rftX6c4Nkg2@g zboFSe$E1MWF_-OMC`@!Q{J^ynTVBHoFQ%92A!8r=%!B*66jRSbbmj##Iw$WxN^A{c z_1vjSL-tkvmx6vqE^Jt53n$$GF1*DK8{F(yrHy8eD~+2jDd^@vJWV3#GAr{%Q{FZ= zmcupEWrd*XMmA!qq@bIV)f9=Kt7-8kNpv znZHhu#B_lr|CQQKT{%N7ICYI9|NN<|eR8mkrp-<{dxDiOx%Hqgqd1NYYz0R{8*?$) zhxhi6LPVkL!+HGxU8{1-pBmCHOGa?E# zG8f?W;VA~8)g_pi0U0%xVUh;rAUx}xh5DVOmxYh6=<)_Ap<&U_P2lTFe#_V2jHLbW z{J?KhQ^^_7VVf&bOZ-O3m9FHv7{T(Cps8dexZN}1=<>}yS1z9eryBzox`Ws7Hqgsl zj4*7aot>?5WiuU(!$1#Ufqgf&R^&&bhMmqwV)SxXLa{punLFCqu3 zy9P||g;L$syfoG2HLA{OYbisI4w}?aPr8-m)CAtnO)u zaVJZu%Mj$AjC&Nv>x4eu7Q_Q4E5-b+qy>F>yr>egfazCAR`YmiAm=r5WNac6LmmpFJjba)Am$$Gd7@E?P-QZ2D~A3G zBKrkaS&J+Or~7~uIh~iLNM55z#wIdf{E{uwOoX_8pNc3Hte#i!6olGN=E|p8mVNqI z%Kl?mb_9!GEoDvwzwKjQn`0oxNM%k($?`2^Ovs5{qhIk+OsQ=ciAx|#y+ECLm$2<1 zmkx~jzYF@Oz!sXJejY=3>7dHUf!FXDYmXQX#I?R6h(F^+2R5|PP8A$qX>;=pm<-PP zf2#$@#KNPIh@946TO`@Y$%Ez+{-=FAqwJp5V{Gx-OJ(eCQCc=Lwh1hB?I2(#@mnQ= zuE@BoX8y6z-)!pMK-qX1@%B@*yf!UG6}(-kF~Yb>vZI?*&PIu#>z6YfNo+MMCHV%# z+j4kq%GoL+*d~#IA|H}8tqi^j!H@)Ad)trX*9_YEpy^a3%ol?EIh<{dS+j* z=&+r$gF&$TakY^~((utR`SxtH@X-}}#tnh&ar?mG#)Gb`|0W<1TKC{ec8U)vTF!87 ztQo(M1JAVf0c%Je{ve=nEWLYV8B^qlXmbr@tU-M^~UsXlXmYq@wA%RDeTff?`kUx^zO@2Tt|Ah z4=SFoz##)37KbjGU}-^=>;!-dAe|A?u0c)dnMEb;bl8Bw^6gcQU6WZnKe%c-mxjze zUPPGEY|N86*O=L~$eJ&)Oi=w(DZ|5HnXEziyRcBoVQ(0#ui^MsisG$Pav4uHN(+P& z^`;3!z3DO5{3&5i@E`*{I)vk9=IGF0%V1&0qIE9LcA1A)I3>r#JT=5ci8(bS7ENWG zW{}kiE6D|z_IPHH(Z1oM{qrpz?|d^zLx<|pGgxF_=YEAM3bn&vNqz9nQ!_k~c~Xj8 ziEH`btx2?wk*1i;3iEA?qQPa%CG5p0K zHZk8&?KKrNYo%?dNzPnlGlBve1a|=SY@cqPu5LoKI}E~Fa7OW|W=3ov59*KM=3H>P z_XbpTgm9SQhOxUCZnhvBj3MOIKQl*{wjzI#l!Fkt9t#LxQD@*r1?9UaDEnDfybNLJ zfu8UhS`UD$^9y~!Wu3e^Own!7$qw^Kgy6py&6+*)U|b8G{zHp`y7~P*O~@PLxicikcg*FQ|eDqnFv|eEth^;88@dUX@(Kv1$_+6x z%a+xWb|QjZ&1Qlmq6>Boy1{oMM{$>lX>E)d3hxAyC*KT(=1bi}|Ah2$NHDfwqun>8gSG)p?G8Z8n}j|oFwp)L&p5)n z5id&uy6s!q@1j&){E3u83(e|rlVm`biq=T^F?=uufmzl@;iD^jy2_MtVFd$x8-$Op z@SW)A*FD7dobb^VK5k{m9*=3gn?<&X%$2tz_!z{wy6$e3RCK)uBctYdf<|bKpoQgT zBqH(!&HeLYU(esbwQjTPpRias&EAA|3|&@t(Q&NO(mVX*D{!ql_S#kEWKZT}(rukgPMv&0s}Q34aL$lb8MYJnLah-fXfBl5DFaqYIuMvDGVznQiKuKiXLMN{2jwg@atf48W74pgIgERvH2KG z%1gNAm^;~eA_5q*C+sJXm^Ho%)Dv~$Cc45eUDd*C`KM0S88Mh678 zX&^n*>}+>jyUgC3vJ*X4k2s*~MCA2P4Kl1>JKIP_g#8K(leUH3zRr^T4n#GcO8GtU zG_Fy!dVLw=_XJfyO_TJ*3#f}>Ma$T$Xf8d!CvE}@((77hHg2>hzJfYr`QC+F0f$Xx zd3ZxApp*|uJ=ys>hU*JM=!sUavM1OvYOcJ0>G5mB4nl3{p>FIbbLV$OsJEm7*>2!- znZNd)sxvYr3|5C+w#n}25$}TAvqKP(Z*|yYC%s?#vhFxPcl*+CM_6lcPiwDrt@iO8 zAs4U%hL8~3(}U&-@f8&9GmyElmBc1g*x`4xFp=x)z=p=~8Xh?lnMO!j=owpw?1D}f zDN1Hx=nDvPW_Tj=E3vJtvek7SK5*X-n3P+jZtQ75%~*Za6>?*?0=1{<3KX&xcs*O8 zuRxhp3HM%zj1_bDcH3YR?TZ1W0e7bVdFKm-QCfOX3|1z%71)Mg)6`a68r3wP*2o-- z5nA^f+tJV>CblC`zArchp>zr5Vc+mueKf9hn;flXY)7E16e!_{CNfpRogK(DC7G&5 zNv3-OC9~}~lz)*Tp9041KsgaL&et)WMC5HFsm7w_Dx*D-)&iwL@~102glT5P9M?1# zZMiB;=GJeDsaKI?F81W9u`v=MBSRoBPJcA7fP5t~8#FHpqFqIj(;FouLUw=xdC6l_ zK2TE$)GFxnQR0Q!xkSiWTzsF;v}S+SfT`R-VGK08-|I9&z7)lO9wW8|=k0~%*RE9* zTrL;v5e9}>TTN_W7%0KPN95Wywx&$1SOpApBGczvf;&;RSZOf^QHhYxWe2e0!%5AH zm|z5;m&lC$w&X=^wt11$dsZM30wD4V31D~)Q`pG6tq^r9XT5WvFwM73=G0fwF{vnP ziUc^>xA3_22QOr>5fnDq;qOUIL3AP2V2-wGyWLCu09&Y+C{OtvBHe~hQ?e!UCvfKL zY0V`YXpqER|1K)xPb}DnfnC%dSkNnoY*??P{Run<{ z+@Fzz(pGtCXSE>h5~ei@a{#VYAk6EV%#1q-R5G&>8`LG`UyDe?Paz^dgE(DT10TvM zY0Sse4HjsvOlVev!@Rj6AZ0gV7bo<=fDVb@#(?ehuwrlp?@hNkP15Q1cPQL{!mXB}>kOT|_=*uqTjQl& zxB_V(VA_ykP>f|>uJ4Alx6PSZqUM&0W6iB<3su5oVzq@q)E4Rj?6stkuMpCzD?(OX zR!M$znG()`sUEOd%@Wfg-{uVU(l$jl z-=5GoKu08^;LJz9!NqY4pEscA&4FctW1d?CWE_>-Lu$Xm`HF9jVw+&Rhm!!v~m+bs>8+L4wSCL-Q z2g+VAS?S@_E^mgf^S!kc0Xy~JjW;7Z3LS={`Eb|&9qIiU8SQZ3Z!vU6M!w(|MEt?S zB-R<(4ai9co~KrLGcrx<+w3A~YrVAZV9*K8$PPl3`GOpW0R0Xv2cDIvtC^9lkZQBl z_J3fOBgD+eIHr)FK^$Y2!3QjoriC~BoVj3OhnS@Z)Q{`njTAKA%*ZHXyEDYZ1-EUI zS;vi+rcw2y$x0uZZy)f?nKPYVqEx-B63&U$zaIPx;bb z>Lap73#ILAf8KnI;1HMyXja;F(mlb0aiM*-@Uo55uDx!&HUqX@^wPNx?!8{R@85Q# zmu$WE$asxJhowvCuD=Pu6*XQuYbIY|<7E=7@v1{kYP?SU9u!_@&6>85@d~9)d1==@ zgtWm~vl=g&8Z+T#W;8|&vJa$bm@uHzOJrVE9BJI_fTEeuQkhJwMPm>x8toM_kTmkQ z&N6Ejgse$hBKgs67U;~ZnUc3VCT&zeSvqdgG*w4US~&!_9c4+N%6nZ|z68{*P!=(1 zr>@?6%JR$a@2RrLtYNM8H@!sW$cH5_S2|dSK)Pn~xxAn77KPf*_?!=&r}G z5g4dBZt1BqE(aFrKux~j|2O(81(R3@YV2~Ff%;7jwmML2T7Qfyk``M&ChfJ4<_y%I zkhV0TVrGnGW*n#)WC!X+xCTP>@It@hxEMDUN6lm*LQE!0amh>=#DRJNd}JVL0j z)Pj&5sON!2zs=Ds(3ydn8nHWOdtpF{J8rf$RY%SCaZsps%=QpeIe(ybmtgK>=i54W z-YQL|Y0aB&v+4*W2fS_cG6;em$KjesD4JsdEAus|O{jw5S4fLga7CbkyJ!F2Sd(M_ zG^+wNYj`ZDW-KWBMF>O)Lafstb>E0R^I zYfnBa?u<>&sOQTt=T*(*aWUue(%Pzus#(ss+S=+`+>eMeH2OsdLZ+<_S!zo4h zch+b&d@asq5&01U5dskc5dskc5dskc5dskc5dskc5dskc5dskc5dskc5dskc5dskc z5dskc5dskc5dskc5dskc5dskc5d#0J2O)L8_r9s;^XF(C2LX@)m8BuXJb|wuf?p2 z(<=`1GM78AvNAcVv@$-kzN!o}tn#FpZ4Hi3nVpnSNi8urENeO2|1Rq+|~~3olL0)Qx zuO}x{G`8{5lvz;88o1nPuhuuBD#l3fs=ihLwbG|`zS69(MQe{LZ4(D-9v@W@nyws} zFLuU+j4#@S(LP5=U@ojK$6zX23#F|)X9R~(-3U4(UYV?#m6{C^44U-(6xWgC47>nV zK2NV?!l9RQO6&Lz-Bc$(*#PX=A>yC$%P)Lf73X5utEto7w47R8T7wxFqCaQ0ay+}! zQHv9P>n$hu=r%$ij6gu%tmUus$BhmNotF+;<-czkE~cHk(KR*r9AbH#3fs}5OOa+i zhgeCpXXUn2r6?*wpo<`Id2KbO&2`mS`+9mD$5R^I`41KRnBbFz_NKsgpMp8r>9CiJ z=azDIk^lckBDD9b7mbT z$~9Q_pBbKH1iL+_e59*3>8i2fXTrgt_()!zU7(ct$-2SunH5zPb+bFU7m!~Q`97@K z6q+TktfywzR@cv(Z96VLqkiVhWbNSi#n`SvC9p?iYL9K80p)`bpVB>`iZ3J)CD)oJ zE*$;h=SU95y5?5l;;Lk#RKH(PBR*4ARmZhg;~F+1o`8H+msM9P&b!W}953?o0|+y* z=BlW|(%x3WR841wlG`9th?y;#Fw@9(x;5CvUE;bO)Gw#n8%5_9;u!8A;>qmPerIyQ?RdC8=sY$R6V0Yw@R1I$uHK# zkBDEw)N!mY<(c>(bDz+>p^MO5Wx>uSZ@sKk8@*i$lv*CIu21#D;e=EzCrg6|4|ez! zjG~O^R?KDn>ubC`3tvo5RoB#zGrwuU1Y^%bWu37X(@m7t)+NWvwjD)mL|m_R$C~mM zFDtF0-edQ)9ET|Yuw%|0pc%T~HzGdl)FCIL#iJ$T(Slf+_)qB- zHRmQ%e9r-&AstWb!|C2;rA$+adq?S&cWtL z)n%o%6+GdE`qr1F^bzAdK>6Hdj`IoS13Z=s8ULNoAd=7_lR%_4`O$qH=bM8Z=SYno zS5@*i-l;~bzdJiRfc`WFa1_jt!)_wyM=atw|+ z*1m+h8x}gwfi`qvMOAX#yccjgZi(X{jnjW-s=E9YRO#>NZGzYzC}Ly!DqNnkkK<5C z`lAfnT zEuB9OC+#jk@>B2f*>C{JViRP$2yD*)VItUnPI69J&HQUoYlss)^wPC;cn+`_TwB-X zaY?jc2G>`?^~Ph4!_N~3@(OV2CcI?%H85We=A42Jvn_ZDxc)ddkIPg~JQREhME>dP z9cN&;U`E>#wU+h{X)Z;YA7BHJqSb$ni18^W!$71;E2`=)NX~xjChu)}S?PV|Wi&JI~BXS*Db!af{q~x6Hxk)5lgV?_z zmOAStos25~5D`xx&qEl&H@oDk$b-l5vDXohx2c~qg5<~XbJCwe)RX8F5g0#eERLtv zR?i<@RX)0|u3}czP_VrKw$r6pm4vd{rFds-2A;Y>qm#9sNT_5C8+zK1YxTL#=$Z*Q zft;-ESN2Zq0;n2)pI)cFbuTj)6yS>u*|^A$5ZE0A_`HI@-AVIt;~kC$Su?v!MLpRl z>ZIfid;@dn^mk&d-%>;>?+qgp>1h~`=x)yuP%Z7+dU`hC>#&{<_4QQFz)r>_rZPG5 zg!f{-@7Hda{he@kMCuyGBf8sj1R`~HoHGGmht>789ChV+fIDj6k4^uscEW&F;m(MZ zHH=4ex912%%8G3jz}I1A9iF4C{#M2e(%3K_(cPXS5NWLAoCWwg zs{4jR@_q7-P`f#{6B5e)h5#8-M0+F^l&UnDrVQtOXV-k(^ z#@GiR-x(YHL+y?G@F*epi?lX~Ms(d71R||6NzK+Tv#H*&g z6Wj1@MgEaf!#!YiljrLBke3IBxlXo(%jnld5ZI@a?XI!w*vG2v=W`#PNC!+$tNJRr+bn(kbMLRD5Cn1Y=Rn*`5RTbrPnn$bNk8Sy$ z7XCMGN(FwAf(F3o;+K(vc3uEZLl*5SsK3vv3hF(X`RwT*#@3jFg_mCvu1Tb&VLZC> zU8JR*@BNdJMSEIW_)y`kzxptCzd20!(3Eg3A`K1W(UtEa4efmIk3bgfYG}?rQTQO? zk00F`yTTkGTz^HlHj$==@#xBTk*0RO_fJF?R#U4^o*nr91HY|N;QJ3}uiE#(rTD4` ze~mY&Z{47BayysXx^_F4e)Q`?2y{|AgIl@wx(lHvO%3iB6;aOWnRVu!H~WE>9rezE zZ<*0Eb4?gBtDyMIj683lf=&cQN*czgOWb_~3Q9%o64;qW2A_u(RM4Dx?*1>l6Z^9{ zYkv?w8W#9j-Q@GoXz&aG(-kj20^RItFb1E87Shckuf=S;AKy1KDmrjT7_>-5!+3P* zyGTVl-TlGun-x@1|9NQMt1#Kc@5a7xpH^YsmEo#HdK$)~OW#F$+Uf4+$-VYAiH7-) zMeWgCJzTW!rSHXlx>CzO=B#i%A|(yu(WUPqCGB+g4?_;^DQP>eywu+LLF|?XwFbQ> zg=-S2X&8?#eHW=|r@MbBa%fjg{VgLqmdZDg7VZ2nwsegaKl9RXH6k4iA|35? z_w&2__{-L7Q`LMPIy*VzWAcvzL^wYoe#E z=6|@9hqQ0~KCi|$eoAA%@YOIjLG8O7QIYnA@##u;k@j`Ix2b)zL)v%L=Iybg_#Zg< zeQ<&L)(vW3H1=6kx~3m#U+4S17qZa5Tf$d_s*+`?Db)wO{zh!_Jk9zPp4JQeg6hYC zj{{)z>zW93a^~rD)iZWMX(^z7*Z=K}*ds>$f~>p_svl3#Me3J}P;}o>1S0j*e?8RE zZ)`UgxVlxS?sMfz4?%VCn z*pB&{{^6^``S27uf1HLydoTh;mv#2WRJ6;2XBy7GrdC}%uc{(-L-lL15j<>;-&+gC z^Bg-1^#Y=c2!RNJJw|~4y{(#eVd?cr{nP6+zw}ycyxDxYG-sJ-^^ed0_})fN^d8qE zO4#)fh*p7)!zU1`fBYM3egSJpGqi88O2ch;hNU8?ebl^2`@;A{cO6F{(mu!GgFavT zyw6*;z4%%z&7*7hy?uxJ){RuqA`$tWMIcf^$LRwQeH9FU8t2~X9kKtg3YP=64dx5P zb||#|c{#k%?Z+R1&TPY2Jq-FEf5gHq^tWK}uX%GHbl!|TX*NH1&JA-~%?pP{cM$>+ z0(*jhuX&S`Rps&OH(~>?*L=DadDFKWqIm$#j(2-fYLw<*8-dP@cWilA9_wt+AAk#; zdrqz@pZ?w(v7u(ji{%V?R5t#&>uD8F0wSl&A+Wa;ugd`!Xt4j(VREXpHg!pTvOf9Z zEpNp7%~7U zKl+99|M-XclTT0m&be{v>#>WCQeCh#j6tM-VLZC_U8H}V?f)G8lkdIMpR*%&_vFGk z7t%kDgV8TSV0RIS#=qd9m(bJpV@JLo8$GfxpjHL#3NU)WUKpn+bk_)272GxF$Cslw znx+pPLMm7{qT7zxgBNMLH{BI(ztzFuGB6qj!x(j)yJ#BP*}kR@URMJ@{YDqu7q5|!w;CkRA~Lfx0iSH-&Q_Sa)SF}n51Sz&Ok3eplr zqhT1Eu67rVhMn(meiNpE3VOrg#CKkgJ$#{-voabEI}do2LqPIY@L#q`h{ z80QV&5&O3J&)w&ufpKr(9_3L0foNcKoWlbOX+JJHzOo@{d7dxKfFfP&E?jvCJk^b(d{&=M5g=YBrSeC4qoBZ<=J7V`u z)8=jXLb#b${q{pJ|C5)SHS|ebG18BIT?c{AEEI$47rgE|=;?p*=BVGv6JOjBJJS3Y z@8X>Q0k!(a>1d>HT}e{%+u9l3V{TUG@^kJwAxEOAx%%flJFNTK1#iSYFi-JMEDxiS ztBKLVFpN)h*Kq_QO>~?i09URiUR;$-l$KqeO#Sx?)Y$w(~FqP=)`v}YSFzxU~i~kR|hlv zz(O`XVxicXvUYxeKIK&>M+46hPBH8gKwyglfx*mYmi zj{LUyc_Uj%_@S{gokD$`QYLo*<@p8Qs9gBcM2 z-F$i2Vi^sH7KzC3ECSJh82)I6D58CKp=07{PreyDz>JC8q8-!DN?eq_2m;ZV82)HR zNEOYt>8M}68GGL7;%U+Rw1^}{!JS1Q(#7z)`L|-C7r$XX$!~FwbkQOa`JF`|(nb6Ej7!UF%#qXawbgU( z+yBj2WzJ`7EY?>4_Co+aRTF)_#v;=-{mz^?4Ngph*Ifz8UTAEhw6-oeHaWMVEIFpS zJb72&H)EIFR2T%SetcE`a!~ZC@4`4mp}R()tEyZOnVz`8;D`4StCD4@Db)uxzZx6b zUpbb|3v#NyF@!HXjR8^rqF>iUpfkfB5wp72HPO>n=jz^J-+VPTWq`(QYe)Au?TmD< zD@#u2+8*hi;~WGCG4746s4LT z6uh`5Sv9$uUrD@d+N-hm;~IIRnTlGFqA90EBJv{yI*-8q$U>hx%pJe_)z|_v`8+FU z=QEmob{^^|hX?_S03X~z?Iu^1KlsyEV-xr_DE#KM^* z+;i!g=xM8az`L=wB9$CFW7ao+{YtFafcn{-eNH>tQSZ3gi&lAxUzc<{sd&*or{e_m zZqA=xiG7KRg&jzZQ13qXKd;1YrDEaN zXtyx+*3-N0xDV=GqYdd; z%Maroi65gZh05dyDo;D*W94q z?LTIFY(1am;pa{l&vUHaaX1X>oxS!Lql=F}0?@n8sGc3?g8s)Jv~UZ9diU_<+hf0G z0Djk9rM`8o-Ua8G)VXNPvj}w|zcWe)n1cGo>n?w3RKU%;Cf;SB@6 zn!)uiK8P{1V%CTe7gm?gsITjdkPA!aO{p!ds+&_$SBLLpjH#}#O5I$oZztxbAjFC4 z+EkAdi*Yc`q~s0t$-2~(iaE*Z`qVF~l=st!frU)gRwYv>jTkYevLacPy7pvTNu{{W zbzT(==iJiD7aKGQzvfXe$$3>XtNEDdysDb|)HxNYy5yZ5NWr>E3j4<$b*&vq#yx_I z>rbHv8AcfP@A?jcOXT6n^xc6fn?z}J&HE%vTg<1 zblhEN&vj@Neg{C}C}tGApU+}QIBd01#vmUbDa=YuN|u)Mj0>)+XH-;u9+&rkUI9Id z-1b4P`+<%IjRRc)S_S$$=si$xY|)GWm4eoQJ_L1xpdJM}2ebh6AD|=9!q0$)fvyIn zLH`9Bh+3Qo8V{-jeG8NY4MUwqf-VK!1iBmaXV58-)Zw5@KsSO`gWdz3ht9hQGz)Y) z=m($=K@)-XC7|m-OF&P6dSK7@GSF3^6zE%^Ux1G2iS(dKP$TFeP!@DLKBqAXR0aA1 zr~%XjS`9h`BJc~)e(0dZJKoavzLp#Gn5oJEH^&bgSLTm)JGY65)?bT{Zp&}U!< zHiLS9(s5RRHiL$L3T*=I+sAQ+fJTDGfX)Y1fnETufF!>R8g(RW3zYkO(8HhwN8zjz z=%~Jq^Bd4%pK+XfLB9bFivtVLq<)U`AZP>V_n>`03rs*mKxcrGpc>HEK&wE10v&z~ z(t_rJZUNm7`YGsT(1QMs^JUP3pl$=ux1c*fPlMV(FN6LH`XA7w&*2?4&p0{IS`PXd=mpS$$3sp)BS1HS z?gf1p^gL)YXx|g?oiNZK&<{ab(A9$+XEvw~v=a0K&wf_0ChhZ;h_1T2SCq) z-Uf9$1$_n@4VnnL9P}vYprPn%&~HHdoa#8A1&smC1vP*k2fYLujJaBHK>H6v zJwWGx%0bnjr$K#&JI<@1!%s&&K=q)zK+l0*1RXHKagGHo1hs+w1lkGecLs0)Jqs!y z3B3b74%!TQ2Q=tR)E_hllm=}B4Ll3F4k`mRf}RH*dp3*~XwoRhxdv1Vx)JmZ(EXqd zpjSZ$k4BlG!JsQajUX5FEa)B3Vdp@HL3N-5$3Qnh!$FUL{tEgZ(0ibL#{vh?9MJ8c zuY=Zu-Ub~q4)>t%gZ=<|7qs7a*gw#Tpz)x)L63vp1`RydaZU!E1-c!y0`xTKbJRF z41k7#&H-Hrx($>84Z09zf@Xo5LB9r_aFOHu1@soE$HhnsIuSG+Gy`-CXeH=z(0_nl z0R0y90cd0b_7U`3&?hdz-*ACG2bu<&3t9kr33S9H)CV*LG#B(VsLy1`H|S5Go>NdJ z=ps-x=nJ4VpkIQHy%c%|Y6d+7dJA;nWstke9p{sv<3XPXT@1Psv44!RbU1XY4QQ4LuDwSxWtdIj_*==d7gP|#JN8KCDuFN59# z^}GS;Kz%{|LAQaGNRK(B#HZbY3y{Xw4x z%?3RR>OK$h4H^OZ@FwWz0<;-45_B`@cc87HS3rZmh&}~<2s+?PuxFrgpvj~;gN{4(q?sM{^DnV`!-b3qS-T+p+iHH&};=+B^T zjc7AyDrhn2ZqR+8y01VcK@Wm{26_W@O%rqm^cd(F&@Vu5fj$Hs*NpiN=mya5K_7rl zy$xeK=zP%8Y4kg23aA#e9CYMjlnt5#x)Jnc&_kegpsk<}K?85c*a-Rw=p9hEuR@kV zV?Z~9ZUe=apwI6BUZ6McM4x^gV*}jR#3kckTKB3 zpfu>b`%pHh1(X4e`3~k5pzKQ6fbT+%9za_`&w;vs4{Zkh1mvtjS)d0VL_dQre+cs; zP$TF^pqp32c7a|59q@gmc^JA1dVCGWq#q*vqZlhegF)AU2Cjt-0xbYN0y_LL=mqF; K(7x*&=l=u3zpMiQ literal 0 HcmV?d00001 diff --git a/Modbus-DLL/include/CAPL/ModbusClientUDP.cbf b/Modbus-DLL/include/CAPL/ModbusClientUDP.cbf new file mode 100644 index 0000000000000000000000000000000000000000..ab64aeaa4ea0513eee120957234ab50a088cbedb GIT binary patch literal 164127 zcmeHw4SZC^)%Qh=qE*r02laDp(PE1f6cs6t@+E?zu7U!VDj``&YDi+T;X|<{kHjWj zYN>@vl_;&WQcEo=!fL3dHf_=JSZZmDEm~}`ZfaY7szt@V^8Wwl%-oO7?q-v~^S+O{ z$?wd}ojG&n%$aj$&Ye5=?zdaUj*d<`(eeLPUV8gn|MlKaKJu{t+Ue~$2QdS&{AGxb zXF-PiZ1^9R{KGT!d*)$|^USl3^RZt$PHLv(96qd1-l>@U z{JKW#XZX1$ zPyEBbuZUCf#Q&U;=XH7FUu*hHJIeKE<^L2 z&J+I%!+$JK{BM6-5zF$#|Fyxd&J+JF)8Cpr@i#uCi19q}?>F+9mnZ(+MjsaBiQmuQ zFU%8vh0%vwI>0Y5<`JjlJ(=fbb89-U*j{Z#h0dIdDj+yXt|fS?J_T&p0fDAn&6d0F7eXoDT}|{ zXINEv&>z0mqqHr@cwL+L+jUo8GdY@Qt^3=0R5`zU@BJ-(H?}m^@7}j>UqZs$-*x&f!BXoaiD4=wkz{(7642-r zk^_mml*BF}!B9vn=`C#$wHZn0o!1-dcM1x_W)keRqp^O6WHD^4-!5r}q_FfTpd_05 zAVece$xSJJ2MJP0IBgDOi~g{U*^TwvP_geOiG1}@=GEt1s`dAF81Bhkc*hTf*vu4I$QP1G}N zW`9^~gJdymtY0r_hCayzB+LFOtKT83-}Ochl3j<2kSrr#{eWbtYOqKOynCA*wu^$eS-J(TP+$zs@8zf{r;eUb@C_E4AAePnf#$0}?2xoN<4G6M8O z6O%447=b0Y#t1ON)nf0;3^y_tX(l6Mscl#Po4j+J(#(AUkP`I_$@P*!81m$Bpf%RV zrG#O&{;+d8(hp&f+ZM4dbuQ7wTK@i2;X27xB+wTwSn6i)5a}O z%(nhs8?5DTqZHSs4JOeBm#W745?mxC%+?0)H?$uwvyBb7H2q**e;YHsHkg!g;oRq1 z-wbJtp$x}a(2;49#jvq{iliB4zOt; zj?MYztX65Qc_BFO>S_>>Y*N@_*u~X=bF#Af7+LkrS?h&WZ*5wKYcpptDYjuoU@fjO z0*o*oYrHFO&f;VZ6h@e{Sg-B-|A)GVRJu~G0#ZVzYFd%bSp$I9Sie$A7-q9ClGFa& zfa%LWXR(&wzLw+K%qL7@J~>0$ScZ#)%>3Ef;L5LU494{3pR-uk-^Nm}4JOgXnbJms zw81c28-;Egcd-rMoW)xHHkRPp^n*zm7qN6MVzj=+$W2J-&RL5ji(#Xz4c-co$rtPA z^0J4#_~xtypy1~vj%zb#G08cLQ&Yw{>sUNny0Gp%#tA4P{%oVVnG%W?w)bke@v2>Tmn?jiET{v}0y6Nu?u5k5JhmA* zrf|CydNW57*YLfFk!a$D=x9LN8(1cetUHf!{z-^Gt8Qr`-7AGaJqP>*m(^R*`?mGo zh(b1NLCVZeK6?Z2Uj6=V{WBqlwkp)O(q?Tcxmh7Z+P>-R3GzW{bKXk?J>6B3#jxGn z)n3{kby=8A7XA)RGy>JB%P;NaAZZFY8T)OJa}cCWj6@SJ+Dn^rQ9>MA*VAo~EQacW zCd32vNh=`j6J1u@$SPeKPq#VWK-!Fa^#jsA$*sQ}Yh~L(?5fdiR!f&Qrx{RWP`AsGV+uLN`lVfpYe<_Ii6&mO zmv#xu#6cA|lJ^xeC5vHW{R~Mn^hqlq?NeM)j9G*pCa82Rc4qw~h6aB+W33Xisz78^iVn*gM2T6DtKpI{`UH zv=o6~wBv9M(Gnxk#EbT#9mTSGhRqm1xn&zESqvNNhfA8FPc#A1MqE}OC94Y|7Q+o| z`MDW}YvcYf>GFah7=mjI0V7-u@~%AhXP{;>g8RdvYn%BVc}FUJeH#FzL_I@tt?tiE zpf%P%APO+B1KPThbxD8CgH7Sxd`r{%|&oEmXA9LF{8(vD= zC0-k>sfDjiYgat|QFW#>d?@zQ#6Q!KE1&*7CP;1g=dROv<=$vBxgi zADr7;4}PiX-4FKdd#PT+g8NbO^0O~BIY8a__`wn~ok9cHn(2cib}JaUzS7&Mo~UQo zSpTM^8D?XgeyT2+|03f9J;qtf&-mYPZG0sr=_}DC%IGWgM?rgENtpKU=s~p}LG!JxbIw1kU$>gXx;6vO5RAXu0m}?G!YI>|Z_a=q(~R;A&|QcL*XwL7afX zwjBtP-v?3u{$4Z*>vy8Uk}^}*O7}$gN}@ibnnKt%6Kg=*2DFmgEhM%eGa>FwR7T#C zcm~U`lIZ)i^h5>BRRB-RF!f&`?q}*3m{rxVJ(7#Bw^2bRzb#DCn=w=|X)QxlOks?0wbZ-v zrmzOhWMul)_Hm@!K*ve07haa&I@t%;V4LZv86wN}V&v(aNMpe^)JRC!%o?6*EfOS# zB9+TYe!GxgfILf4?^uEZc`5wWx>ia*H4A<859C46!nO*Om?ozNnk<(l8A_Am+2m&+ zpvL;rK$E-*HW`86X`1{LlKv*Y%C&^6lGqqlJ<6!pjs&RAkoFih7CeM@5)wA!dY>nU zX@bPiQ{;z*sVP#zFv!f;g&DD~`_h;>h|H*NO+Y=XTTFX{bTH)CSU-;CyQHB}Olqx> zNG9qTVr-co)Tu~+D~IGeQgxW%GYlf$D~ROL5FP{+%MQ~XJHP=u16h6nhO<$YL{lq* z+=Q%$U}pfU1ty7Bmz_jC+iH{r&D1@X6saYs$~2<>jC4xU?jAuLV}MMjbJd6CR|!`K zGpV&4Bop-vL6iAGu09D5UzNq+b4{|XFrD5C7oB9Ow8GWH)Z%K9sAq^)m>+DV#cf5^ z%FM5nW*c`xMNnW^VYR;b(yZ)ihTmxitB*Xe%VRZ3rD-9vkapuO_5)tEHb*( zG#0D?WSt(YuDu_8M!1I z)QdB5(^l8Y+a61Jxe#U;P4z~B|9MARua^ocLylKH$4hS@^}e=khLBw&J!%kKhW1vH zX|s^{x1$;hSV5PHX6!6+5m=>5<07HKF#X24{#9-p8i_9uG=|aC4Cz5!au}xdph^lD zipJf5=8|iL-*PEo7!=q=AgF$UZLUNx8Aem5;;zhpBWE>tItaIoCG}qm^%=l6<2wyW zZ=iUEfns^E-AYh~FGvyq-s7c!BkQcsfUy??g*O&VLp2uc1T1(63ffz+-gfvsN2{2- z(2_OYcR4r(409VVAHyX7EuGyV)foo6^qO=@W_|jRwoCLcwFM|}eIHyYA1L1j8pva0 zu~F=w!2$wcKaBv62nZm8g7yLsBM05x+6tq_f=^)0Oh}lfI-XEOb$B~2_s@+5T=TVx zW%7I!nl-23(PVl6YF8G}&$y zG=?JEzkoB_))pyZ7)^aetgTgY7&aD62g!tl&97pyz|@g>f?n>UxEVE*pF_n)nUw9) zn`9Gqf^I#D#Tx|kLMGRHmDVAt+mKje$N*}wI4HVu$i&#Mf4x~lI^fidzu0qKD+kfs z@&zq7j)H8X>$hClQ}VpVpsv=R4JtbDRwFXs>CFRP8-s*sE!Pw3Yc%yL^Z>fekRQQn#tse2*dcqbAUzs}?VCgsld~IpYe`)T?xHXj?2Sy{ zi6$mdZdh)nSIsj4+Ig;bbv${5I_z#j^P8CV5oIOaGD+@3QcneOJBVBw_Je*o8*e`z zLtoJ4McQgyp*%>tlD-Bi@(zS-C8>kO&_A8XaVQyujWT)L>Drtg<52j_9eXxT+Y;Ve zI`9IrotcUzDG6=YAhrk{hIK7m$kl*_e|zvrFzZ_A73g#gA(M_iLW2AZ0`F;b!ZxFj zXxad}L^wj2qS=~e)n1ulcrvrOGHAjxK+rI&1l9oGSfj5euDF+>xN*gDL1H=~X;0h} z&Lo2?rJSJ}v+m63UW@5B4YHxPOLq}*S1gu#OeZAm(cSb3(p@6u3>)hkB+XDC>ly*X zks%MBO{bH+F^ReYU@44j0V1ocws$yE33ZK=Xvg%|41+}BS7Wtxq%`_!$Q8UM!j9i1HIlre5I(O-+=W?)|R9CD-s0&d-(jEurev%xl zl5&RryI0Er6<;~v@hEb@9K%6_R9%O#??yQ-7d)5;&wA`)0)6u08TuB{0 z_lHf+OHF5|5l?3VF>^eZQDHWS^@7qAU^IwDn+vl;&>#;OkvEA5G5~Eg*yVD&KLPnD zX4D|NmFB{&KS~i8sYbN5Vb8$W-ALpn$)$Zf$PAd+a7Iav0i9o}luj*mt(-hE&MH~l zBAv~4gI?OK@_7uZYd0OuDvyiZ><}spJD63h@3IA`qQQ37@Na7cJffgWu?3xMKSR3Q z?j#2*b_q93CnW7z`QLG);ddi+&q5e^5|lZczlrI~`avm>NcS`n;um>$GTWswhGJ&@ zsKX96R@BRIIok|`#uY7s%ydH19%uLB{=&|%t;CgQN-7mQGj2sbmn#i>wqqXVD6udUy=F`wC=LH5=f0JRtaUM6O#5=J@3m$cI$Ya*(gH zT%%lXVG;1HjN(FpA%sT`qN!R8vSF!8N*S8UsV`#{cbS}qg2ojy1c~W{q&+4lU`xlp zzvg!0sQnt%c<%4)RZaFN`NK3JuF zO0;Jbv!UT!ikU`4OgPl)f*cRSPMw6Hu5}Br%w!R~pXbnJG%&dX>(FQayNF{KS~c5q zz85*tEvXqzaV_Y`XOFnn)c!pOJ7z6#UXzO0B8@W)`0V80_1TG;(`Q!%IvQDg_Cdnb zdbDDirD<796jjXRvvU(6nwkp*ODcgiQj4M66G#x+M|O3iJD1P?@1evJBb6}d!7L?r zTu;?e5uaV@(mZnc>^GfDx=VyPh8cWz<)2oSgq>Q;>y*#_fWNCWv0Og;PlTlsVToa$ zKKm#cCmLaL4uoY5rbYx8Wj2_|=CgkjSgHFEhgN&0X@@i^suKRjNy*9ftJ0SYSOb zsz7HvudKRpDms+6Zj@mUzZ1IAq387&%(yF_myXp=%0GwaHAl9yX$k6W8qe!d%!t+| z*Z7n@1;q6AA|KDI3d7=hUdq{K;Y?QrrqeyIbX3x9}26h*$MH#^76bEh)9;9lB-&ar5#mhrqeyI>t&O(LE2%M!Sljw?7Eqq z@x0E$ASacjDxuHNu6-AQs>|dwHk`xrdPbO>DMT0^V9!g9b{rZ?u0$WK(hip)8O3bm zX7jwBLs{yV2y%E{EvVjpA%Qr!d#Q$=YqxaH2x9FLaWM4X=A>Iv9-h}Puv-e}lS_qt zB-7N=mv827l_nU<4G*VP*$~FDL?)Msx^cm=H!m%cW@yJb4)ZXGVv%y_z2CaR7(HJh%O zpzR%%5?Cdq8QRW`z(Ba8Cf2iJsUR_(khFLEFi-CAX`Fg%qW4d_MWqgyao}jI;=rjk z#BtfUVu93SIw5I~?x6pmHY}2IhJo`8a_Za&pd5usJ`FbP2OT(;!f&9B+6A=)X}v>< zrcUv9bqWd^SI}y8=QAN`kEJET(hMnQ=)Y^So32shn@v|HIZk}DUJr98UqN$Ef>qw8 z{~c+)MM`32q1{bD1w@l1GIu=vAl_7e1a++~z{Gk3=;SwI+eEs zj<~o}66nxP*#z--#Z6JW*(u|tvn12$8$?HqBDY?jjhiwE;eB6{> zGR#|1+m$0nD%S?lX5p-rJe&8Twn&l#TfN0>yrxGQDSZV;tJB+HQFiexeIb8Hax z8pC!PfR&IigPVd`qDyYdUolxFm8B}7&(O~B`(Q9GlbrB!xhZABAJJ`h>4|R_kOGb79YyWK! zIhT+ol|TCi(Z?`mNkwcCM26PopzR6&?gkMtt;<1ka$OEya9L6W-v-gs;{Ny^>Izdd zJku;qtHTWLx{g7*l5df~A}Z2%l=N0tj!yX(U zK<Hb9pgp|R*_%#}}n)g%RkfuPQEB-}P zhM6;>t4SQMT>iz$6UkXCdES5i1-b>Tc?AAIQd#08n8Ux&$!Ddox=L7KI{g9EMqzce zlrzlBznCT>;e6?egwtCt|DxzJiX^9hfu42Azqky8oK%*oq#q2ee{myNb(x$dOwJG_ zrqdrlJu6JklyZg#*uPMt9fyXJPoNK0X)l%`8O3bO+1dPy*HI(&CW0LP#ha*}(ZKqm zpyO?jipz<$OT@v@Z*1w7)C`IpJb>bJn3oDlFd#2Aan^iE9?QP?k3Y7(WL`4tTYoI5 zlwu8VN)JMi8a4<=85W}+e1@Zu;l1IR6apHO*vs#|)YO7_-{Um9eUCGpLJhRFUNSaF z$aHE(Kb{*Y2P4TNfr0ZHO!K^k`V|Zt3g)uB3PHB7S4D9=fk@HR3U~$vRV|I7b%<6X zout6+N2mnTIz-D+iq5g$>ci6^Vyks6>JTkc1omFv?e`FL(OF7_jnWI`v_c+{4gRL?#gsu})nJ#p2)ch^7WW7m_tlH*?HP1w)_1eJu}9$3TEt_V!3` zjL;d#2!SO~F0~jML|2eRg0-r8(n53H4cs<~+{_eW4E@$>j+TKXNNoxVWxq%1(%>3b zOptm^CnW7{uAF=o=}wYzhI$@NPof#WUj;D|g-M9SowcODwljfO=d4FIOsF!9rW&vG zb#?$7S}{i6p<0_fL7}`nZ zZL#hC%mxAnj%h^1bp59jA>!0&2*5Szj1 zCjecIejnOvTW|<2k%iOgBmu+!skzeMY$A)MTz?m-wt5$XutHj4Z1ZN@Kx2Ad!%;@1|2o z4-fy%0k^e4)_26D%_}jJDyDyJXOW&F<3#J8BEte`PLVCW8omAJ!H|s_(Hc<2VXynp z6lcoSxHLNtOyW3&^0iv{VwiS>Zk2GwP`Kik{&vV>&N&SdM66l zj{js~qkfe{Hkr*i82_zXqf}^{!M908cY;&qOw!h`mT=4|!x@srP*tw2fye4l2o+@G z#&D(y8bgX#4F|Sn3@1*3J}7EPTh>FsYB*C^Q7Gv&?P+mTNHP?C`A=}Fu3KY_G zW;n7i+>BhE8Ho#BCp?`QhCHEyuRgJZL8Tdj98h7DXd)_=W)R|xRrFozgdilE1_I5~ zngJvsFH+mDj4;R5nvYK5n}P+oR5fkQQz6+BxjAr`Xi8? z+$zaFQi~bpy%p4z3*EE<8K@SPghqL_I;lPdB?8(atsVi!>@6pAAdgm!`mkU6$j!QbXvcbFN@KIoU}z=4j%K`R=Kys^ z0xeTJA%VXGxf2qw>c|euq=a5eckKz-r_hZY8xY$v_Qf5qogka*9L5{d$gMZ(<^jjK za2c$dHQhI)DUeIQZOZ2XM--iK&ta$w%aO{p0ns$w(*~-+emRE$hX7i03|xeyva}AA zW!gzQ0Si1&=~oJ?s}SmUO42tVF1Vhou9k9!ekUc<3D}2V;O+=55#kL}nd!s|raiCu zPeOdDlrs!E1&fj6lB#0yinyRMoshIg>f+Cm&jnJ>(B2-Ai1qGErIew$vC*%Usej&A zz9LtGLd-mjqNz9hcK}gjHLjR~P;WI7lJ*$*vM?}B${G3>XHlz3$i&jXs6lRva4}OZ zCTIyS%>1sW==D`}UFm>44&{laQLJL`8%E+Hc?Fc%Ds+oz)^KLS72{;jG$LZU)7}?R zBeeuUUF$YrnTaHLIyQxZ_7e%l<7gCgygBia8N}L!R`<)pkIU%katXkyO9tpvZWZDT z8w#eu2<>hG({zruNI66J=F^EV6M>zDTaoWS$H$XyM2e=q3)je?CWQn;yIrsWX%T@w z{=i6(sNF7Dk5aRMC1hiRw|I)6+Xd?sfn7+r=Q9*Rmx#4Q*eLzcw|fcmRY-;Nfm`CP51$^IPr7jrc}xq+Ixj^NzXuNd{-uAyF?9f63bU` zcG3eO2}yf&FP}-eQ>2_>@blOckYfZfj>+rTJ998bw@XZC?D={*dtxWlkwTSWG_@1n zw%gf3$ZA|MM2eYCNZMoS0by#Glryw%{&2Fg+a&{$Ha4lgvFxm2c{86Ks>cjtr@gPq zY!g9^BwQ3udrTu5AdxvDvk6$K%?RpRQ^3l&T>`7hFzqGzqY-{z!ktQ=fs^5OdmCEI z0te0NgakefY zIBNygetd+5Zb57Af>V}MmezrO4i8d=$jLm{5t)T06yj=Om0_M9q!M2u#2chC)9D`M zfEbA{m2!p|JxC>0#o`l&sB5L+80RGT)t4;JiMG2N)Y8uH9*k82ojwlq^!r`8oRi;4r*{Yyh8;O4 zZ%S{s2!2P-i5VlRbu@`P1gn@zgGSZ8^EFu|aR28!A%U$x-k;7%9mL-i=S1yhC&wVi zYevuCL~gxNH_pi(G-@^P3}1&*AeTOE=Ci%!V2*INx0ExES1#vdQ8}x$%BV8*-->tn z{O*mSHQTW|C6%Rhpq#@wQC3$9tE+?+rqj2#j-N|bS4%m=Je?CIzJwKIOG}^6r#mM< z7UD9Oii?ubIZ;xay>dAxr&f^91;Qu8{o$NMFxj|MBIlx9&PkatFijX>cz~S~HRzFO zDEUz+u~q2%MYD!8dnWZE^Y+%|sF8{y$l;v4iRu}hlM_(Tv2*fQ5yvhO2SdLhrdwGa z&dJgawzvAg2$RQvGaQCty508HVMI7uOx169v{digYeb5swqqSPs7WbiX#JZFNGB-* zcYBLOt$(u~rSNY~mU3Qj)l-DSMQpT5AoLdmUU&$)M66W=Jx{|64}oihnxE@JtqCBg z8&5061{tN0XyS#pLDp}QY>-K$a`HCFbP8bT-ykEZ*^fe_D^00BcwY#9+zm2#4`zd_ z5EGHzAT!mMlci1K8fDuc!)>pr|JKcE8)U4VzCpGOc}B1tb-lx}J8EQ;6*#d_5gHI< zgN$|b$LkQ%CNt-{nGsm?I# zd7@1PY~4FgRCO79b26$VOCT^iaaM`&`ZF7MnVdM8Mnp{42mJ=HQuiVVoG0oZ_uaZ%z7QnLFZaEQnyp? z7VINdEPYVYC(rZo#`!GQM*yO=q@R?w82TR`*zsPAeDO&-`Qa|rRL%ssKHT*;;b4_; zz|ilwSPquD9DD>_^ri_}lp3V!I)oWN+|^Jp_DZY`D%2%{%aErKSrARVem+%WF$j0& z*>hIa_&ECGT0}>xQ8BMms?p)j;i={9%gAhf*@lAlYVLBo6LQJroZmE`-0l_`GBnQl z*U_jo$?y4eJq46>w;>z62WpyQ+&++x8$As0@!Yac&opU9=M2M@#Go9|7-+=YK!<|DVRVAc!@nbsu z*>kgyTEG%<(f5aQelZpRSKFe(z!YhK>GWsMhup%xOp|hk2iQ4RgC2>7l1)%ztI#85 zxP~(uTRPdC^IxJyYCD1)&iS;A#)riU`PQ2@UrpXEon|P0T@x^Lj!(neC3p-4533|z zN)YRzDeHG&gWu@AXexQ+s$zbmVB!Euc{|YclST4b@3u3gMfFX$2`PqHd{`5aEIuiu zowlcln&I~imVP|VB+aL^^_LJ@*r0w~nD%VHNX#_IvoxC8BNUP>u9r@2U{WisN7B5E z=YAra#lhb0yp_E@795)1{v8>5wBFa-x>gR2nfy-<_yu%~+E18fEGPu{(&lrGX=7G^ z!nU9ELd!_N9WQtYT}ZB%e(12NbakMZgMRbE3K`!qXO*a&cC?vExLd{#wO=Qep;Nj# zQp~XUmWcVrv5c57p)0E%4{1dOd3zGa5SX_2VWx6IUYzKKlflA}uk-u_F^9@Uslt9eBf)edS(qKRow-F8T2hGP0(1WGc7TJ}e=*i%0PTY+gA zV4BpaFQ!e%hF6H#7$VUkF%m1F=N3^C{n?NTs7(ZPB${sf`N4LE@}E1R0^lx{H@iS82aY3@2seo7o>P?FI$zjPuuj+VC*7Lzx!-Zs+5%Av>*4}=4a!$ypnf$Dpz z!Zlr=I*1&XvxW|XoY|$AJPq>urbIWtV#{{jn`-RPn499ki^0whASCUNzPc;2(|dgS zv7DRCmrs`~kBlJyRgA=5+ddBx$-z;M?K0t(mCW5U?n5|QGH80jfu~3yN&Lo-ovfFV zluSdwBn72wrR)l6F^V80Mh$wt#CO^p{WFWxB9!YHGm4;IKN+jX((yEkf-r~+1d*X2 zUIDEE`6akc`!RvIATkuh@jgThrjKHkATkuhQ+$Y=Z@s3=1(Bg39`8duB!E~dhztd> zuMe?r0I@_6846+_AEFt4)9aan$WRb_`4G7)>hU;35E%;MUKCpK&_nYOrwJlML3|5^ zZAXKw(TOQi%+TyasMZYgFeV8G!vIF1hcQkt7zQxjL{p}fk%GZ6fbqPCF-$NR1~Arn z7=r|ZVF2UH9>xH{U>LwC^)OBr42A)W@x&O4)1r-X5WJmkAAt&xE+ZJhv05E<>;&@I zVmpD`4{{{`tJIU=mm{1+pdOjpi=2t)~ZNGzX}Dkb?Y3u7|i& z5E%;MbRQxn1fPEF5JZN8c!LiyXg=Eok)a?K`w)ZXvrP~g3L<}K(sm|jK3fHmp&-un zAs!y!af=`_6vS#DB5&!vUbhM&LqVJm#J1H4l2IAl7Ae-n&7HWC$OM0k++UL2EQky- z-mC?6K|^-D-(F(JyKM}qKO)rEOC^Ru?A><|n`6|*Q~Jr?IELzfLouM}*C!CyG4@UX>fUKQ+Rg3T~UdzFVhgS3ZCCf^N$%`k}l zoQFM_*b4=Fv0yU{V!!KQ1KF%`y5lZOZX7i*D2y891`-zwaM4@`Y;U})kfk4}lJPdH zi6H)G0I^&U8499VO$71w0Ai^iG8DuK7%sgE$*}I70-7VGxHh zux$+#9EL%havx4aa2N)0Cirmr3l75|&Hx|I(SpM;hyxVZzi(X#e$+gI;`Zx8a;w?HeQIvLzb_!|n^izd0l zRg&bJlB7Z;-<2fkCmpQe=ql5QSc*t`EMnCM3ub(poyCrGI&N7!UfIbdTi}=*6#d9z zN^k!3rmvYdkF2#7#PtYSL&3Y)D6&+cuTs86${7mPMr6zFOhdtYz)tQ(pqsGCgQqds z0?Z`+0C3DSqE<$!nI8o@^4(pwBV}JEi9)@*!xLdLz`L&vlF2ZdoO7pFh1K;1=C*$z zX?f)>2>Y^5sxkC!~8OG zvL9xAyNUQ+sj?iUZDY_x@@Q#t8Lkc6XpL9F752;qD%8=ez!8WhUxx=1O--mn#z>*C z1a*wq7n9gV88#5(Rn&@}SUMx<9|roCxWi=jKeWcr=T1_)9&@#J^A?LglQVR&vtRA@2e zaGPHgmpQBXB?!+$oFs@01(Dj>7GW?AXfn=5L#Rk<25sjfnVc@{Pe4U)%y<>tar`Ql zF0&DFC@zvEUK3m^>!J2?HAF`U2!Sqb&QQp#2C0gdaSx8CE#k!C2Ni zufMfFr8GR_IH;4On+wUuF|_vdIQ6HlDa>ybu#jDqd0yPNu!WMxX%v^PZB8;y);>Um(aEk=7u zTw(=1b-FBrjGBo70h%XfYeB{L&6wF35UiI(Y!DX=3b+O+l&&6LyG^U>FPD|$f*Vs# z>VB+pZAZ21;VLr8RUF4cNQW|Ip6%mGq|rx4*3&mzxT}$skn^*$aC6>Hg1qT%+XEOu zm(k^wd1B}i^jxxG_B^ZsNc5vvIf`nz1fok?G$=i<8k}P$H$MYb8QDlnC?e(3Kz!i7-kVx^iTx@0oGv zQs}uWy_uw9@hYTC!#G$!xhwfNK zV3cL(&h-u51`6^j@Ymtc9RY%nHbRk5VCed2n~btZq}r9pFDVh;76pgSL0u~m(xF6{ zXC=Z<-asOZ(uVF}U?u7qW*j=*?Kd+!zoG+yG0MVdjmzjOIQi1X2U$Tz`9&SeDCv+< z=2=GnhBO#u6ixL54R`2LEZJDksG)whci|4*F3n@)A3ERc{~d6r?7(3MTJkh3Sa89R z#4Zg&yP|KC9EQ;(7X&zEM2hNZTe&q!-Y#{wBHNJJB9#~dUDdS@>WWj=f?P1q2!*T^ zbjCh~9bt2$j4DXd@iHD+aQklviraf+$<4yeZW&Crs-J`GD_=L*fm}RNW@HE7yqCCB z@ELl8&vjWH)iyrf5zV%a>n>n|e{DcIC#&2xWMj}6p_EJndzZZ5_Aao=7QCArn7Lzr z%h541j*cHSKnCeamB`sxbx!b%$LocvMyU4GPLbpYL`>4si5b9xm$!1?6FBZVFi}acfR(7b&G~#?EdIOUy#~`8+5O ze6TB&w|SJ~BEk}ec8d||E^zD7G<585(Oxt^C%GADt^KSl82c`3s}Q+5GZEcJ6Z_M*6z~on zRY-h8mtS*Mngt2@1~7jA26~W{D{*T!id*vpEAb1hTft9;Uf7owSgeO`LHqA6ZPs?# zP=^qRbO;fp^|+NJUXAybcs)nF_VEFx94gDP{0)d!Q*Qn_u_KBg+QRu7gxL25K9>ZLwpRvl$k zYGA<33cx!bDN`F0`e0eUXV-vVAkDLl zL2GZjI9N($yJ9hlrZ)UQ-W=9p*Sk+*nv>#s8>FM^qs1XmT3eJBqiAZc(vs0Mce2FP z0|MaN8)hFZ?2VdxUC^*Mz|7S563t|1Co9_<-kr;Ys9K9S3zunQKDbc zen4c{bU9DR&jOei^&1OLhF}sBHtz+4*ef@m#^)I7w}E9X?!%c@@cb_l!uGr-r`8pTxL}#w_EL`E5z@H=xis z3)C*+Gt17XFixpsrc@&fF8ah+2TXm>LPgcajj_5`j%8=mFXB_b{-|r!kLJ=&sYDsg zUQ!AO=s!IJqmxQXb&@k4s*4s1W?+vgsD4=tV+gzvJ4bYmv)?|N#+j1Jz}dgnbIr(V z7}LQr7RO|XAEOF1d}LWXrGH^HjGonFo>7gFt~>bt5U5oOol({WcmwW0sAfxmE#MZ$m6>jS4D9KX^u3Ol=XXN_8Sv;SoyX*PP^o>&ICinu8 zgU^EQFoi0yY%Jg>@B)`e#gDCxrUS1uk~aj9+i-v`Q4_cpigCz{hd zvLjKXZ<-npiwgi3o;8S#N48qnX0Pp!rL97a!KZ&kd}eWtS&0}Pnbc|G1%HHveKe0c z10TJV0^^aDgMMe0m@1LmZnR*Js_l|Ab1?hxLQON^d}*zGC$HaNmdN4v9FWQDjVC%Z ziyKsx_lsGa^`lOhMdxqZ7T-Yq(oyQ%k!8ds+sm@PcRZy(`K6xDivDrx?iz860 zlHD((^vkC@F-n#%T5P8$uca8UL;=HQ`m0$dFZG&rX z1Knc3G5-Uq<{NKiPjHKBD!2j`(`t zh<9#5JW8y{w;(DhRf8SW);u?o8V-bw{{lnM!HD0XlHD&OzU!y^Z^Q@vtP>+{`*;+D zs81ib=wN+d6iqEqTDt3~^93<=$pMxWh;!}RQ9qirxbMq#%dShz)Ytu7cbaRMyYKrH z6e&@_kY7ymE!14M^kqP~%g}|Icz)O0TWn2bU8om>k}kH97I&f6x?J7#ZNV&c>)g6u z`FYwxeGH29{eQE@k{ItA8W7usdI{2y5Tj_SRpq!87giujWHE9Kk>yB|2(!3QFG36g zQm2U*vQUeJdVv9=EI_XLtel9>EY!4!&P?0ed`6uAw5_%BowldKpmI#xL%?$Tg*v%w zCMB&dgiaN^q|2Oy+ild4b$hE6+^&wG#O%K*#SF8|k6?lU2H9Tt7fK+MKq!Gw0-*## z34{^|B@jv=lt3tfPy(R@LJ5Qt=)MGo3_a)EVdtHH!SD-5j~P4elJP<@|4hd@coeIQ zoLV%e^2T#7id<4%U0FRMGNm+D9gCFJL@FvH6|wmI%IcdUWfk#Q_3WbJSfprPQCWG> ztn%3DUd4$Ovnze|hUQt#v^Tx7Hd0zNFNXHwk(yX}tT-MkiNs4|k=bR{HStJMNl_JA z&(dBIcs-+}eTy}IPDL_d(1Ru5D!Jaqsqb4uOxHLp@Bg02T##YvrL-(M! z)v_nO{@`q?+2@paWXTD_>C9wsj&3Q%TWhK({V9!SQI}xvp%!);7YeLzE7;O zVhYloTssSMQeDD6TBQ%M*AX125U+`3_S4Er*yrNdn7@4{UFTmLFL9A@!am zf#><_SK(i$CE%_nS5-_Y=G$_yvUxH0g}LJLO1`K$Yhk1+7OVE&rt~AH?`L+Jg{&3y zebxD;*k_H*spOt(ytKNqc1|hYjuk#5v+$N{ta@ znmDUAE-!x9l-&|Tk)*YbVw@fsBNWWrojzgc@@nK^-(=U!NL7)%0a;R}uj>LV2uWPP{boAHs>L6UZ~X62ULpj7?*3Y`gjgyt25mT$;-&(H>MV zHDBr?0UqIfKPqsWj2XH2_Tgy0VKB@2pURq?XQ3cRIUULKnR9U?k&BJ`&s1BWaa zGW4v$@}_mL zX{`9B$ihl!G#)n0E}K(ZT|{Pl@5^SRh*zm=mEUvE%FMuIePfo7E^6_e19okg>6&?& zR-bA_N@}ZVZ?Ofj;##(zncV1Nb{$Va@D?^{ofo84Q#QA%d?7xi5G$#P%&kO&@v^xH zDkF37mM^-6G$e+1+p8)oYGRq&Ff7B@T_|mwZ`!Di-CP^P*BrbTjPY7|Q85QIR+5>N zeWkmqx)R@;m@DK)gPfaR6ff0RgWZo(Y2aZv@oZh+aa1dpq+A>fmjTT3v{<|cugHC7*OyEE5_$OY#OIs1%h&S+_N zv^1Mxxsi}fwQ&xtv zP`jdnYyA8&IH}YJPZjJiq_vCQ7!tPa8mL)&I=!6Wf7)d)ewt(W+V*O~Pl?;V>G*NX z@Gq1=D1lG{p#*x41PajA8?m`lz7oHyaKY7%(+?SCRhP!%=DS{_^mT37cTr%@S(Me_$Cw{gI{VmA+2y+tfsiSOg06c0?JI(PjAND zGTLT-1hm&b>Nxz_8GkcZ;Im>Drx`f)z~N6r7##Vm+vu7rYv<02Rkxu0bEo>sCl%Gi z^-!T~ggt}u@rxXXzXc)n)5>i-KLK6?@D2f9bx}o0K_; zt}Ci8<3}M;XWc=L^T7ZerFP{y$`1qO=Rn~o0|mPOH#e@VoDV*nMetrIq+0m^8NJu>_;%k`5PLAUW?l_2?`FxtkQQGqb$Kg-BOU77i3|0RIS1l0cM{MpSNa>OVFW_?8 zx3%_w+40Jf*TK-0FdMcp00TP(OjUE-&c#o^_4Q|tU07URR{VRY$vY2W1Xwh-sG>Ml zE>%Fr8IN8-ZJYsfV{?nE7T$=VhDkB1Eso#FJ=LYCeblq?(Y#?gSJKfd*5Febq37#H%Y8 zj;<&fT~kvwr(zh;CIDxIkKJPVdLeIOU<9#hSF9@Cp+knBfBubnH#E9xLaYcVx5S-( z3x5C-`1>J5k4U$iIB?Ka6-6qEmLR>ey0;8%w<=cJnnb z)ulH({r>T=ie=3Dpm;(<4ay_D>beBfOnbJWj)M5|Hq;A-c!nxRrzXQ=D3498?A>q7 zMjeN5YzmG?Xs9^c&4?h+h zmC#;;@(8cGE`iWq9p@5=FMoUWwwfzW6j zXAH!bztMWTPc`P?vOeAU&L4XBOPQxSx0-!pJ1(KcT1kX)cO?*7tmBM>5c9WKZ}Z7o z>=m`;@vPJ-*?Qjo#AHV*p5$VvsMye++7KTHtRT}A;kP`*4u${ZI)Zc|G53I zexEm6#S_gQlpUPVV67y=xVsVv4c2kah7hg6mY!3Qb}pMIhdm>e^N5emb^7i7p^EK4J9mWN4$^SAcUsBDalt8^C%jf{$y8Uo7bN5pz%a+?7EtLJJMbqbFa5 z7TW#MzW^k1Td23&s}|}$pgHkRhxU89MOk?7#vm)9nFi(2ldnQE?f&TVUNX0tdRx4{ z^M$3y9M*5!Gur&OOM`5LCK{ASPreFGwELs~8IZ_rqG_8&!83)czj}DTFPXE1C)Nbn z2~9O9kDh!Lnrin)e=tZ`Q>{3s)b~XQe%B(?7a`tX)vI4Wa~SEUg+UJd*2zs>ZtmJm zUB=;G50XGP&C|c3YtubQdeT+@rcpNQtejnAUV*dUZ28t(AL)0x`BuxfZwt!IS|~m} zBadBZp_2fil?LV1Bd!jBh0;=cgzQWw{f}NUT4l_jI~mG z#(u^thxB{oN6Nx|vx2OIb{dpNkG=}+wA;gf9w_9tQ|~E^Yo|O{ziZK9{hn#n_CIq| zkdM$vgYxLnSD}%1d-(Y+{8?ocH^wXZ=%qBa;JFXpDzsFS_$0gk&l=xB$mGT?zmyjK z^-Kx$+E2#UGo`1!=FcUR1g!6qQ{OIphQESypL)TEODbZ;@hO!zUb(mM zjD(W@)EU7h{N~4nj|*V<*E1#1P0!Qmsi%4T+Cm>w&2M5wS^Teu>?xc(K+89L-H+!u zq2&eT(UY%2%j^E=^VinY@~$YlDW<=2R(Z^x!i&s`x1lQ7hTr~p8Yf)&g7OKk@|Qrk z^676>s{Qe2%lMLW^yEE-|HoM0t_OnB^jjY-FSNd(e8Q{zB@kMl{;_zF86|Ch2bHl4p0-*%DA_33xCdVpD z4xO^MaItyp@N||hb8xQXQ@`-9=SrYE>m8-WwXWw%PkSD;yc?$PE&QFayz6fX%EqpF z_N-aB@e-6zPrBM4meBjkNd`7`A*>rJWY+ir?M=8+<&3zg-`e>rSPvS60j!NmAW66 zI>(|TzWo>X(my9aVUYjB@jBKdQaHi6l<2B@NVG}v)3{)Tn+P9sh)-yu7=$o z@smL!g9*CJ;oAe=Excozw)3rUIqbf`Lkbxs5H5#~!~K~wTa?EX^}l_$u=w*Twy%Wi zVMhH4GaV;f54*1gr+`Ez8*~@MSO5HOVa$9Hv@Ki^yD#yOLPiOM3!>wk(B2sBLyN&x z?-cenU%CH8xF%*)p)fOC6ZeM>L_j2MO|)j{E{iK~d#A8qg0^;BxGe4uv4=D=NFZDm z_3imA_E_`67vC-XS&<6vrf^-%ph004B@o^#c3%%p2Z?NU=q`+-zw&P3mRZ`^Ps4?= z`%(`nWRyU-Fgnihkc>4*`(?H9MP=o&lI?%pTli=5Rng}8K>^yQ`h3%gPxJ|Vx*z_9 z66mZ1tQ9iuY~2qFzJJ%oTH)l{;^J6M%`1iP7v5yPYJcMt49X?E>bwN3Ju>cm?GHx{ewN0w$KqJoyx3J=c(3qs^Zn7E zE)90mnje26Z5)8^DPscf7#W9uJx2oFxl#0+pFiDmq~|#NEJm97owH`udxiTJsT9sK zv6YFnKf0r#y;-UB%(y$YM~PXR>zUHiUZ034-TvHXhc!Rzy|?hldc{oC1?7}(iQyxQ zpnSrs{3Q@tqT_rN;!3x~t14pAqT-uk@$WwMUSZ^mD$qaN78I;CMBWi{N#y4-LSqcd zsHa@*uO*QN*;8be-p_u>NHawKMB3>W?I|35mLmW7_FyGzf)qbZF#PMe64)Om*mI?) zJr6#xkWCqypzD}^e9oT2CFc44G2x-Mo~|wjtpA~3>NuxCx@pUy`EZo`ME{(z?-jll z*HQT4lHh2BOJh(TJ^3nJ8oNLG13{t#b99%9vq!aogD$^JRKb?l0Y^@uv*`q=$pJ{=^|)<@S4 z-G%YAEqe+-IA0q(FT8*3zSKhs86^-djKP

`%|=5%AxbwN36*BI8?GHx{|4UKU3e9QL-+r*S@IhmSk6$0`ZfJ%lQ+bY;=%$J9)n5`j(eyNp67i5*d~xA3yBXlI_kFW4z-eiVE7 zA;q95$*z65x$ryHH~23P*8uy;gBUSPIbYy);T~tvsx2&e7tg>QkWo<=#$O6a7T<2iaiB?v}8)31TG1$&Ev72jSHSsBB zb7PgY@m~0GC*pEH$8s>G7!MJ-xjMR}s45<-o>);5TX5E~ig*I@FNv4Nsw-mgp(932 zEt*q#f?6AUNs4%gjsy5Cq8sBqghxlY)@a?N0HBWu5!%F1p zs@k||W&Bq=tiXc|TET5*Bzz7^se{f>j#ZZxmGk7o>bo819sHCl9l%2o^g+yY0id`X z8)lHEGlyePt>bNfotZy13r8(mgJ%rp*^U^OKYUdF3sglR!h< z=xbNa<&!r`b8Bm$I-f%79KcLKIiLn`3xJ0~4uU{71KtJ9fOLpIr}UIrWwU7iPF zT?kU602P2+0Cj){z&gOu*amqHa0rBZ7vMR-Co$T82fPjV*hd^^FyK7ENWe@$E8s4u z_Va*qsPj;%k$}~J3Jm;1fTQq3OwR%ej&Yo?0iFe%)eq(Y7ytoJ09*xF09XTf4NwRH zUkF$PXasBkGy|Ri>;`-Q=nI=Z5il4q1+WxwFW_;&e*u0C*b6umS~eaq7jO&UX~1s) ze*hfRAMyZP54Z_15Aa>UF9B_Uy?_FY+-N`y@I}Bfz`cN90A2;`0rbKEo&#tAJPJqx zPCm(TJ`VUKU<_ai;2ywt0KWwM9`GvQzX7M>v*ecnz6E#za0HH}Uk$hw@I%0pfS&^@ zp|Z7rRe;|CZp6-T3~(11uA1-u5BG1PIs4%h>T!Z;TK9sslgUIn}fIP+YL6W~XH zzW}1c9Oo;5RzSgd;2&@a;8wsZfa3EZPr$DLuL4fLz;T8FiU56w!!7{d1N6NRdIk6@ zU^C!jBY*?=E#Sz{U|azo06sAivIE=!_%7fPz-xdr|HE;<0C*5^%tg=_Kt14RfENLW zT#PXRECy@=`~lEsl;dm!e0((e0oVw5A8`H{@C|qt&}S_44zK}m!Z^pd8E_Av74RzH zkW0`W;8MUHfR_P>jt3s#VZf_^GcSdX0cHbM0d@ffPJqq=N&&}Dbe!7(>jB4K<~W}P zd;{6c)3|I~LKHxWiJ%AIgguMbT02Bl61bh?l zOF$do_^V(KfV%-30llLb7r+?6Lcos!KL;FqHR=QI2K*Lq)HQe$8gLrmOu$6I*8qc6!1FWkn12Xz_oxo0IL8$ z2fP6IH{j5zm{$Q40S^M61iS_~Wg2t_@IAn0KpWuh>FC4tut~t(fSrH~KkGP400lE( z_kc$L$9@j;GhhYaA;1p-zXbdqaPSR|a|U2MU^-wfAP%?{a6jN>z{neM4R{RjBfu8G z2Y~)FVGn>Nz|R1$0?sLdOaV6o)&kl9{|1~j3-ci00l@2k4*;JkhW-M^mtc(qya+fo zhPD7d16(>AeFeM)xNZ(~2=F4HcPZ8+z$Jj$fSUmi0{#NHs0_LT_!Z!&&jSZ=2jH84 zp8@_27pfr? z;0C~5fFA+20R9Z9{UYWAz!QM^iy@mj*dyS3w_~ja{2kDD33M7T8Bhzj8}I~RTs`KF zJK*O4KK3Qp9N-Ipb%5Uk`ZS>ZFJm15Oa{yc+zWUb@MplG3HUL9xnF@F1GpVfaHr#( z3m6U<3%CRDN5F2t8-R1Z>Nv9iYXCn4YzDjr_$T1_Wtj5;g8)+jvjDxmhIJKiJm5;e z48R<~LxA4{UIh%i3v<`kF&_c00DJ-PG~k{Un1=wb07}0Bx!sMiSqVCTYXM&Xob*ks z6M!{<9e@wjuK~_~47v`uY6Ij5xDD_GVE*H +void writeDbgFormat(byte lVl, char msg[], char format[]) +{ + strncpy(msg, "<%NODE_NAME%> ", elCount(msg)); + strncat(msg, DebugLvlStr[lVl], elCount(msg)); + strncat(msg, ": ", elCount(msg)); + strncat(msg, format, elCount(msg)-strlen(msg)); +} +/// +void writeDbg(enum DebugLvl lvl, char format[]) +{ + char msg[500]; + byte lVl; + + if (lvl < OutputDebugLevel) + return; + lVl = (byte)lvl >> 4; + + writeDbgFormat(lVl, msg, format); + writeLineEx(1, lVl, msg); +} +/// +void writeDbg(enum DebugLvl lvl, char format[], char string[]) +{ + char msg[500]; + byte lVl; + + if (lvl < OutputDebugLevel) + return; + lVl = (byte)lvl >> 4; + + writeDbgFormat(lVl, msg, format); + writeLineEx(1, lVl, msg, string); +} +/// +void writeDbg(enum DebugLvl lvl, char format[], char string1[], char string2[]) +{ + char msg[500]; + byte lVl; + + if (lvl < OutputDebugLevel) + return; + lVl = (byte)lvl >> 4; + + writeDbgFormat(lVl, msg, format); + writeLineEx(1, lVl, msg, string1, string2); +} +/// +void writeDbg(enum DebugLvl lvl, char format[], long num, char string[]) +{ + char msg[500]; + byte lVl; + + if (lvl < OutputDebugLevel) + return; + lVl = (byte)lvl >> 4; + + writeDbgFormat(lVl, msg, format); + writeLineEx(1, lVl, msg, num, string); +} +/// +void writeDbg(enum DebugLvl lvl, char format[], char string[], long num) +{ + char msg[500]; + byte lVl; + + if (lvl < OutputDebugLevel) + return; + lVl = (byte)lvl >> 4; + + writeDbgFormat(lVl, msg, format); + writeLineEx(1, lVl, msg, string, num); +} +/// +void writeDbg(enum DebugLvl lvl, char format[], long num1) +{ + char msg[500]; + byte lVl; + + if (lvl < OutputDebugLevel) + return; + lVl = (byte)lvl >> 4; + + writeDbgFormat(lVl, msg, format); + writeLineEx(1, lVl, msg, num1); +} +/// +void writeDbg(enum DebugLvl lvl, char format[], long num1, long num2, char string[]) +{ + char msg[500]; + byte lVl; + + if (lvl < OutputDebugLevel) + return; + lVl = (byte)lvl >> 4; + + writeDbgFormat(lVl, msg, format); + writeLineEx(1, lVl, msg, num1, num2, string); +} +/// +void writeDbg(enum DebugLvl lvl, char format[], long num1, long num2) +{ + char msg[500]; + byte lVl; + + if (lvl < OutputDebugLevel) + return; + lVl = (byte)lvl >> 4; + + writeDbgFormat(lVl, msg, format); + writeLineEx(1, lVl, msg, num1, num2); +} +/// +void writeDbg(enum DebugLvl lvl, char format[], long num1, long num2, long num3) +{ + char msg[500]; + byte lVl; + + if (lvl < OutputDebugLevel) + return; + lVl = (byte)lvl >> 4; + + writeDbgFormat(lVl, msg, format); + writeLineEx(1, lVl, msg, num1, num2, num3); +} +/// +void writeDbg(enum DebugLvl lvl, char format[], long num1, long num2, long num3, long num4) +{ + char msg[500]; + byte lVl; + + if (lvl < OutputDebugLevel) + return; + lVl = (byte)lvl >> 4; + + writeDbgFormat(lVl, msg, format); + writeLineEx(1, lVl, msg, num1, num2, num3, num4); +} +/// +void writeDbg(enum DebugLvl lvl, char format[], long num1, long num2, long num3, long num4, long num5, long num6) +{ + char msg[500]; + byte lVl; + + if (lvl < OutputDebugLevel) + return; + lVl = (byte)lvl >> 4; + + writeDbgFormat(lVl, msg, format); + writeLineEx(1, lVl, msg, num1, num2, num3, num4, num5, num6); +} + + + + +void bin_to_strhex(byte bin[], char result[]) +{ + char hex_str[17] = "0123456789ABCDEF"; + word i; + word binsz; + + binsz = elCount(bin); + if (binsz > 20) + binsz = 20; + + for (i = 0; i < binsz; i++) + { + result[i * 3 + 0] = hex_str[bin[i] >> 4 ]; + result[i * 3 + 1] = hex_str[bin[i] & 0x0F]; + result[i * 3 + 2] = ' '; + } + + if (elCount(bin) > 20) // trailing "..." + { + result[56] = '.'; + result[57] = '.'; + result[58] = '.'; + } + result[binsz * 3 - 1] = 0; +} + +void hbin_to_strhex(byte bin[], char result[]) +{ + char hex_str[17] = "0123456789ABCDEF"; + word i; + word binsz; + + binsz = elCount(bin); + if (binsz > 20) + binsz = 20; + + for (i = 0; i < binsz; i++) + { + result[i * 2 + 0] = hex_str[bin[i] & 0x0F]; + result[i * 2 + 1] = ' '; + } + + if (elCount(bin) > 20) // trailing "..." + { + result[36] = '.'; + result[37] = '.'; + result[38] = '.'; + } + result[binsz * 2 - 1] = 0; +} + +void dbin_to_strhex(word bin[], char result[]) +{ + char hex_str[17] = "0123456789ABCDEF"; + word i; + word binsz; + byte offset; + + binsz = elCount(bin); + if (binsz > 20) + binsz = 20; + + for (i = 0; i < binsz; i++) + { + result[i * 5 + 0] = hex_str[(bin[i] >> 12) & 0x0F]; + result[i * 5 + 1] = hex_str[(bin[i] >> 8) & 0x0F]; + result[i * 5 + 2] = hex_str[(bin[i] >> 4) & 0x0F]; + result[i * 5 + 3] = hex_str[(bin[i] ) & 0x0F]; + result[i * 5 + 4] = ' '; + } + + if (elCount(bin) > 20) // trailing "..." + { + result[96] = '.'; + result[97] = '.'; + result[98] = '.'; + } + result[(byte)(binsz * 2.5) - 1] = 0; +} \ No newline at end of file diff --git a/Modbus-DLL/include/CAPL/include/EilCommon.cin b/Modbus-DLL/include/CAPL/include/EilCommon.cin new file mode 100644 index 0000000..02f970b --- /dev/null +++ b/Modbus-DLL/include/CAPL/include/EilCommon.cin @@ -0,0 +1,167 @@ +/*@!Encoding:1252*/ +includes +{ + #include "Common.cin" + #include "TcpUdpCommon.cin" +} + +variables +{ + long gPacket; + msTimer gtArp; + + byte gLocalMac[6]; + byte gRemoteMac[6]; + dword gLocalIP = 0xC0A80101; +} + + +word EilConnectTo(char Remote_IP[], word remotePort) +{ + dword remoteIp; + + // Convert IP string to Number + remoteIp = IpGetAddressAsNumber(Remote_IP); + if (remoteIp == INVALID_IP) + { + writeDbg(ConnError, "EilConnectTo: invalid server Ip address!"); + OnModbusClientPanics(ConnectionError); + return ipGetLastError(); + } + + return EilConnectTo(remoteIp, remotePort); +} + +word EilConnectTo(dword remoteIp, word remotePort) +{ + long error; + byte broadcastMac[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; + + if (EthGetMacId(gLocalMac) != 0) + { + gSocketState = ERROR; + error = EthGetLastError(); + writeDbg(ConnError, "EthGetMacId: Could not get local MAC! %d", error); + OnModbusClientPanics(ConnectionError); + return error; + } + + // TCP/IP API gives IP in little endian but EIL uses big endian + gRemotePort = remotePort; + gRemoteIP = (remoteIp >> 24) | (remoteIp >> 8) & 0x0000FF00 | (remoteIp << 8) & 0x00FF0000 | (remoteIp << 24); + + if (gPacket != 0) + ModbusDisconnect(); + // Try to create an ARP packet that gets the MAC from remote server + gPacket = EthInitPacket("arp"); + if (gPacket == 0) + { + gSocketState = ERROR; + error = EthGetLastError(); + writeDbg(ConnError, "EthInitPacket: Could not create ARP package! %d", error); + OnModbusClientPanics(ConnectionError); + return error; + } + + EthSetTokenData(gPacket, "eth", "source" , elCount(gLocalMac), gLocalMac); + EthSetTokenData(gPacket, "eth", "destination" , elCount(broadcastMac), broadcastMac); + EthSetTokenInt(gPacket, "arp", "hwType" , 1); // Ethernet + EthSetTokenInt(gPacket, "arp", "protType" , 0x0800); // IPv4 + EthSetTokenInt(gPacket, "arp", "hwSize" , 6); // Ethernet addr size + EthSetTokenInt(gPacket, "arp", "protSize" , 4); // IP addr size + EthSetTokenInt(gPacket, "arp", "operation" , 1); + EthSetTokenData(gPacket, "arp", "hwSourceAddr" , elCount(gLocalMac), gLocalMac); + EthSetTokenInt(gPacket, "arp", "protSourceAddr" , gLocalIP); + //EthSetTokenData(gPacket, "arp", "hwDestinationAddr" , elCount(gLocalMac), gLocalMac); + EthSetTokenInt(gPacket, "arp", "protDestinationAddr" , gRemoteIP); + + EthReceivePacket("OnEthReceivePacket"); + + EthCompletePacket(gPacket); + EthOutputPacket(gPacket); + EthReleasePacket(gPacket); + gSocketState = NULL; + gtArp.set(@sysvar::Config::Modbus::RequestTimeout); + return 0; +} + +void EilConnectTo2() +{ + gPacket = EthInitPacket("udp"); + if (gPacket == 0) + { + gSocketState = ERROR; + writeDbg(ConnError, "EthInitPacket: Could not create UDP packet: %d", EthGetLastError()); + OnModbusClientPanics(ConnectionError); + return; + } + + EthSetTokenData(gPacket, "eth", "source" , elCount(gLocalMac), gLocalMac); + EthSetTokenData(gPacket, "eth", "destination" , elCount(gRemoteMac), gRemoteMac); + EthSetTokenInt(gPacket, "ipv4", "source" , gLocalIP); + EthSetTokenInt(gPacket, "ipv4", "destination" , gRemoteIP); + EthSetTokenInt(gPacket, "udp", "source" , 23456); + EthSetTokenInt(gPacket, "udp", "destination" , 502); + + gSocketState = OK; +} + +void EilDisconnect() +{ + if (gPacket != 0) + { + EthReleasePacket(gPacket); + gPacket = 0; + } + gSocketState = CLOSED; +} + + +void EilRecv() +{ +} + +byte EilSnd(byte buffer[], word length) +{ + char str[20*3]; + + switch (gSocketState) + { + case CLOSED: + EilConnectTo(gRemoteIP, gRemotePort); + if (gSocketState != OK) + { + writeDbg(ConnWarning, "EilSnd: Reconnecting failed! Doing nothing."); + return 1; + } + case OK: + break; + default: + writeDbg(ConnWarning, "EilSnd: Socket status is not OK! Doing nothing."); + return 1; + } + + bin_to_strhex(buffer, str); + writeDbg(ConnDebug, "EilSnd: %s (Länge: %d)", str, length); + + EthResizeToken(gPacket, "udp", "data" , length*8); + EthSetTokenData(gPacket, "udp", "data" , length, buffer); + + EthCompletePacket(gPacket); + EthOutputPacket(gPacket); + + return 0; +} + +long EilGetLastConnectionError(char string[]) +{ + EthGetLastErrorText(elCount(string), string); + return EthGetLastError(); +} + +on timer gtArp +{ + gSocketState = ERROR; + writeDbg(ConnError, "No (valid) ARP response detected. The host seems to be offline!"); + OnModbusClientPanics(ConnectionError); +} \ No newline at end of file diff --git a/Modbus-DLL/include/CAPL/include/ModbusClientCommon.cin b/Modbus-DLL/include/CAPL/include/ModbusClientCommon.cin new file mode 100644 index 0000000..bcb4074 --- /dev/null +++ b/Modbus-DLL/include/CAPL/include/ModbusClientCommon.cin @@ -0,0 +1,786 @@ +/*@!Encoding:1252*/ +// Additionally include ModbusTcpCommon.cin or ModbusUdpCommon.cin +includes +{ + #include "ModbusStructs.cin" +} + +variables +{ + const word gMaxPacketLength = __size_of(struct ModbusReqWriteRegisters); + + msTimer gtRobin; // Timer that sends the packets and watches for timeouts + word gTxID = 0x0000; // Transaction Identifier for Modbus. Used as index for gQueue + + // Global storage for pending and sent requests, associated by TxID + struct QueueElement + { + word TimeoutTicks; + byte Timeouts; + word Length; + byte Buffer[gMaxPacketLength]; + }; + struct QueueElement gQueuePending[long, 2]; + struct QueueElement gQueueSent[long, 2]; + struct QueueElement gQueueAck[long, 2]; + + char ModbusExceptions[11][72] = { + "Illegal func code (0x01). The function code is unknown by the server", + "Illegal data address (0x02). Please check your configuration", + "Illegal data value (0x03)", + "Server failure (0x04). The server failed during execution", + "Acknowledge (0x05). The server needs more time to generate the response", + "Server busy (0x06). The request could not be accepted", + "", + "", + "", + "Gateway problem (0x0A). Gateway paths not available", + "Gateway problem (0x0B). The targeted device failed to respond" + }; +} + +void ModbusInit() +{ + char ip[16]; + sysGetVariableString("%BUS_TYPE%%CHANNEL%::%NODE_NAME%::Config", "IP", ip, elCount(ip)); + + writeDbg(MbInfo, "Connecting to %s:%d", ip, @sysvar::Config::Modbus::Port); + ModbusConnectTo(ip, @sysvar::Config::Modbus::Port); +} + +void ModbusMakeHeader(struct ModbusApHeader mbap, word length) +{ + mbap.TxID = gTxID++; // [2] Transaction ID + mbap.Protocol = 0x0000; // [2] Protocol ID = 0 = Modbus + mbap.Length = length - __offset_of(struct ModbusApHeader, UnitID); // [2] Length; Number of bytes following + mbap.UnitID = 0xFF; // [1] Unit identifier; not relevant +} + + + +// REGION: ModbusReadBits ------------------------------------------------------------- +/// +void ModbusReadBits(word address, word count) +{ + const byte length = __size_of(struct ModbusReqRead); + const byte funcCode = 0x01; + byte buffer[length]; + struct ModbusReqRead mbr; + + ModbusMakeHeader(mbr.Header, length); + // Payload + mbr.Header.FuncCode = funcCode; // [1] Function Code; 1: Read Coils (DI), 2: Read Discret Inputs (DIO), seems to be the same for WAGO 750-881 + mbr.Address = address; // [2] Start address + mbr.Count = count; // [2] Number of items; 1:max 2000=0x7D0 + + writeDbg(MbDebug, "Sending 'Read Bits' (0x01) command. Addr: 0x%04X, Count: %d", address, count); + + memcpy_h2n(buffer, mbr); + ModbusSend(buffer, length, mbr.Header.TxID); +} + +/// +void OnModbusReceiveBits(byte buffer[]) +{ + struct ModbusResReceiveBits mbres; + struct ModbusReqRead mbreq; + byte bitStatus[1968]; + word numBits; + byte i, j; + + memcpy_n2h(mbres, buffer); + memcpy_n2h(mbreq, gQueueAck[mbres.Header.TxID].Buffer); + + writeDbg(MbDebug, "Received %d bits from 0x%04X", mbreq.Count, mbreq.Address); + + for (i = 0; i < mbres.ByteCount; i++) + { + for (j = 0; j < 8; j++) + { + bitStatus[8*i+j] = (mbres.Data[i] >> j) & 0x01; + } + } + + OnModbusReadBitsSuccess(mbres, bitStatus, mbreq); +} + +/// +void OnModbusReceiveBitsException(struct ModbusApHeader mbap, enum ModbusException ex) +{ + writeDbg(MbError, "Received an Exception while reading bits: %s", ModbusExceptions[ex-1]); + OnModbusReadBitsFailed(Exception, ex, mbap); +} + + + + + +// REGION: ModbusReadRegisters ------------------------------------------------------- +/// +void ModbusReadRegisters(word address, word count) // 16 bit +{ + const byte length = __size_of(struct ModbusReqRead); + const byte funcCode = 0x03; + byte buffer[length]; + struct ModbusReqRead mbr; + + ModbusMakeHeader(mbr.Header, length); + // Payload + mbr.Header.FuncCode = funcCode; // [1] Function Code; 3: Read Holding Registers (AI), 4: Read Input Registers (AIO), seems to be the same for WAGO 750-881 + mbr.Address = address; // [2] Start address + mbr.Count = count; // [2] Number of items; 1:max 125=0x7D + + writeDbg(MbDebug, "Sending 'Read Registers' (0x03) command. Addr: 0x%04X, Count: %d", address, count); + + memcpy_h2n(buffer, mbr); + ModbusSend(buffer, length, mbr.Header.TxID); +} + +/// +void OnModbusReceiveRegisters(byte buffer[]) +{ + struct ModbusResReceiveRegisters mbres; + struct ModbusReqRead mbreq; + + memcpy_n2h(mbres, buffer); + memcpy_n2h(mbreq, gQueueAck[mbres.Header.TxID].Buffer); + + writeDbg(MbDebug, "Received %d registers from 0x%04X", mbreq.Count, mbreq.Address); + + OnModbusReadRegistersSuccess(mbres, mbreq); +} + +/// +void OnModbusReceiveRegistersException(struct ModbusApHeader mbap, enum ModbusException ex) +{ + writeDbg(MbError, "Received an Exception while reading registers: %s", ModbusExceptions[ex-1]); + OnModbusReadRegistersFailed(Exception, ex, mbap); +} + + + + + +// REGION: ModbusWriteBit ------------------------------------------------------------- +/// +void ModbusWriteBit(word address, byte value) +{ + const byte length = __size_of(struct ModbusReqWriteSingle); + const byte funcCode = 0x05; + byte buffer[length]; + struct ModbusReqWriteSingle mbw; + + if (value >= 1) + value = 0xFF; + + ModbusMakeHeader(mbw.Header, length); + // Payload + mbw.Header.FuncCode = funcCode; // [1] Function Code; 5: Write Single Coil (DO) + mbw.Address = address; // [2] Output address + mbw.Value = value << 8; // [2] Output value (0x0000: Off, 0xFF00: On) + + writeDbg(Debug, "Sending 'Write Bit' (0x05) command. Addr: 0x%04X, Value: 0x%02X", address, value); + + memcpy_h2n(buffer, mbw); + ModbusSend(buffer, length, mbw.Header.TxID); +} + +/// +void OnModbusConfirmBit(byte buffer[]) +{ + struct ModbusResConfirmSingle mbc; + + memcpy_n2h(mbc, buffer); + + writeDbg(MbDebug, "Set bit at 0x%04X to %d", mbc.Address, mbc.Value); + + OnModbusWriteBitSuccess(mbc); +} + +/// +void OnModbusConfirmBitException(struct ModbusApHeader mbap, enum ModbusException ex) +{ + writeDbg(MbError, "Received an Exception while writing bit: %s", ModbusExceptions[ex-1]); + OnModbusWriteBitFailed(Exception, ex, mbap); +} + + + + + +// REGION: ModbusWriteRegister ------------------------------------------------------ +/// +void ModbusWriteRegister(word address, int value) +{ + const byte length = __size_of(struct ModbusReqWriteSingle); + const byte funcCode = 0x06; + byte buffer[length]; + struct ModbusReqWriteSingle mbw; + + ModbusMakeHeader(mbw.Header, length); + // Payload + mbw.Header.FuncCode = funcCode; // [1] Function Code; 5: Write Single Register (AO) + mbw.Address = address; // [2] Output address + mbw.Value = value; // [2] Output value + + writeDbg(MbDebug, "Sending 'Write Register' (0x06) command. Addr: 0x%04X, Value: 0x%02X", address, value); + + memcpy_h2n(buffer, mbw); + ModbusSend(buffer, length, mbw.Header.TxID); +} + +/// +void OnModbusConfirmRegister(byte buffer[]) +{ + struct ModbusResConfirmSingle mbc; + + memcpy_n2h(mbc, buffer); + + writeDbg(MbDebug, "Set register at 0x%04X to %d", mbc.Address, mbc.Value); + + OnModbusWriteRegisterSuccess(mbc); +} + +/// +void OnModbusConfirmRegisterException(struct ModbusApHeader mbap, enum ModbusException ex) +{ + writeDbg(MbError, "Received an Exception while writing register: %s", ModbusExceptions[ex-1]); + OnModbusWriteRegisterFailed(Exception, ex, mbap); +} + + + + + + + +// REGION: ModbusWriteBits ---------------------------------------------------------- +/// +void ModbusWriteBits(word address, word count, byte values[]) +{ + const word maxLength = __size_of(struct ModbusReqWriteBits); + const byte funcCode = 0x0F; + byte buffer[maxLength]; + struct ModbusReqWriteBits mbw; + byte dataLength; + byte overallLength; + word i; + + dataLength = _ceil(count / 8.0); + overallLength = maxLength - 1968/8 + dataLength; + ModbusMakeHeader(mbw.Header, overallLength); + // Payload + mbw.Header.FuncCode = funcCode; // [1] Function Code; 15: Write Multiple Bits (DOs) + mbw.Address = address; // [2] Output address + mbw.Count = count; // [2] Number of items; 1:max 1968=0x7B0 + mbw.ByteCount = dataLength; // [1] Number of bytes; = ceil(count/8) + memcpy(mbw.Data, values, dataLength); // this is 1 memcpy too much -.- + + writeDbg(MbDebug, "Sending 'Write Bits' (0x0F) command. Addr: 0x%04X, Count: %d", address, count); + + memcpy_h2n(buffer, mbw); + ModbusSend(buffer, overallLength, mbw.Header.TxID); +} + +/// +void ModbusWriteBitsB(word address, word count, byte values[]) +{ + byte buffer[2]; // length + word length; + dword ellCount; + dword i; + dword j; + char str1[20*2], str2[20*3]; + + length = (word)_ceil(count / 8.0); + writeDbg(AlgoDebug, "ModbusWriteBitsB: count: %d; length: %d", count, length); + + if (count % 8 != 0) + length--; + + for (i = 0; i < length; i++) + { + buffer[i] = 0; + for (j = 0; j < 8; j++) + { + buffer[i] |= (values[i*8 + j] & 0x01) << j; + writeDbg(AlgoDebug, "ModbusWriteBitsB: j: %d; indx: %d; value: %d; mask: %X", j, i*8 + j, values[i*8 + j], (0x01 << j)); + } + writeDbg(AlgoDebug, "ModbusWriteBitsB: %d: %X", i, buffer[i]); + } + for (j = 0; j < count % 8; j++) // wont be executed if there is no remainder + { + writeDbg(AlgoDebug, "ModbusWriteBitsB: j: %d; indx: %d; value: %d; mask: %X", j, (length-1)*8 + j, values[(length-1)*8 + j], (0x01 << j)); + buffer[length] |= (values[(length)*8 + j] & 0x01) << j; + } + writeDbg(AlgoDebug, "ModbusWriteBitsB: %d: %X", length-1, buffer[length-1]); + + hbin_to_strhex(values, str1); + bin_to_strhex(buffer, str2); + writeDbg(AlgoDebug, "ModbusWriteBitsB: Encoded %s to %s", str1, str2); + ModbusWriteBits(address, count, buffer); +} + +/// +void OnModbusConfirmBits(byte buffer[]) +{ + struct ModbusResConfirmMultiple mbc; + + memcpy_n2h(mbc, buffer); + + writeDbg(MbDebug, "Updated &d bits at 0x%04X", mbc.Count, mbc.Address); + + OnModbusWriteBitsSuccess(mbc); +} + +/// +void OnModbusConfirmBitsException(struct ModbusApHeader mbap, enum ModbusException ex) +{ + writeDbg(MbError, "Received an Exception while writing bits: %s", ModbusExceptions[ex-1]); + OnModbusWriteBitsFailed(Exception, ex, mbap); +} + + + + + + +// REGION: ModbusWriteRegisters ------------------------------------------------------- +/// +void ModbusWriteRegisters(word address, word count, word values[]) +{ + const word maxLength = __size_of(struct ModbusReqWriteRegisters); + const byte funcCode = 0x10; + byte buffer[maxLength]; + struct ModbusReqWriteRegisters mbw; + byte dataLength; + word overallLength; + word i; + + dataLength = 2 * count; + overallLength = maxLength - 2*123 + dataLength; + + ModbusMakeHeader(mbw.Header, overallLength); + // Payload + mbw.Header.FuncCode = funcCode; // [1] Function Code; 16: Write Multiple Registers (AOs) + mbw.Address = address; // [2] Output address + mbw.Count = count; // [2] Number of items; 1:max 123=0x7B + mbw.ByteCount = dataLength; // [1] Number of bytes; = 2 * count + + for (i = 0; i < dataLength; i++) + mbw.Data[i] = values[i]; + + memcpy_h2n(buffer, mbw); + ModbusSend(buffer, overallLength, mbw.Header.TxID); +} + +/// +void OnModbusConfirmRegisters(byte buffer[]) +{ + struct ModbusResConfirmMultiple mbc; + + memcpy_n2h(mbc, buffer); + + writeDbg(MbDebug, "Updated &d registers at 0x%04X", mbc.Count, mbc.Address); + + OnModbusWriteRegistersSuccess(mbc); +} + +/// +void OnModbusConfirmRegistersException(struct ModbusApHeader mbap, enum ModbusException ex) +{ + writeDbg(MbError, "Received an Exception while writing registers: %s", ModbusExceptions[ex-1]); + OnModbusWriteRegistersFailed(Exception, ex, mbap); +} + + + + + + +// REGION: ModbusWriteMasks ------------------------------------------------------------ +/// +void ModbusWriteMasks(word address, word and, word or) +{ + const word length = __size_of(struct ModbusReqWriteMasks); + const byte funcCode = 0x16; + byte buffer[length]; + struct ModbusReqWriteMasks mbw; + + ModbusMakeHeader(mbw.Header, length); + // Payload + mbw.Header.FuncCode = funcCode; // [1] Function Code; 22: Mask Write Registers (AO) + mbw.Address = address; // [2] Output address + mbw.And = and; // [2] AND mask + mbw.Or = or; // [2] OR mask + + memcpy_h2n(buffer, mbw); + ModbusSend(buffer, length, mbw.Header.TxID); +} + +/// +void OnModbusConfirmMasks(byte buffer[]) +{ + struct ModbusResConfirmMasks mbc; + + memcpy_n2h(mbc, buffer); + + writeDbg(MbDebug, "Applied masks at 0x%04X", mbc.Address); + + OnModbusWriteMasksSuccess(mbc); +} + +/// +void OnModbusConfirmMasksException(struct ModbusApHeader mbap, enum ModbusException ex) +{ + writeDbg(MbError, "Received an Exception while applying masks: %s", ModbusExceptions[ex-1]); + OnModbusWriteMasksFailed(Exception, ex, mbap); +} + + + + + +// REGION: ModbusReadWriteRegisters ------------------------------------------------------- +/// +void ModbusReadWriteRegisters(word readAddress, word readCount, word writeAddress, word writeCount, int values[]) +{ + const word maxLength = __size_of(struct ModbusReqReadWriteRegisters); + const byte funcCode = 0x17; + byte buffer[maxLength]; + struct ModbusReqReadWriteRegisters mbw; + byte dataLength; + word overallLength; + word i; + + dataLength = 2 * writeCount; + overallLength = maxLength - 2*121 + dataLength; + + ModbusMakeHeader(mbw.Header, overallLength); + // Payload + mbw.Header.FuncCode = funcCode; // [1] Function Code; 16: Write Multiple Registers (AOs) + mbw.ReadAddress = readAddress; // [2] Input address + mbw.ReadCount = readCount; // [2] Number of items; 1:max 125=0x7D + mbw.WriteAddress = writeAddress;// [2] Output address + mbw.WriteCount = writeCount; // [2] Number of items; 1:max 121=0x79 + mbw.ByteCount = dataLength; // [1] Number of bytes; = 2 * count + + for (i = 0; i < dataLength; i++) + mbw.Data[i] = values[i]; + + memcpy_h2n(buffer, mbw); + ModbusSend(buffer, overallLength, mbw.Header.TxID); +} + +/// +void OnModbusReceiveConfirmRegisters(byte buffer[]) +{ + struct ModbusResReceiveRegisters mbres; + struct ModbusReqRead mbreq; + + memcpy_n2h(mbres, buffer); + memcpy_n2h(mbreq, gQueueAck[mbres.Header.TxID].Buffer); + + writeDbg(MbDebug, "Wrote some registers and received %d registers from 0x%04X", mbreq.Count, mbreq.Address); + + OnModbusReadRegistersSuccess(mbres, mbreq); +} + +/// +void OnModbusReceiveConfirmRegistersException(struct ModbusApHeader mbap, enum ModbusException ex) +{ + writeDbg(MbError, "Received an Exception while reading and writing registers: %s", ModbusExceptions[ex-1]); + OnModbusWriteRegistersFailed(Exception, ex, mbap); +} + + + + + + + +// ------------------------------------------------------------------------------------ +// REGION: OnModbusReceive ------------------------------------------------------------ +/// <-OnModbusReceive> +void OnModbusReceive(dword socket, long result, dword address, dword port, byte buffer[], dword size) +{ + writeDbg(ConnDebug, "OnModbusReceive: Received %d bytes", size); + if (result == 0) + { + if (size == 0) + { + // Size of zero indicates that the socket was closed by the communication peer. + writeDbg(ConnWarning, "OnModbusReceive: Socket closed by peer"); + ModbusDisconnect(); + } + else + { + // Sucessfully received some bytes over the TCP/IP connection. + OnModbusReceive2(buffer, size); + } + } + else + { + gIpLastErr = ModbusGetLastConnectionError(gIpLastErrStr); + writeDbg(ConnError, "OnModbusReceive error (%d): %s", gIpLastErr, gIpLastErrStr); + ModbusDisconnect(); + } +} + +/// <-OnModbusReceive> +void OnModbusReceive2(byte buffer[], dword size) +{ + struct ModbusApHeader mbap; + int offset; + char str[3*20]; + + if (size < 8) // No complete Modbus Application Header + return; + + offset = 0; + do + { + writeDbg(ConnDebug, "OnModbusReceive2: Offset pre = %d", offset); + memcpy_n2h(mbap, buffer, offset); + OnModbusReceive2OnePacket(buffer, offset, mbap); + + offset += __offset_of(struct ModbusApHeader, UnitID) + mbap.Length; + writeDbg(ConnDebug, "OnModbusReceive2: offset post = %d. %d <= %d?", offset, offset, size-8); + } + while(offset <= size-8); // We need at least 8 bytes for a new packet + writeDbg(ConnDebug, "OnModbusReceive2: yes. finished"); + + if (offset != size) // Can be removed. + { + bin_to_strhex(buffer, str); + writeDbg(ConnError, "OnModbusReceive2: Error while going through receive buffer. Our final offset is %d, but the size of the buffer is %d! Buffer: %s", offset, size, str); + OnModbusClientPanics(ParsingBuffer); + } +} + +/// <-OnModbusReceive> +void OnModbusReceive2OnePacket(byte buffer[], int offset, struct ModbusApHeader mbap) +{ + // Test transaction identifier? + // Test unit/device identifier? + word i; // counter + word length; // length of current packet + byte mbuffer[__size_of(struct ModbusResReceiveRegisters)]; // second buffer where we copy the message. This way the user won't overwrite other packages. + + length = __offset_of(struct ModbusApHeader, UnitID) + mbap.Length; + // We cannot check this properly anymore. We have to trust the TCP/UDP stack and the sender... *sigh* + if (mbap.Protocol != 0) // Protocol is not Modbus (0x0000). Wayne. + { + writeDbg(ConnDebug, "OnModbusReceive2OnePacket: packet is no Modbus packet: Protocol = %d", mbap.Protocol); + return; + } + if (elCount(buffer) < offset + length) // packet larger than the (rest of the) buffer + { + writeDbg(ConnError, "OnModbusReceive2OnePacket: packet did not fit into Buffer: buffer length = %d, packet length = %d, offset = %d", elCount(buffer), __offset_of(struct ModbusApHeader, UnitID) + mbap.Length, offset); + // I REALLY don't want to assemble the two package fragments. + OnModbusClientPanics(ModbusPackageWasSplit); + return; + } + // MBAP Header is OK :) Go on + + if (!gQueueSent.ContainsKey(mbap.TxID)) // We don't wait for this message! + return; + + //write("Received TxID: %d", mbap.TxID); + memcpy(gQueueAck[mbap.TxID], gQueueSent[mbap.TxID]); + gQueueSent.Remove(mbap.TxID); + + if (mbap.FuncCode > 0x80) // Oh no, we got a exception! + { + OnModbusReceive2Exceptions(buffer[offset+08], mbap); + + gQueueAck.Remove(mbap.TxID); // Remove from acknowledge queue + + return; + } + + + // Copy the message + memcpy_off(mbuffer, 0, buffer, offset, length); + + // Let's give the PDU to the corresponding function + switch (mbap.FuncCode) + { + case 0x01: + case 0x02: + OnModbusReceiveBits(mbuffer); + break; + case 0x03: + case 0x04: + OnModbusReceiveRegisters(mbuffer); + break; + case 0x05: + OnModbusConfirmBit(mbuffer); + break; + case 0x06: + OnModbusConfirmRegister(mbuffer); + break; + case 0x0F: + OnModbusConfirmBits(mbuffer); + break; + case 0x10: + OnModbusConfirmRegisters(mbuffer); + break; + case 0x16: + OnModbusConfirmMasks(mbuffer); + break; + case 0x17: + OnModbusReceiveConfirmRegisters(mbuffer); + break; + default: + writeDbg(MbError, "OnModbusReceive2OnePacket: We received funcCode 0x%X!?", mbap.FuncCode); + } + + gQueueAck.Remove(mbap.TxID); // Remove from acknowledge queue +} + +/// <-OnModbusReceive> +void OnModbusReceive2Exceptions(byte exCode, struct ModbusApHeader mbap) +{ + enum ModbusException ex; + ex = (enum ModbusException)exCode; + + switch (mbap.FuncCode) + { + case 0x81: + case 0x82: + OnModbusReceiveBitsException(mbap, ex); + break; + case 0x83: + case 0x84: + OnModbusReceiveRegistersException(mbap, ex); + break; + case 0x85: + OnModbusConfirmBitException(mbap, ex); + break; + case 0x86: + OnModbusConfirmRegisterException(mbap, ex); + break; + case 0x8F: + OnModbusConfirmBitsException(mbap, ex); + break; + case 0x90: + OnModbusConfirmRegistersException(mbap, ex); + break; + case 0x96: + OnModbusConfirmMasksException(mbap, ex); + break; + case 0x97: + OnModbusReceiveConfirmRegistersException(mbap, ex); + break; + } +} + + +// ------------------------------------------------------------------------------------ +// REGION: ModbusSend ----------------------------------------------------------------- +/// <-ModbusSend> +void ModbusSend(byte buffer[], word length, word TxID) +{ + struct QueueElement qe; + + qe.Length = length; + memcpy(qe.Buffer, buffer, length); + + memcpy(gQueuePending[TxID], qe); + writeDbg(ConnDebug, "Appended packet 0x%04X to pending queue", TxID); + + if (gQueuePending.Size() == 1 && gQueueSent.Size() == 0 && gSocketState == OK) // start timer if connection established + ModbusStartQueue(); +} + +void ModbusStartQueue() +{ + writeDbg(ConnDebug, "Starting Timer gtRobin"); + setTimerCyclic(gtRobin, 1); +} + +/// <-ModbusSend> +on timer gtRobin +{ + struct ModbusApHeader mbap; + enum ModbusRequestError reqError; + + writeDbg(ConnDebug, "gtRobin: Queue Sent: %d, Queue Pending: %d, Queue Ack: %d", gQueueSent.Size(), gQueuePending.Size(), gQueueAck.Size()); + + // First: check timeouts = packets that were sent in previous run and not removed by response + for (long TxID : gQueueSent) + { + if (++gQueueSent[TxID].TimeoutTicks < @sysvar::Config::Modbus::RequestTimeout) // not timed out yet + continue; + // timed out! + if (++gQueueSent[TxID].Timeouts < @sysvar::Config::Modbus::MaxTransmissionCount) // if we may resend it + { + writeDbg(ConnInfo, "Packet 0x%04X timed out! Retrying...", TxID); + gQueueSent[TxID].TimeoutTicks = 0; + ModbusSnd(gQueueSent[TxID].Buffer, gQueueSent[TxID].Length); // resend it + reqError = Timeout; + ModbusRecv(); + } + else // we will NOT resend it + { + writeDbg(ConnWarning, "Packet 0x%04X timed out! Giving up", TxID); + reqError = FinalTimeout; + } + + memcpy_n2h(mbap, gQueueSent[TxID].Buffer); + switch(mbap.FuncCode) // throw an "error" in each case + { + case ReadBits1: + case ReadBits2: + OnModbusReadBitsFailed(reqError, None, mbap); + break; + case ReadRegisters1: + case ReadRegisters2: + OnModbusReadRegistersFailed(reqError, None, mbap); + break; + case WriteBit: + OnModbusWriteBitFailed(reqError, None, mbap); + break; + case WriteRegister: + OnModbusWriteRegisterFailed(reqError, None, mbap); + break; + case WriteBits: + OnModbusWriteBitsFailed(reqError, None, mbap); + break; + case WriteRegisters: + OnModbusWriteRegistersFailed(reqError, None, mbap); + break; + case MaskRegister: + OnModbusWriteMasksFailed(reqError, None, mbap); + break; + case ReadWriteRegisters: + OnModbusReadWriteRegistersFailed(reqError, None, mbap); + break; + } + + if (reqError == FinalTimeout) // remove the packet from queue + gQueueSent.Remove(TxID); // wait until here to let the methods access the request + } + + // Second: send new packets + for (long TxID : gQueuePending) + { + if (gQueueSent.Size() > 4) // Wago 750-881 cannot handle more than 5 messages at a time :( + continue; + + // if packet was sent or the socket is not currently being opened + if (ModbusSnd(gQueuePending[TxID].Buffer, gQueuePending[TxID].Length) == 0 || gSocketState != NULL) + { + memcpy(gQueueSent[TxID], gQueuePending[TxID]); // move packet to sent queue + gQueuePending.Remove(TxID); + ModbusRecv(); + } + } + + if (gSocketState == ERROR || gQueueSent.Size() == 0 && gQueuePending.Size() == 0) // Stop timer to reduce latency of first packet + { + writeDbg(ConnDebug, "Stopping Timer gtRobin"); + this.Cancel(); + } +} \ No newline at end of file diff --git a/Modbus-DLL/include/CAPL/include/ModbusClientCommon.cin_0.brp b/Modbus-DLL/include/CAPL/include/ModbusClientCommon.cin_0.brp new file mode 100644 index 0000000..b52731a --- /dev/null +++ b/Modbus-DLL/include/CAPL/include/ModbusClientCommon.cin_0.brp @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Modbus-DLL/include/CAPL/include/ModbusEilClientCommon.cin b/Modbus-DLL/include/CAPL/include/ModbusEilClientCommon.cin new file mode 100644 index 0000000..06c6ae3 --- /dev/null +++ b/Modbus-DLL/include/CAPL/include/ModbusEilClientCommon.cin @@ -0,0 +1,64 @@ +/*@!Encoding:1252*/ + +includes +{ + #include "EilCommon.cin" + #include "ModbusClientCommon.cin" +} + +void ModbusConnectTo(char Remote_IP[], word Remote_Port) +{ + EilConnectTo(Remote_IP, Remote_Port); +} + +void ModbusConnectTo(dword Remote_IP, word Remote_Port) +{ + EilConnectTo(Remote_IP, Remote_Port); +} + +byte ModbusSnd(byte buffer[], word length) +{ + return EilSnd(buffer, length); +} + +void ModbusRecv() +{ + EilRecv(); +} + +void ModbusDisconnect() +{ + EilDisconnect(); +} + +long ModbusGetLastConnectionError(char string[]) +{ + return EilGetLastConnectionError(string); +} + +void OnEthReceivePacket(long channel, long dir, long packet) +{ + byte buffer[gMaxPacketLength]; + long size; + + if (dir == TX) + return; + + if (EthGetTokenInt(packet, "arp", "protSourceAddr") == gRemoteIP) // this was our ARP package + { + if (EthGetTokenData(packet, "arp", "hwSourceAddr", elCount(gRemoteMac), gRemoteMac) == 6) + { + gtArp.Cancel(); + writeDbg(ConnDebug, "Remote Mac: %02X:%02X:%02X:%02X:%02X:%02X", gRemoteMac[0], gRemoteMac[1], gRemoteMac[2], gRemoteMac[3], gRemoteMac[4], gRemoteMac[5]); + EilConnectTo2(); // create the UDP package + ModbusStartQueue(); + } + return; + } + + if (EthGetTokenInt(packet, "ipv4", "protocol") == 0x11 && EthGetTokenInt(packet, "ipv4", "source") == gRemoteIP) // if this is a UDP package from our server + { + size = EthGetThisData(0, gMaxPacketLength, buffer); + OnModbusReceive(0, 0, EthGetTokenInt(packet, "ipv4", "source"), gRemoteIP, buffer, size); + } +} \ No newline at end of file diff --git a/Modbus-DLL/include/CAPL/include/ModbusFunctions.cin b/Modbus-DLL/include/CAPL/include/ModbusFunctions.cin new file mode 100644 index 0000000..853a724 --- /dev/null +++ b/Modbus-DLL/include/CAPL/include/ModbusFunctions.cin @@ -0,0 +1,86 @@ +/*@!Encoding:1252*/ +variables +{ + enum Vendor + { + BuR = 2, + Wago = 23 + }; + + struct deviceIOs + { + byte InputRegisters; + word InputBits; + byte OutputRegisters; + word OutputBits; + char Modules[1024]; + }; +} + +void ParseDeviceCode(word dev, enum Vendor vendor, struct deviceIOs dios) +{ + byte input; + byte numChannels; + char module[10]; + + switch(vendor) + { + case Wago: // if this is a Wago device + + if (dev & 0x8000) // Digital Module + { + numChannels = (dev >> 8) & 0x007F; + + if (dev & 0x0001) // Input Module + { + input = 1; + strncpy(module, "DI%d,", elCount(module)); + dios.InputBits += numChannels; + } + else if (dev & 0x0002) // Output Module + { + input = 0; + strncpy(module, "DO%d,", elCount(module)); + dios.OutputBits += numChannels; + } + else // blööd + { + writeDbg(AlgoError, "ParseDeviceCode: Device code 0x%X cannot be decoded", dev); + OnModbusClientPanics(DeviceCodeUnknown); + } + } + else + { + switch (dev) + { + case 881: // devices that have no inputs/outputs + return; + case 477: // devices that have 2 outputs + input = 0; + numChannels = 2; + break; + default: // unknown device. Ouch! + writeDbg(AlgoInfo, "Connected device: 750-%d", dev); + return; + } + if (input) + { + strncpy(module, "AI%d,", elCount(module)); + dios.InputRegisters += numChannels; + } + else + { + strncpy(module, "AO%d,", elCount(module)); + dios.OutputRegisters += numChannels; + } + } + break; // switch(vendor) + default: + writeDbg(AlgoError, "ParseDeviceCode: Unknown vendor id: %d", vendor); + OnModbusClientPanics(VendorIdUnknown); + return; + } + + snprintf(module, elCount(module), module, numChannels); + strncat(dios.Modules, module, elCount(dios.Modules)); +} \ No newline at end of file diff --git a/Modbus-DLL/include/CAPL/include/ModbusStructs.cin b/Modbus-DLL/include/CAPL/include/ModbusStructs.cin new file mode 100644 index 0000000..814eff7 --- /dev/null +++ b/Modbus-DLL/include/CAPL/include/ModbusStructs.cin @@ -0,0 +1,146 @@ +/*@!Encoding:1252*/ +variables +{ + // A normal Modbus Application Header. Every Modbus Packet begins with these 7 (+FuncCode) Bytes + _align(1) struct ModbusApHeader + { + word TxID; + word Protocol; + word Length; + byte UnitID; + byte FuncCode; + }; + // Read Data from the host. We only need the start address and the number of bits/registers we want to read + _align(1) struct ModbusReqRead + { + struct ModbusApHeader Header; + word Address; + word Count; + }; + // Write a single value to a bit/register + _align(1) struct ModbusReqWriteSingle + { + struct ModbusApHeader Header; + word Address; + word Value; + }; + // Write several values to a bit/register starting with Address + _align(1) struct ModbusReqWriteBits + { + struct ModbusApHeader Header; + word Address; + word Count; + byte ByteCount; + byte Data[246]; // Max length: 1968 bits + }; + // Write several values to bits starting with Address + _align(1) struct ModbusReqWriteRegisters + { + struct ModbusApHeader Header; + word Address; + word Count; + byte ByteCount; + word Data[123]; // Max length: 123 registers + }; + // Write AND and OR masks to a holding register + _align(1) struct ModbusReqWriteMasks + { + struct ModbusApHeader Header; + word Address; + word And; + word Or; + }; + // Read and write multiple registers + _align(1) struct ModbusReqReadWriteRegisters + { + struct ModbusApHeader Header; + word ReadAddress; + word ReadCount; + word WriteAddress; + word WriteCount; + byte ByteCount; + word Data[121]; // Max length: 123-2 registers + }; + + + // Receive several bit values + _align(1) struct ModbusResReceiveBits + { + struct ModbusApHeader Header; + byte ByteCount; + byte Data[250]; // Max length: 2000 bits + }; + // Receive several register values + _align(1) struct ModbusResReceiveRegisters + { + struct ModbusApHeader Header; + byte ByteCount; + word Data[125]; // Max length: 125 registers + }; + // Confirm the write of a single bit/register + _align(1) struct ModbusResConfirmSingle + { + struct ModbusApHeader Header; + word Address; + int Value; + }; + // Confirm the write of several bits/registers + _align(1) struct ModbusResConfirmMultiple + { + struct ModbusApHeader Header; + word Address; + word Count; + }; + // Confirm the write of AND and OR mask + _align(1) struct ModbusResConfirmMasks + { + struct ModbusApHeader Header; + word Address; + word And; + word Or; + }; + + + + enum ModbusRequestError + { + Exception, + Timeout, + FinalTimeout + }; + enum ModbusException + { + None = 0x00, + IllegalFuncCode = 0x01, + IllegalDataAddress = 0x02, + IllegalDataValue = 0x03, + ServerFailure = 0x04, + Acknowledge = 0x05, + ServerBusy = 0x06, + GatewayPathsNA = 0x0A, + TargetOffline = 0x0B + }; + enum ModbusFuncCode + { + ReadBits1 = 0x01, + ReadBits2 = 0x02, + ReadRegisters1 = 0x03, + ReadRegisters2 = 0x04, + WriteBit = 0x05, + WriteRegister = 0x06, + WriteBits = 0x0F, + WriteRegisters = 0x10, + MaskRegister = 0x16, + ReadWriteRegisters = 0x17 + }; + + + enum FatalErrors + { + ParsingBuffer = 0x00, + ModbusPackageWasSplit = 0x01, + DeviceCodeUnknown = 0x02, + VendorIdUnknown = 0x03, + ConnectionError = 0x04 + }; +} \ No newline at end of file diff --git a/Modbus-DLL/include/CAPL/include/ModbusTcpClientCommon.cin b/Modbus-DLL/include/CAPL/include/ModbusTcpClientCommon.cin new file mode 100644 index 0000000..cb7ceae --- /dev/null +++ b/Modbus-DLL/include/CAPL/include/ModbusTcpClientCommon.cin @@ -0,0 +1,44 @@ +/*@!Encoding:1252*/ + +includes +{ + #include "TcpCommon.cin" + #include "ModbusClientCommon.cin" +} + +void ModbusConnectTo(char Remote_IP[], word Remote_Port) +{ + TcpConnectTo(Remote_IP, Remote_Port); +} + +void ModbusConnectTo(dword Remote_IP, word Remote_Port) +{ + TcpConnectTo(Remote_IP, Remote_Port); +} + +void ModbusDisconnect() +{ + TcpDisconnect(); +} + +byte ModbusSnd(byte buffer[], word length) +{ + return TcpSnd(buffer, length); +} + +void ModbusRecv() +{ + TcpRecv(); +} + +long ModbusGetLastConnectionError(char string[]) +{ + return TcpGetLastConnectionError(string); +} + +void OnTcpReceive(dword socket, long result, dword address, dword port, byte buffer[], dword size) +{ + OnModbusReceive(socket, result, address, port, buffer, size); + if (result == 0 && size != 0) + TcpRecv(); +} \ No newline at end of file diff --git a/Modbus-DLL/include/CAPL/include/ModbusUdpClientCommon.cin b/Modbus-DLL/include/CAPL/include/ModbusUdpClientCommon.cin new file mode 100644 index 0000000..3c0fd9a --- /dev/null +++ b/Modbus-DLL/include/CAPL/include/ModbusUdpClientCommon.cin @@ -0,0 +1,44 @@ +/*@!Encoding:1252*/ + +includes +{ + #include "UdpCommon.cin" + #include "ModbusClientCommon.cin" +} + +void ModbusConnectTo(char Remote_IP[], word Remote_Port) +{ + UdpConnectTo(Remote_IP, Remote_Port); +} + +void ModbusConnectTo(dword Remote_IP, word Remote_Port) +{ + UdpConnectTo(Remote_IP, Remote_Port); +} + +void ModbusDisconnect() +{ + UdpDisconnect(); +} + +byte ModbusSnd(byte buffer[], word length) +{ + return UdpSnd(buffer, length); +} + +void ModbusRecv() +{ + UdpRecv(); +} + +long ModbusGetLastConnectionError(char string[]) +{ + return UdpGetLastConnectionError(string); +} + +void OnUdpReceiveFrom(dword socket, long result, dword address, dword port, byte buffer[], dword size) +{ + OnModbusReceive(socket, result, address, port, buffer, size); + if (result == 0 && size != 0) + UdpRecv(); +} \ No newline at end of file diff --git a/Modbus-DLL/include/CAPL/include/TcpCommon.cin b/Modbus-DLL/include/CAPL/include/TcpCommon.cin new file mode 100644 index 0000000..857d42b --- /dev/null +++ b/Modbus-DLL/include/CAPL/include/TcpCommon.cin @@ -0,0 +1,204 @@ +/*@!Encoding:1252*/ +includes +{ + #include "Common.cin" + #include "TcpUdpCommon.cin" +} + +variables +{ + TcpSocket gSocket; +} + + +word TcpOpenSocket() +{ + byte i; + CHAR errorText[200]; + long error; + + if (EthGetAdapterStatus() != 2) // Not connected + { + writeDbg(ConnError, "TcpOpenSocket: Adapter status not ok: %d!", EthGetAdapterStatus()); + OnModbusClientPanics(ConnectionError); + return INVALID_IP; + } + + // Try to open socket + i = 0; + do + { + gSocket = TcpSocket::Open(0, 0); + error = gSocket.GetLastSocketError(); + if (error != 0) + { + gSocket.GetLastSocketErrorAsString(errorText, elcount(errorText)); + writeDbg(ConnInfo, "TcpOpenSocket: could not open socket: (%d) %s", error, errorText); + } + } + while (error != 0 && i++ < 9); + + if (error != 0) + { + writeDbg(ConnError, "TcpOpenSocket: could not open socket: (%d) %s", error, errorText); + OnModbusClientPanics(ConnectionError); + return error; + } + else + { + writeDbg(ConnInfo, "Tcp socket opened."); + } + return 0; +} + +word TcpConnectTo(char Remote_IP[], word remotePort) +{ + dword remoteIp; + + // Convert IP string to Number + remoteIp = IpGetAddressAsNumber(Remote_IP); + if (remoteIp == INVALID_IP) + { + writeDbg(ConnError, "TcpConnectTo: invalid server Ip address: %s", Remote_IP); + OnModbusClientPanics(ConnectionError); + return 1; + } + + return TcpConnectTo(remoteIp, remotePort); +} + +word TcpConnectTo(dword remoteIp, word remotePort) +{ + long fehler; + + // Try to open a socket + fehler = TcpOpenSocket(); + if (fehler != 0) + { + gSocketState = ERROR; + return fehler; + } + + gRemoteIP = remoteIp; + gRemotePort = remotePort; + + + // Connect to Server + if (gSocket.Connect(remoteIp, remotePort) != 0) + { + fehler = gSocket.GetLastSocketError(); + + if (fehler != WSAEWOULDBLOCK) // OnTcpConnect will be called otherwise + { + writeDbg(ConnError, "TcpConnectTo: No connection established: %d", fehler); + gSocketState = ERROR; + OnModbusClientPanics(ConnectionError); + return fehler; + } + return 0; + } + else + { + writeDbg(ConnInfo, "TcpConnectTo: Successfully connected to server"); + gSocketState = OK; + return 0; + } +} + +void OnTcpConnect(dword socket, long result) +{ + if (result != 0) + { + gSocket.GetLastSocketErrorAsString(gIpLastErrStr, elcount(gIpLastErrStr)); + writeDbg(ConnError, "OnTcpConnect: (%d) %s", gSocket.GetLastSocketError(), gIpLastErrStr); + gSocketState = ERROR; + OnModbusClientPanics(ConnectionError); + return; + } + else + { + writeDbg(ConnInfo, "OnTcpConnect: Successfully connected to server"); + gSocketState = OK; + ModbusStartQueue(); + } +} + +void TcpDisconnect() +{ + gSocket.Close(); + gSocketState = CLOSED; +} + +void TcpRecv() +{ + int result; + + if (gSocketState != OK) + { + writeDbg(ConnWarning, "TcpRecv: Socket status is not OK! Doing nothing."); + OnModbusClientPanics(ConnectionError); + return; + } + + result = gSocket.Receive(gRxBuffer, elcount(gRxBuffer)); + + if (result != 0) // Calling OnTcpReceive otherwise + { + gIpLastErr = gSocket.GetLastSocketError(); + + if (gIpLastErr != WSA_IO_PENDING) // Calling OnTcpReceive otherwise + { + gSocket.GetLastSocketErrorAsString(gIpLastErrStr, elcount(gIpLastErrStr)); + writeDbg(ConnError, "TcpReceive: (%d) %s", gIpLastErr, gIpLastErrStr); + TcpDisconnect(); + } + } + + return; +} + +word TcpSnd(byte buffer[], word length) +{ + char str[20*3]; + + switch (gSocketState) + { + case CLOSED: + TcpConnectTo(gRemoteIP, gRemotePort); + if (gSocketState != OK) + { + writeDbg(ConnError, "TcpSnd: Reconnecting failed!"); + OnModbusClientPanics(ConnectionError); + return 1; + } + case OK: + break; + default: + writeDbg(ConnError, "TcpSnd: Socket status is not OK! Doing nothing."); + OnModbusClientPanics(ConnectionError); + return 1; + } + + bin_to_strhex(buffer, str); + writeDbg(ConnDebug, "TcpSnd: %s (Länge: %d)", str, length); + + if (gSocket.Send(buffer, length) != 0) + { + gIpLastErr = gSocket.GetLastSocketError(); + + if (gIpLastErr != WSA_IO_PENDING) + { + gSocket.GetLastSocketErrorAsString(gIpLastErrStr, elcount(gIpLastErrStr)); + writeDbg(ConnError, "TcpSnd: (%d) %s", gIpLastErr, gIpLastErrStr); + TcpDisconnect(); + return 1; + } + } + return 0; +} + +long TcpGetLastConnectionError(char string[]) +{ + gSocket.GetLastSocketErrorAsString(string, elCount(string)); + return gSocket.GetLastSocketError(); +} \ No newline at end of file diff --git a/Modbus-DLL/include/CAPL/include/TcpUdpCommon.cin b/Modbus-DLL/include/CAPL/include/TcpUdpCommon.cin new file mode 100644 index 0000000..be3029a --- /dev/null +++ b/Modbus-DLL/include/CAPL/include/TcpUdpCommon.cin @@ -0,0 +1,20 @@ +/*@!Encoding:1252*/ + +variables +{ + const long WSA_IO_PENDING = 997; + const long WSAEWOULDBLOCK = 10035; + const dword INVALID_IP = 0xffffffff; + + long gIpLastErr = 0; + char gIpLastErrStr[512] = ""; + + enum SocketState { NULL, OK, ERROR, CLOSED }; + enum SocketState gSocketState = NULL; + + dword gRemoteIP = INVALID_IP; + word gRemotePort = 0; + + byte gRxBuffer[8192]; +} + diff --git a/Modbus-DLL/include/CAPL/include/UdpCommon.cin b/Modbus-DLL/include/CAPL/include/UdpCommon.cin new file mode 100644 index 0000000..712f545 --- /dev/null +++ b/Modbus-DLL/include/CAPL/include/UdpCommon.cin @@ -0,0 +1,166 @@ +/*@!Encoding:1252*/ +includes +{ + #include "Common.cin" + #include "TcpUdpCommon.cin" +} + +variables +{ + UdpSocket gSocket; +} + + +word UdpOpenSocket() +{ + byte i; + char errorText[200]; + long error; + + if (EthGetAdapterStatus() != 2) // Not connected + { + writeDbg(ConnError, "UdpOpenSocket: Adapter status not ok: %d!", EthGetAdapterStatus()); + OnModbusClientPanics(ConnectionError); + return INVALID_IP; + } + + // Try to open socket + i = 0; + do + { + gSocket = UdpSocket::Open(0, 0); + error = gSocket.GetLastSocketError(); + if (error != 0) + { + gSocket.GetLastSocketErrorAsString(errorText, elcount(errorText)); + writeDbg(ConnInfo, "UdpOpenSocket: could not open socket: (%d) %s", error, errorText); + } + } + while (error != 0 && i++ < 9); + + if (error != 0) + { + writeDbg(ConnError, "UdpOpenSocket: could not open socket: (%d) %s", error, errorText); + OnModbusClientPanics(ConnectionError); + return error; + } + else + { + writeDbg(ConnInfo, "Udp socket opened."); + } + return 0; +} + +word UdpConnectTo(char Remote_IP[], word remotePort) +{ + dword remoteIp; + + // Convert IP string to Number + remoteIp = IpGetAddressAsNumber(Remote_IP); + if (remoteIp == INVALID_IP) + { + writeDbg(ConnError, "UdpConnectTo: invalid server Ip address: %s", Remote_IP); + OnModbusClientPanics(ConnectionError); + return 1; + } + + return UdpConnectTo(remoteIp, remotePort); +} + +word UdpConnectTo(dword remoteIp, word remotePort) +{ + long fehler; + + // Try to open a socket + fehler = UdpOpenSocket(); + if (fehler != 0) + { + gSocketState = ERROR; + return fehler; + } + + gRemoteIP = remoteIp; + gRemotePort = remotePort; + gSocketState = OK; + return 0; +} + +void UdpDisconnect() +{ + gSocket.Close(); + gSocketState = CLOSED; +} + +void UdpRecv() +{ + int result; + + if (gSocketState != OK) + { + writeDbg(ConnError, "UdpRecv: Socket status is not OK! Doing nothing."); + OnModbusClientPanics(ConnectionError); + return; + } + + result = gSocket.ReceiveFrom(gRxBuffer, elCount(gRxBuffer)); + + if (result != 0) // Calling OnUdpReceive otherwise + { + gIpLastErr = gSocket.GetLastSocketError(); + + if (gIpLastErr != WSA_IO_PENDING) // Calling OnUdpReceive otherwise + { + gSocket.GetLastSocketErrorAsString(gIpLastErrStr, elCount(gIpLastErrStr)); + writeDbg(ConnError, "UdpReceiveFrom: (%d) %s", gIpLastErr, gIpLastErrStr); + UdpDisconnect(); + } + } + + return; +} + +byte UdpSnd(byte buffer[], word length) +{ + char str[20*3]; + + switch (gSocketState) + { + case CLOSED: + UdpConnectTo(gRemoteIP, gRemotePort); + if (gSocketState != OK) + { + writeDbg(ConnError, "UdpSnd: Reconnecting failed!"); + OnModbusClientPanics(ConnectionError); + return 1; + } + case OK: + break; + default: + writeDbg(ConnError, "UdpSnd: Socket status is not OK! Doing nothing."); + OnModbusClientPanics(ConnectionError); + return 1; + } + + bin_to_strhex(buffer, str); + writeDbg(ConnDebug, "UdpSnd: %s (Länge: %d)", str, length); + + if (gSocket.SendTo(gRemoteIP, gRemotePort, buffer, length) != 0) + { + gIpLastErr = gSocket.GetLastSocketError(); + + if (gIpLastErr != WSA_IO_PENDING) + { + gSocket.GetLastSocketErrorAsString(gIpLastErrStr, elcount(gIpLastErrStr)); + writeDbg(ConnError, "UdpSnd error (%d): %s", gIpLastErr, gIpLastErrStr); + UdpDisconnect(); + return 1; + } + } + return 0; +} + +long UdpGetLastConnectionError(char string[]) +{ + gSocket.GetLastSocketErrorAsString(string, elCount(string)); + return gSocket.GetLastSocketError(); +} \ No newline at end of file diff --git a/Modbus-DLL/include/DBC/MakeConfig.dbc b/Modbus-DLL/include/DBC/MakeConfig.dbc new file mode 100644 index 0000000..d103b82 --- /dev/null +++ b/Modbus-DLL/include/DBC/MakeConfig.dbc @@ -0,0 +1,49 @@ +VERSION "" + + +NS_ : + NS_DESC_ + CM_ + BA_DEF_ + BA_ + VAL_ + CAT_DEF_ + CAT_ + FILTER + BA_DEF_DEF_ + EV_DATA_ + ENVVAR_DATA_ + SGTYPE_ + SGTYPE_VAL_ + BA_DEF_SGTYPE_ + BA_SGTYPE_ + SIG_TYPE_REF_ + VAL_TABLE_ + SIG_GROUP_ + SIG_VALTYPE_ + SIGTYPE_VALTYPE_ + BO_TX_BU_ + BA_DEF_REL_ + BA_REL_ + BA_DEF_DEF_REL_ + BU_SG_REL_ + BU_EV_REL_ + BU_BO_REL_ + SG_MUL_VAL_ + +BS_: + +BU_: MakeConfig + + + + +BA_DEF_ BU_ "NodeLayerModules" STRING ; +BA_DEF_ "DBName" STRING ; +BA_DEF_ "BusType" STRING ; +BA_DEF_DEF_ "NodeLayerModules" "ETHERNET_IL.dll"; +BA_DEF_DEF_ "DBName" ""; +BA_DEF_DEF_ "BusType" "Ethernet"; +BA_ "BusType" "Ethernet"; +BA_ "DBName" "MakeConfig"; + diff --git a/Modbus-DLL/include/DBC/MakeConfig.ini b/Modbus-DLL/include/DBC/MakeConfig.ini new file mode 100644 index 0000000..e7255ca --- /dev/null +++ b/Modbus-DLL/include/DBC/MakeConfig.ini @@ -0,0 +1,165 @@ +[View_Vehicles] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=125,150, +[View_Vehicle] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=125,125, +[View_VehicleNetworks] +HIDDEN=3,5, +ORDER=0,1,2,3,4, +DEFINITIONS=2,3, +COLUMNWIDTHS=125,125,100,100,150,100,100, +[View_VehicleNetwork] +HIDDEN= +ORDER=0,1,2,3,4,5, +DEFINITIONS=1, +COLUMNWIDTHS=125,125,100,125,150,100, +[View_VehicleNetworkTxMessages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8, +DEFINITIONS= +COLUMNWIDTHS=125,125,55,100,50,100,100,100,150, +[View_VehicleNetworkSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=125,125,100,50,100,50,100,100,100,50,50,50,50,100,100,150, +[View_VehicleControlUnit] +HIDDEN= +ORDER=0,1,2,3,4,5, +DEFINITIONS=1, +COLUMNWIDTHS=125,125,100,125,150,100, +[View_VehicleGateways] +HIDDEN= +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=125,125,100, +[View_VehicleGatewaySignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6, +DEFINITIONS= +COLUMNWIDTHS=125,125,125,125,125,125,125, +[View_Networks] +HIDDEN=2,4, +ORDER=0,1,2,3, +DEFINITIONS=2,3, +COLUMNWIDTHS=125,100,100,150,100,100, +[View_Network] +HIDDEN= +ORDER=0,1,2,3,4, +DEFINITIONS=1, +COLUMNWIDTHS=125,125,100,150,100, +[View_NetworkTxMessages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8, +DEFINITIONS= +COLUMNWIDTHS=125,125,55,100,50,100,100,100,150, +[View_NetworkTxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=125,125,100,50,100,50,100,100,100,50,50,50,50,100,100,150, +[View_NetworkNodeGroup] +HIDDEN= +ORDER=0,1,2,3, +DEFINITIONS=1, +COLUMNWIDTHS=125,100,150,100, +[View_Ecus] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=125,150, +[View_Ecu] +HIDDEN= +ORDER=0,1,2,3,4, +DEFINITIONS=1, +COLUMNWIDTHS=125,125,100,150,100, +[View_EnvVars] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9, +DEFINITIONS= +COLUMNWIDTHS=125,100,100,50,50,50,50,100,100,150, +[View_EnvVar] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10, +DEFINITIONS= +COLUMNWIDTHS=125,125,100,100,50,50,50,50,100,100,150, +[View_NodeGroups] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=125,150, +[View_NodeGroup] +HIDDEN= +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=125,125,55,150, +[View_Nodes] +HIDDEN= +ORDER=0,1,2,3, +DEFINITIONS=1, +COLUMNWIDTHS=125,100,150,100, +[View_Node] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14, +DEFINITIONS= +COLUMNWIDTHS=125,125,100,50,50,100,100,100,50,50,50,50,100,100,150, +[View_NodeTxMessages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7, +DEFINITIONS= +COLUMNWIDTHS=125,125,55,100,50,100,100,150, +[View_NodeTxMsg] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14, +DEFINITIONS= +COLUMNWIDTHS=125,125,100,50,50,100,100,100,50,50,50,50,100,100,150, +[View_NodeTxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14, +DEFINITIONS= +COLUMNWIDTHS=125,125,100,50,50,100,100,100,50,50,50,50,100,100,150, +[View_NodeRxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14, +DEFINITIONS= +COLUMNWIDTHS=125,125,100,50,50,100,100,100,50,50,50,50,100,100,150, +[View_NodeTxSigs] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12, +DEFINITIONS= +COLUMNWIDTHS=125,125,50,100,100,100,50,50,50,50,100,100,150, +[View_NodeRxSigs] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12, +DEFINITIONS= +COLUMNWIDTHS=125,125,50,100,100,100,50,50,50,50,100,100,150, +[View_Messages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7, +DEFINITIONS= +COLUMNWIDTHS=125,55,100,50,100,100,100,150, +[View_Message] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14, +DEFINITIONS= +COLUMNWIDTHS=125,125,100,50,50,100,100,100,50,50,50,50,100,100,150, +[View_Signals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11, +DEFINITIONS= +COLUMNWIDTHS=125,50,100,100,100,50,50,50,50,100,100,150, +[View_ValueTables] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=125,150, +[View_AttrDefs] +HIDDEN=6, +ORDER=0,1,2,3,4,5, +DEFINITIONS= +COLUMNWIDTHS=125,100,100,50,50,100,150, diff --git a/Modbus-DLL/include/DBC/generated.dbc b/Modbus-DLL/include/DBC/generated.dbc new file mode 100644 index 0000000..fdbed98 --- /dev/null +++ b/Modbus-DLL/include/DBC/generated.dbc @@ -0,0 +1,47 @@ +VERSION "" + + +NS_ : + NS_DESC_ + CM_ + BA_DEF_ + BA_ + VAL_ + CAT_DEF_ + CAT_ + FILTER + BA_DEF_DEF_ + EV_DATA_ + ENVVAR_DATA_ + SGTYPE_ + SGTYPE_VAL_ + BA_DEF_SGTYPE_ + BA_SGTYPE_ + SIG_TYPE_REF_ + VAL_TABLE_ + SIG_GROUP_ + SIG_VALTYPE_ + SIGTYPE_VALTYPE_ + BO_TX_BU_ + BA_DEF_REL_ + BA_REL_ + BA_DEF_DEF_REL_ + BU_SG_REL_ + BU_EV_REL_ + BU_BO_REL_ + SG_MUL_VAL_ + +BS_: + +BU_: Client_2 + + + +BA_DEF_ BU_ "NodeLayerModules" STRING ; +BA_DEF_ "DBName" STRING ; +BA_DEF_ "BusType" STRING ; +BA_DEF_DEF_ "NodeLayerModules" "Ethernet_IL.DLL"; +BA_DEF_DEF_ "DBName" ""; +BA_DEF_DEF_ "BusType" "Ethernet"; +BA_ "BusType" "Ethernet"; +BA_ "DBName" "Modbus"; diff --git a/Modbus-DLL/include/DBC/generated.ini b/Modbus-DLL/include/DBC/generated.ini new file mode 100644 index 0000000..e7255ca --- /dev/null +++ b/Modbus-DLL/include/DBC/generated.ini @@ -0,0 +1,165 @@ +[View_Vehicles] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=125,150, +[View_Vehicle] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=125,125, +[View_VehicleNetworks] +HIDDEN=3,5, +ORDER=0,1,2,3,4, +DEFINITIONS=2,3, +COLUMNWIDTHS=125,125,100,100,150,100,100, +[View_VehicleNetwork] +HIDDEN= +ORDER=0,1,2,3,4,5, +DEFINITIONS=1, +COLUMNWIDTHS=125,125,100,125,150,100, +[View_VehicleNetworkTxMessages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8, +DEFINITIONS= +COLUMNWIDTHS=125,125,55,100,50,100,100,100,150, +[View_VehicleNetworkSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=125,125,100,50,100,50,100,100,100,50,50,50,50,100,100,150, +[View_VehicleControlUnit] +HIDDEN= +ORDER=0,1,2,3,4,5, +DEFINITIONS=1, +COLUMNWIDTHS=125,125,100,125,150,100, +[View_VehicleGateways] +HIDDEN= +ORDER=0,1,2, +DEFINITIONS= +COLUMNWIDTHS=125,125,100, +[View_VehicleGatewaySignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6, +DEFINITIONS= +COLUMNWIDTHS=125,125,125,125,125,125,125, +[View_Networks] +HIDDEN=2,4, +ORDER=0,1,2,3, +DEFINITIONS=2,3, +COLUMNWIDTHS=125,100,100,150,100,100, +[View_Network] +HIDDEN= +ORDER=0,1,2,3,4, +DEFINITIONS=1, +COLUMNWIDTHS=125,125,100,150,100, +[View_NetworkTxMessages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8, +DEFINITIONS= +COLUMNWIDTHS=125,125,55,100,50,100,100,100,150, +[View_NetworkTxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +DEFINITIONS= +COLUMNWIDTHS=125,125,100,50,100,50,100,100,100,50,50,50,50,100,100,150, +[View_NetworkNodeGroup] +HIDDEN= +ORDER=0,1,2,3, +DEFINITIONS=1, +COLUMNWIDTHS=125,100,150,100, +[View_Ecus] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=125,150, +[View_Ecu] +HIDDEN= +ORDER=0,1,2,3,4, +DEFINITIONS=1, +COLUMNWIDTHS=125,125,100,150,100, +[View_EnvVars] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9, +DEFINITIONS= +COLUMNWIDTHS=125,100,100,50,50,50,50,100,100,150, +[View_EnvVar] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10, +DEFINITIONS= +COLUMNWIDTHS=125,125,100,100,50,50,50,50,100,100,150, +[View_NodeGroups] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=125,150, +[View_NodeGroup] +HIDDEN= +ORDER=0,1,2,3, +DEFINITIONS= +COLUMNWIDTHS=125,125,55,150, +[View_Nodes] +HIDDEN= +ORDER=0,1,2,3, +DEFINITIONS=1, +COLUMNWIDTHS=125,100,150,100, +[View_Node] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14, +DEFINITIONS= +COLUMNWIDTHS=125,125,100,50,50,100,100,100,50,50,50,50,100,100,150, +[View_NodeTxMessages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7, +DEFINITIONS= +COLUMNWIDTHS=125,125,55,100,50,100,100,150, +[View_NodeTxMsg] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14, +DEFINITIONS= +COLUMNWIDTHS=125,125,100,50,50,100,100,100,50,50,50,50,100,100,150, +[View_NodeTxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14, +DEFINITIONS= +COLUMNWIDTHS=125,125,100,50,50,100,100,100,50,50,50,50,100,100,150, +[View_NodeRxSignals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14, +DEFINITIONS= +COLUMNWIDTHS=125,125,100,50,50,100,100,100,50,50,50,50,100,100,150, +[View_NodeTxSigs] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12, +DEFINITIONS= +COLUMNWIDTHS=125,125,50,100,100,100,50,50,50,50,100,100,150, +[View_NodeRxSigs] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12, +DEFINITIONS= +COLUMNWIDTHS=125,125,50,100,100,100,50,50,50,50,100,100,150, +[View_Messages] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7, +DEFINITIONS= +COLUMNWIDTHS=125,55,100,50,100,100,100,150, +[View_Message] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14, +DEFINITIONS= +COLUMNWIDTHS=125,125,100,50,50,100,100,100,50,50,50,50,100,100,150, +[View_Signals] +HIDDEN= +ORDER=0,1,2,3,4,5,6,7,8,9,10,11, +DEFINITIONS= +COLUMNWIDTHS=125,50,100,100,100,50,50,50,50,100,100,150, +[View_ValueTables] +HIDDEN= +ORDER=0,1, +DEFINITIONS= +COLUMNWIDTHS=125,150, +[View_AttrDefs] +HIDDEN=6, +ORDER=0,1,2,3,4,5, +DEFINITIONS= +COLUMNWIDTHS=125,100,100,50,50,100,150, diff --git a/Modbus-DLL/include/SysVars/generated.vsysvar b/Modbus-DLL/include/SysVars/generated.vsysvar new file mode 100644 index 0000000..f32d34c --- /dev/null +++ b/Modbus-DLL/include/SysVars/generated.vsysvar @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Modbus-DLL/include/VCSignalProtocolDLL/Include/IPBPacketAPI.h b/Modbus-DLL/include/VCSignalProtocolDLL/Include/IPBPacketAPI.h new file mode 100644 index 0000000..23ffce7 --- /dev/null +++ b/Modbus-DLL/include/VCSignalProtocolDLL/Include/IPBPacketAPI.h @@ -0,0 +1,1118 @@ +/*------------------------------------------------------------------- + IPBPacketAPI.h + ------------------------------------------------------------------- + + (c) 2009 Vector Informatik GmbH. All rights reserved. + + ------------------------------------------------------------------- */ + +#pragma once +#ifndef IPBPACKETAPI_H +#define IPBPACKETAPI_H + +//////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////// + +/*! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!! !!! + !!! Important: If this header is modified, the version definitions !!! + !!! must be properly increased. !!! + !!! !!! + !!! New methods must be added at the end within a interface class !!! + !!! (not before existing methods). !!! + !!! !!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + The IPBPacketLib, add-on DLLs and CANoe/CANalyzer must use exactly + the same version for IPB_PACKET_LIB_INTERFACE_VERSION_MAJOR and + IPB_PACKET_LIB_STRUCT_VERSION. If these values differ, CANoe/CANalyzer + does not load the IPBPacketLib or the add-on DLL. + + If only IPB_PACKET_LIB_INTERFACE_VERSION_MINOR differs, the changes + are backward compatible. +*/ + +// +// Version +// + +#define IPB_PACKET_LIB_INTERFACE_VERSION_MAJOR 1 +#define IPB_PACKET_LIB_INTERFACE_VERSION_MINOR 0 +#define IPB_PACKET_LIB_STRUCT_VERSION 1 + +// +// Utility Macros +// + +#define VDECL virtual NIPB::VResult __stdcall +#define VDEF NIPB::VResult __stdcall + +#define BY2BI(x) ((x)<<3) // Bytes to Bits +#define BI2BY(x) ((x)>>3) // Bites to Bytes +#define BIOF(x) ((x)&0x07) // Bits of value + +//////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////// + +namespace NIPB +{ + // forward declarations + class IApi; + class IAddOnManager; + class IProtocolManager; + class ISocketManager; + class IProtocolAddOn; + class IAddOnRegistrar; + class INetworkModel; + class ITokenDefinition; + class IDefinitionIterator; + class ITokenDefinitionCreator; + class IProtocol; + class IPacket; + class IPacket; + class IEncoder; + class IFormatter; + class IPacketInspector; + class IValueTableDefinition; + struct VProtocolToken; + + //! Error codes + typedef enum { + kOK = 0, + kError = 460100, //!< General error + kInternalError = 460101, + kNotImplemented = 460102, //!< Function is not implemented + kInvalidArg = 460103, //!< Invalid parameter was given to a function + kEndReached = 460104, //!< Iterator reached last element + kNoBusProtocol = 460105, //!< Only bus protocol allowed + kProtocolNotAvailable = 460106, //!< Protocol with Id not found + kProtocolAlreadyAvailable = 460107, //!< Protocol with Id not found + kTokenNotFound = 460108, //!< Token with Id not found + kEncodingNotSupported = 460109, //!< Encoding is not supported + kEncodingError = 460110, //!< Encoding error + kPacketParseError = 460111, //!< Packet could not be parsed + kOutOfBounds = 460112, //!< Token references data outside packet data length + kFileNotFound = 460113, //!< File not found + kInvalidAddOnDll = 460114, //!< AddOn DLL is invalid, required functions not found + kInvalidAddOnVersion = 460115, //!< AddOn version not accepted + kPropertyNotFound = 460116, //!< The property is not available + kOperationNotAllowedWhenNotActive = 460117, //!< IApi is not active + kOperationNotAllowedWhenActive = 460118, //!< Operation can not be performed, if active + kDataNotAvailable = 460119, //!< Cannot access part of packet data because frame is to short + kPacketIsLocked = 460120, //!< Packet is locket and cannot be modified + kNotAllowed = 460121, //!< Operation is not allowed + kHostNotReachable = 460122 //!< Host is not reachable, maybe netmask is wrong + } VResult; + + //! Predefined token IDs of build-in protocols + typedef enum { + kNil = 0x0000, + kHeader = 0x0001, // Header of a protocol (has no designator) + kData = 0x0002, // Payload of a protocol (has no designator) + kReserved = 0x0003, // Placeholder for reserved fields (has no designator) + + // + // Token IDs + // + + // Ethernet + kETH = 0x0100, + kEthHeader = 0x0101, + kEthData = 0x0102, + kEthType = 0x0103, + kEthSource = 0x0104, + kEthDestination = 0x0105, + kEthVlan = 0x0106, + kEthVlanTci = 0x0107, + kEthVlanPriority = 0x0108, + kEthVlanTr = 0x0109, + kEthVlanId = 0x010A, + // ARP + kARP = 0x0110, + kARPHeader = 0x0111, + kARPHardwareType = 0x0113, + kARPProtocolType = 0x0114, + kARPHardwareSize = 0x0115, + kARPProtocolSize = 0x0116, + kARPOperation = 0x0117, + kARPHwSourceAddr = 0x0118, + kARPProtSourceAddr = 0x0119, + kARPHwDestinationAddr = 0x011A, + kARPProtDestinationAddr = 0x011B, + kARPError = 0x011C, + // RARP + kRARP = 0x0200, + kRARPHeader = 0x0201, + kRARPHardwareType = 0x0203, + kRARPProtocolType = 0x0204, + kRARPHardwareSize = 0x0205, + kRARPProtocolSize = 0x0206, + kRARPOperation = 0x0207, + kRARPHwSourceAddr = 0x0208, + kRARPProtSourceAddr = 0x0209, + kRARPHwDestinationAddr = 0x020A, + kRARPProtDestinationAddr = 0x020B, + kRARPError = 0x020C, + // IPv4 + kIPv4 = 0x0120, + kIPv4Header = 0x0121, + kIPv4Data = 0x0122, + kIPv4Version = 0x0123, + kIPv4IHL = 0x0124, + kIPv4DSCP = 0x0125, + kIPv4ECN = 0x0126, + kIPv4TotalLength = 0x0127, + kIPv4Identification = 0x0128, + kIPv4Flags = 0x0129, + kIPv4Offset = 0x012A, + kIPv4TTL = 0x012B, + kIPv4Protocol = 0x012C, + kIPv4Checksum = 0x012D, + kIPv4Source = 0x012E, + kIPv4Destination = 0x012F, + // IPv6 + kIPv6 = 0x0130, + kIPv6Header = 0x0131, + kIPv6Data = 0x0132, + kIPv6Version = 0x0133, + kIPv6Class = 0x0134, + kIPv6Flow = 0x0135, + kIPv6Length = 0x0136, + kIPv6Next = 0x0137, + kIPv6HopLimit = 0x0138, + kIPv6Source = 0x0139, + kIPv6Destination = 0x013A, + // NDP + kNDP = 0x0140, + kNDPHeader = 0x0141, + kNDPData = 0x0142, + kNDPCurHopLimt = 0x0143, + kNDPManagedAddrConfigFlag = 0x0144, + kNDPOtherConfigFlag = 0x0145, + kNDPMobileIPv6HomeAgentFlag = 0x0146, + kNDPDefaultRouterPreferences = 0x0147, + kNDPNeighborDiscoveryProxyFlag= 0x0148, + kNDPRouterLifetime = 0x0149, + kNDPReachableTime = 0x014A, + kNDPRetransTimer = 0x014B, + kNDPTarget = 0x014C, + kNDPRouterFlag = 0x014D, + kNDPSolicitedFlag = 0x014E, + kNDPOverrideFlag = 0x014F, + kNDPDestination = 0x0151, + kNDPOption = 0x0152, + // UDP + kUDP = 0x0160, + kUDPHeader = 0x0161, + kUDPData = 0x0162, + kUDPSource = 0x0163, + kUDPDestination = 0x0164, + kUDPLength = 0x0165, + kUDPChecksum = 0x0166, + // TCP + kTCP = 0x0170, + kTCPHeader = 0x0171, + kTCPData = 0x0172, + kTCPSource = 0x0173, + kTCPDestination = 0x0174, + kTCPSequence = 0x0175, + kTCPAckNumber = 0x0176, + kTCPOffset = 0x0177, + kTCPFlags = 0x0178, + kTCPWindow = 0x0179, + kTCPChecksum = 0x017A, + kTCPPointer = 0x017B, + // ICMPv4 + kICMPv4 = 0x0180, + kICMPv4Header = 0x0181, + kICMPv4Data = 0x0182, + kICMPv4Type = 0x0183, + kICMPv4Code = 0x0184, + kICMPv4Checksum = 0x0185, + kICMPv4Identifier = 0x0186, + kICMPv4SequenceNumber = 0x0187, + kICMPv4GatewayAddr = 0x0188, + kICMPv4RouterAdvertNumOfAddr = 0x0189, + kICMPv4RouterAddrEntrySize = 0x018A, + kICMPv4RouterLifetime = 0x018B, + kICMPv4TimestampOriginate = 0x018C, + kICMPv4TimestampReceive = 0x018D, + kICMPv4TimestampTransmit = 0x018E, + kICMPv4ParameterProblemPtr = 0x018F, + kICMPv4AddressMask = 0x0190, + kICMPv4OutboundHopCnt = 0x0191, + kICMPv4ReturnHopCnt = 0x0192, + kICMPv4OutputLinkSpeed = 0x0193, + kICMPv4OutputLinkMTU = 0x0194, + kICMPv4DataConvErrPointer = 0x0195, + kICMPv4TimeToLive = 0x0196, + kICMPv4MsgUtilizedByExpSubType=0x0197, + kICMPv4TimeToLiveNames = 0x0198, + kICMPv4RouterAddr = 0x0199, + // ICMPv6 + kICMPv6 = 0x01A0, + kICMPv6Header = 0x01A1, + kICMPv6Data = 0x01A2, + kICMPv6Type = 0x01A3, + kICMPv6Code = 0x01A4, + kICMPv6Checksum = 0x01A5, + kICMPv6MTU = 0x01A6, + kICMPv6Pointer = 0x01A7, + kICMPv6Identifier = 0x01A8, + kICMPv6SequenceNumber = 0x01A9, + // NTP + kNTP = 0x01B0, + kNTPHeader = 0x01B1, + kNTPProtocol = 0x01B3, + kNTPLeapInd = 0x01B4, + kNTPVersion = 0x01B5, + kNTPMode = 0x01B6, + kNTPStratum = 0x01B7, + kNTPPollIntervall = 0x01B8, + kNTPPrecision = 0x01B9, + kNTPRootDelay = 0x01BA, + kNTPRootDispersion = 0x01BB, + kNTPRefId = 0x01BC, + kNTPRefTimestamp = 0x01BD, + kNTPOrgTimestamp = 0x01BE, + kNTPRxTimestamp = 0x01BF, + kNTPTxTimestamp = 0x01C0, + kNTPKeyId = 0x01C1, + kNTPAuthenticationCode = 0x01C2, + kNTPResponse = 0x01C3, + kNTPError = 0x01C4, + kNTPMore = 0x01C5, + kNTPOperation = 0x01C6, + kNTPSequence = 0x01C7, + kNTPStatus = 0x01C8, + kNTPAssociationId = 0x01C9, + kNTPOffset = 0x01CA, + kNTPCount = 0x01CB, + kNTPDataArea = 0x01CC, + kNTPPadding = 0x01CD, + kNTPStatusLeapIndicator = 0x01CE, + kNTPStatusClockSource = 0x01CF, + kNTPStatusSystemEventCount = 0x01D0, + kNTPStatusSystemEventCode = 0x01D1, + kNTPStatusPeer = 0x01D2, + kNTPStatusPeerSelection = 0x01D3, + kNTPStatusPeerEventCount = 0x01D4, + kNTPStatusPeerEventCode = 0x01D5, + kNTPStatusClock = 0x01D6, + kNTPStatusClockEventCode = 0x01D7, + kNTPStatusErrorCode = 0x01D8, + // DHCPv4 + kDHCPv4 = 0x01E0, + kDHCPv4Header = 0x01E1, + kDHCPv4Data = 0x01E2, + kDHCPv4Operation = 0x01E3, + kDHCPv4HardwareType = 0x01E4, + kDHCPv4HardwareSize = 0x01E5, + kDHCPv4Hops = 0x01E6, + kDHCPv4XID = 0x01E7, + kDHCPv4Time = 0x01E8, + kDHCPv4Flags = 0x01E0, + kDHCPv4ClientAddr = 0x01EA, + kDHCPv4YourAddr = 0x01EB, + kDHCPv4ServerAddr = 0x01EC, + kDHCPv4AgentAddr = 0x01ED, + kDHCPv4ClientHwAddr = 0x01EE, + kDHCPv4ClientHwAddrPadding = 0x01EF, + kDHCPv4ServerName = 0x01F0, + kDHCPv4File = 0x01F1, + kDHCPv4MagicCookie = 0x01F2, + kDHCPv4Option = 0x01F3, + // DoIP + kDoIP = 0x01F4, + kDoIPHeader = 0x01F5, + kDoIPData = 0x01F6, + kDoIPVersion = 0x01F7, + kDoIPInverseVersion = 0x01F8, + kDoIPPayloadType = 0x01F9, + kDoIPPayloadLength = 0x01FA, + + // + // Init protocol types + // + + kPacketTypeVLAN = 0x01001, + + // + // Socket Properties + // + + kEthLocalAddress = 0x0201, + kIPv4LocalAddress = 0x0210, + kIPv4RemoteAddress = 0x0211, + kIPv4Netmask = 0x0212, + kUDPRemotePort = 0x0220, + kUDPLocalPort = 0x0221, + kTCPRemotePort = 0x0230, + kTCPLocalPort = 0x0231, + + } VPredefinedTokenIds; + + //! Kind of encoding + typedef enum { + kEncodingDisplayText = 0x01, //!< Value buffer must be string buffer (zero terminated) which is interpreted by the encoder + kEncodingPhysical = 0x02, //!< Value buffer must be double + kEncodingInteger = 0x03, //!< Value buffer must be integer with 8, 16, 32 or 64 bit size + kEncodingUnsigned = 0x04, //!< Value buffer must be unsigned integer with 8, 16, 32 or 64 bit size + kEncodingData = 0x05 //!< Value buffer must be raw data + } VEncoding; + + typedef enum { + kEncoderData = 1, + kEncoderUnsignedLE = 2, + kEncoderUnsignedBE = 3, + kEncoderMacId = 4, + kEncoderIPv4 = 5, + kEncoderIPv6 = 6, + kEncoderIP = 7, + kEncoderTypeICMPv4 = 8, + kEncoderCodeICMPv4 = 9, + kEncoderProtocolIPv4 = 10, + kEncoderOperationARP = 11, + kEncoderHardwareTypeARP = 12, + kEncoderTypeETH = 13, + kEncoderPortUDP = 14, + kEncoderPortTCP = 15, + kEncoderFlagsTCP = 16, + kEncoderTypeDHCP = 17, + kEncoderModeNTP = 18, + kEncoderStratumNTP = 19, + kEncoderTimeNTP = 20, + kEncoderPollIntervalNTP = 21, + kEncoderLeapIndicatorNTP = 22, + kEncoderRootTimesNTP = 23, + kEncoderReferenceIdNTP = 24, + kEncoderPrecisionNTP = 25, + kEncoderOperationCodeNTP = 26, + kEncoderClockSourceNTP = 27, + kEncoderSystemEventCodeNTP = 28, + kEncoderPeerStatusNTP = 29, + kEncoderPeerSelectionNTP = 30, + kEncoderPeerEventCodeNTP = 31, + kEncoderClockStatusNTP = 32, + kEncoderErrorCodeNTP = 33, + kEncoderTypeICMPv6 = 34, + kEncoderCodeICMPv6 = 35, + kEncodeFlagsDCHP = 36, + kEncoderStringANSII = 37, + kEncoderTimeMilliseconds = 38, + kEncoderTimeSeconds = 39, + kEncoderErrorDRARP = 40, + kEncoderPayloadTypeDoIP = 41 + } VEncoder; + + // Fields for inspection + typedef enum { + kFieldLabel = 1, + kFieldValue = 2, + kFieldValueInterpretation = 3, + kFieldInfo = 4 + } VInspectorField; + + //! Inpspection type + typedef enum { + kInspectionInfoColumn = 1, + kInspectionDetailTree = 2 + } VInspectionType; + + //! Direction of a packet + typedef enum { + kDirRx = 0, + kDirTx = 1 + } VDirection; + + //! Types of token definitions + /*! + Two types of token definitions are supported. It can be retrieved via the ITokenDefinition. + */ + typedef enum { + kTypeNone = 0, // Invalid value for token type + kTypeProtocol = 1, // The token defintion represents a IP based protocol, i.e. UDP or IPv4 + kTypeProtocolField = 2, // The token defintion represents a field of a protocol, i.e. IP source address + kTypeSocketProperty = 3, // The token defintion represents a property of a socket + kTypePacketType = 4 // The token defintion represents a packet type. i.e. vlan of Ethernet + } VTokenType; + + //! Format of a defined token + /*! + The token format can be retrieved from ITokenDefinition for each defined token. + It can be used for sophisticated presentation of the token value in the UI. + */ + typedef enum { + kFormatData = 0, //!< Generic data format + kFormatInteger = 1, //!< Integer format with 1, 2, 4 or 8 Bytes + kFormatBitfield = 2, //!< Bit field + kFormatTextASCII = 3, //!< String in ASCII format + kFormatMacId = 4, //!< Ethernet MAC address + kFormatAddressIPv4 = 5, //!< IPv4 IP address + kFormatAddressIPv6 = 6, //!< IPv6 IP address + kFormatPayload = 7, //!< the payload field + kFormatHeader = 8, //!< the header of a protocol + } VTokenFormat; + + //! Format flags for kFormatInteger + /*! + With the format flags the protocol can give hints for presentation + of the token value. + */ + typedef enum { + kFormatFlagPrefferedHex = 0x01, //!< Preffered value presentation is hexadecimal + kFormatFlagPrefferedDec = 0x02, //!< Preffered value presentation is decimal + kFormatFlagChecksum = 0x04 //!< the value is a checksum + } VTokeFormatFlagsInteger; + + typedef enum { + kBusAll = 0, + kBusEthernet = 11 + } VBusType; + + typedef long VChannel; + + // Token identifier + typedef unsigned long VTokenId; + + // Time in [ns] + typedef unsigned long long VTimeNS; + + //! The function DllGetApiVersion is implemented in the IPBPacketLib und + //! must be implemented by protocol DLLs. + typedef HRESULT(__stdcall *VGetApiVersionFct)( unsigned long /*out*/ *major, // Version major, must return IPB_PACKET_LIB_INTERFACE_VERSION_MAJOR + unsigned long /*out*/ *minor, // Version minor, must return IPB_PACKET_LIB_INTERFACE_VERSION_MINOR + unsigned long /*out*/ *structVersion // Struct version, must return IPB_PACKET_LIB_STRUCT_VERSION + ); + + //! Create the Api of the IPBPacketLib + /*! + Returns the API object of the IPB packet library + The function DllGetApi is implemented in the IPBPacketLib with this signature + */ + typedef HRESULT(__stdcall *VCreatedApiFct)( NIPB::IApi /*out*/ **api ); + + //! Release the Api of the IPBPacketLib + /*! + The function DllGetApi is implemented in the IPBPacketLib with this signature + */ + typedef HRESULT(__stdcall *VReleaseApiFct)( NIPB::IApi /*out*/ *api ); // + + //! Use this addOn manager to register addOns + /*! + The function DllRegisterAddOn must be implemented in the protocol DLL + */ + typedef HRESULT(__stdcall *VRegisterAddOnFct)( NIPB::IAddOnRegistrar /*in*/ *registrar ); // + + /*-----------------------------------------------------------------------------------------------*/ + //! The entry point to the IPB Packet Lib + /*! + This is the base for accessing the functionality of the IPBPacketLib. A pointer + to this interface canb be retrieved via the exported C function VCreateApiFct. When it + is not longer needed it must be release with the exported C function VReleaseApiFct. + + IApi -+ + | + +-- IAddOnManager Manages the add-on DLLs + +-- IProtocolManager Manages the supported protocols + +-- INetworkModel Contains the defintions of the protocols and its fields + +-- ISocketManager Manages the sockets + + The IPBPacketLib knows three states: + + +-----------------+ Initallize +-----------------+ Active +-----------------+ + | |------------->| |------------>| | + | Not Initialized | | Initialized | | Active | + | |<-------------| |------------>| | + +-----------------+ Deintialize +-----------------+ Deactive +-----------------+ + + Depending on the state functionality is available or not: + + State 'Not Initialized': Add-on DLLs can beloaded. Network Model, Protocol Manager and + Socket Manager are not available + + State 'Initialized': Protocol Manager and Network Manager are available. Protocols + can be interpreted and packets can be assembled. + Transmitting and receiving is not possible. In CANoe/CANalyzer + this state is used when measurement is not running. + + State 'Active': Socket Manager is available and everthing of state 'Initialized'. + Packets can be received and transmitted. + In CANoe/CANalyzer this state is used when measurement is running. + */ + class IApi + { + public: + VDECL Initialize() = 0; + VDECL Activate() = 0; + VDECL Deactivate() = 0; + VDECL Deinitialize() = 0; + + VDECL GetAddOnManager ( IAddOnManager /*out*/ **manager ) = 0; + VDECL GetProtocolManager( VBusType /*in*/ busType, VChannel /*in*/ channel, IProtocolManager /*out*/ **manager ) = 0; + VDECL GetNetworkModel ( VBusType /*in*/ busType, VChannel /*in*/ channel, INetworkModel /*out*/ **model ) = 0; + VDECL GetSocketManager ( VBusType /*in*/ busType, VChannel /*in*/ channel, ISocketManager /*out*/ **manager ) = 0; + }; + + /*-----------------------------------------------------------------------------------------------*/ + //! Manager for add-on DLLs + /*! + With add-on DLLs the IPB Packet Lib can be extended with user defined protocols. These protocols + can use the build-in protocols like IPv4 and UDP and access only the payload of these protocols. + + The add-on DLL must export the C function VRegisterAddOnFct. This function is called by the + IPBPacketLib on loading. The function gets a pointer to IAddOnRegistrar, which can be used + by the add-on DLL to register additonal protocols. For this the add-on DLL must implement + the interfaces IProtocolAddOn and IProtocol. + */ + class IAddOnManager + { + public: + //! Loads an add-on DLL + /*! + LoadAddOn is only available, if the IPB Packet API ist not initialized yet (IApi::Initialize). + During IApi::Deinitialize all loaded add-ons are unloaded. + */ + VDECL LoadAddOn( const char /*in*/ *filename ) = 0; + }; + + /*-----------------------------------------------------------------------------------------------*/ + //! Interface to register useer define protocols of a add-on DLL + /*! + This interface must be used by an add-on DLL to register a user define protocol. The + interface is passed to the exported C function VRegisterAddOnFct during IAddOnManager::LoadAddOn. + See IAddOnManager for details. + */ + class IAddOnRegistrar + { + public: + //! Registers a user protocol + /*! + This function must be called to register a user protocol at the IPB packet Lib. + + The lower protocol, which preceeds the user protocol must be specified. The lowerProtocolTag + allow the selection of the user protocol. The meaning of the lowerProtocolTag depends on + the lowerProtocol. Following protocols are supported as lowerProtocol: + + Designator lowerProtocolTag1 lowerProtocolTag2 Comment + "eth" Ethernet Type - + "ipv4" Protocol - + "udp" source port destination port The value 0xFFFFFFFF is used as wildcard + "tcp" source port destination port The value 0xFFFFFFFF is used as wildcard + */ + VDECL RegisterProtocol( const char /*in*/ *protocolDesignator, IProtocolAddOn /*in*/ *addOn, const char /*in*/ *lowerProtocolDesignator, ULONG /*in*/ lowerProtocolTag1, ULONG /*in*/ lowerProtocolTag2 ) = 0; + }; + + /*-----------------------------------------------------------------------------------------------*/ + //! Handling of user protocol in a add-on DLL + /*! + This interface must be implemented by a add-on DLL. It creates a protoocl object, which must + implement the IProtocol interface, during IApi::Initialized. + On IApi::Deinialize the release function IProtocolAddOn::ReleaseProtocol is called to delete + the protocol object. See IAddOnManager for details. + */ + class IProtocolAddOn + { + public: + VDECL CreateProtocol( const char /*in*/ *protocolDesignator, IProtocol /*out*/ **protocol ) = 0; + VDECL ReleaseProtocol( IProtocol /*in*/ *protocol) = 0; + }; + + ////////////////////////////////////////////////////////////////////// + // Network Model API + ////////////////////////////////////////////////////////////////////// + + /*-----------------------------------------------------------------------------------------------*/ + //! The network model manages all available protocol and token definitions + /*! + The network model contains all avalable definitions of token and protocols. It can resolve + token and protocol designators to tokenIDs. + */ + class INetworkModel + { + public: + VDECL GetTokenId ( const char /*in*/ *protocolDesignator, const char /*in*/ *tokenDesignator, VTokenId /*out*/ *tokenId ) = 0; + VDECL GetDefinition ( VTokenId /*in*/ identifier, ITokenDefinition /*out*/ **definition ) = 0; + VDECL GetDefinitionIterator ( VTokenId /*in*/ identifier, VTokenType /*in*/ tokenType, IDefinitionIterator /*out*/ **iterator ) = 0; + VDECL ReleaseDefinitionIterator( IDefinitionIterator /*in*/ *iterator ) = 0; + }; + + /*-----------------------------------------------------------------------------------------------*/ + //! The network model creator is used by user protocol DLLs to register protocol and token definitions + /*! + The interface INetworkModelCreator is only available in IProtocol::Initialize method. A user + protocol DLL must define its protocols and tokens with this interface. + */ + class INetworkModelCreator + { + public: + VDECL DefineProtocol( const char /*in*/ *protocolDesignator, VTokenId /*out*/ *tokenId , ITokenDefinitionCreator /*out*/ **definition ) = 0; + VDECL DefineProtocolField( ITokenDefinitionCreator /*in*/ *protocol, const char /*in*/ *designator, VTokenId /*out*/ *tokenId, ITokenDefinitionCreator /*out*/ **definition ) = 0; + }; + + /*-----------------------------------------------------------------------------------------------*/ + //! Setup a token defintition with a user protocol DLL + /*! + This interface is available in INetworkModelCreator::DefineProtocol and DefineProtocolField to + setup the definition of a token or protocol. + */ + class ITokenDefinitionCreator + { + public: + VDECL GetDefinition( ITokenDefinition /*out*/ **definition ) = 0; + VDECL SetDisplayName( char /*in*/ *name ) = 0; + VDECL SetFormat( VTokenFormat /*in*/ format ) = 0; + VDECL SetFormatFlags( unsigned long /*in*/ formatFlags ) = 0; + }; + + /*-----------------------------------------------------------------------------------------------*/ + //! Definition of a token. + /*! + A token can be a protocol or a field of a protocol. The ITokenDefinition + contains all information about a token, like TokenId, Designator, Type, ... + + The ITokenDefinition must be defined on initialization of the IPBPacketLib + and are valid until deintialization. + The information of the ITokenDefintion can be retrieved via INetworkModel and + can be used for sophisticated representation of the token and it valus with the UI. + */ + class ITokenDefinition + { + public: + //! Unique identifier of the token + /*! + The token identifier is used all over the whole IPBPacketLib to address + protocols and fields of protocols. The identifier is only valid during + runtime and must not be used for persistence. + + The are predefined token IDs for convenience reasons, see VPredefinedTokenIds. + Token IDs of add-on DLLs are created dynamically on defintion with INetworkModelCreator. + */ + VDECL GetIdentifier( VTokenId /*out*/ *identifier ) = 0; + + //! Designator of the token + /*! + The designator of a token must be unique within its protoocol (but is is not + globally unique). It must also fullfil the requirements of a CAPL variable + (no spaces, no special characters, don't start with a number). + */ + VDECL GetDesignator( unsigned long /*in*/ bufferSize, char /*out**/ *buffer ) = 0; + + //! Type of the token + /*! + See VTokenType. + */ + VDECL GetType( VTokenType /*out*/ *type ) = 0; + + //! Format of the token value + /*! + The token format can be used for sophisticated presentation of a token + value, see VTokenFormat. + */ + VDECL GetFormat( VTokenFormat /*out*/ *format ) = 0; + + //! Format depended flags + /*! + With the format flag the representation of token value can be influenced. + See VTokeFromatFlags. + */ + VDECL GetFormatFlags( unsigned long /*out*/ *flags ) = 0; + + //! Name of a protocol or field of a protocol display on the UI + /*! + The display name can contain spaces. + */ + VDECL GetDisplayName( unsigned long /*in*/ bufferSize, char /*out**/ *buffer ) = 0; + + //! Short description of the token + /*! + */ + VDECL GetDescription( unsigned long /*in*/ bufferSize, char /*out**/ *buffer ) = 0; + + //! Returns a value table for a token definition + /*! + Note: Value tables are only supported for build-in protocols! + + \param packet Optional parameter to filter the value table for valid + values. Use NULL to return all possible values. + \param valueTable The function push the values of the value table to this object. + The caller must implement this interface to receive to values. + */ + VDECL GetValueTableDefinition( IPacket /*in*/ *packet, IValueTableDefinition /*in*/ *valueTable ) = 0; + }; + + /*-----------------------------------------------------------------------------------------------*/ + //! Iterator for the INetworkModel + /*! + This interface is used to iterate through the definitions of the INetworkModel. Use + INetworkModel::GetDefinitionIterator to retrieve an iterator, INetworkModel::ReleaseDefinitionIterator + must be called to delete the iterator. + */ + class IDefinitionIterator + { + public: + VDECL Next() = 0; + VDECL GetCurrent( ITokenDefinition /*out*/ **definition ) = 0; + }; + + ////////////////////////////////////////////////////////////////////// + // Packet API + ////////////////////////////////////////////////////////////////////// + + /*-----------------------------------------------------------------------------------------------*/ + //! Structure for a token within a packet. + /*! + This structure references the data of a token within a packet. The structure is only valid + within the scope, where its is initialized by the IPBPacketAPI functions. Do not store this + structure as in a member variable! The structure will be invalid outside the current scope! + + The structure must be created as local (stack) variable. The functions of the IPBPacketAPI + need a pointer to this structure and will fill the members (with IProtocolManager::GetToken). + Other functions of the IPBPacketAPI need a filled VToken structure to access the data of a + token within in packet, like IEncoder::Decode. + + Important: If this structure is changed, IPB_PACKET_LIB_STRUCT_VERSION + must be increased and the IPBPacketLib will not be compatible with other + versions of IPB_PACKET_LIB_STRUCT_VERSION. + */ + struct VToken + { + VTokenId tokenId; + IProtocol *protocol; + IPacket *packet; + unsigned long bitOffset; //!< Offset from start of packet in [bit] + unsigned long bitLength; //!< Length of token in [bit] + }; + + /*-----------------------------------------------------------------------------------------------*/ + //! Structure for a protocol token within a packet. + /*! + The VProtocolToken is a specialiezed token which references the data of a protocol within a + packet. It references the header and the payload of a protocol seperatly. + + The functions of the IPBPacketLib which use a VToken as parameter also accept the VProtocolToken. + These functions will access the payload of the protocol (via bitOffset and bitLength). + + Important: If this structure is changed, IPB_PACKET_LIB_STRUCT_VERSION + must be increased and the IPBPacketLib will not be compatible with other + versions of IPB_PACKET_LIB_STRUCT_VERSION. + */ + struct VProtocolToken : public VToken + { + unsigned long headerBitOffset; //!< Offset from start of packet in [bit] + unsigned long headerBitLength; //!< Length of token in [bit] + }; + + /*-----------------------------------------------------------------------------------------------*/ + //! Structure for the protocols of a packet. + /*! + The IPacket interface must handle and provide this structure. It contains array with all + protocols of the packet as VProtocolToken. The structure is filled by IProtocolManager::ParsePacket + or IProtocolManager::InitProtocol. In most cases it is not necessary to access this structure + directly. Only the member 'contentId' and 'flags' must be set manually by IProtocol. + + Important: If this structure is changed, IPB_PACKET_LIB_STRUCT_VERSION + must be increased and the IPBPacketLib will not be compatible with other + versions of IPB_PACKET_LIB_STRUCT_VERSION. + */ + struct VProtocols + { + BYTE protocolCapacity; //!< Max. number of protocols in 'protocol' + BYTE protocolCount; //!< Number of protocols in 'protocol' + BYTE flags; //!< Bit 0 - Protocol Error + //!< Bit 1..7 - Reserved + BYTE reserved; //!< Reserved + ULONG contentId; //!< Id of the application layer content (0xFFFFFFFF=no content) + VProtocolToken protocol[1]; //!< Protocol tokens + }; + + /*-----------------------------------------------------------------------------------------------*/ + //! Encoding and decoding hints for IEncoder + /*! + This structure can be provided optionally to IEncoder to give a hint how a token should be + encoded or decoded. It is mainly needed for kEncodingDisplayText. + + Important: Do not change or remove field of this structure. It is + allowed to add new fields, if necesarry. 'structSize' must be properly + initialized and call must use 'structSize' to verify that a required + field is included. + */ + struct VEncoderInfo + { + unsigned long structSize; //!< Size of this structure in [byte] + unsigned long numberBase; //!< Global number base setting, 10=decimal, 16=hexadecimal + bool isSymbolic; //!< true, if global setting 'Designatoric' is enabled + bool isCompact; //!< true, if compact (short) output is required, i.e. for trace columns + }; + + typedef VEncoderInfo VDecoderInfo; + + /*-----------------------------------------------------------------------------------------------*/ + //! Info structure of IPacketInspector. + /*! + The structure can optionally provided to IPacketInspector::InspectPacket. + + Important: Do not change or remove field of this structure. It is + allowed to add new fields, if necesarry. 'structSize' must be properly + initialized and call must use 'structSize' to verify that a required + field is included. + */ + struct VInspectorInfo + { + unsigned long structSize; //!< Size of this structure in [byte] + bool defaultElapsed; //!< True, if items is by default elapsed + }; + + /*-----------------------------------------------------------------------------------------------*/ + //! Structure for value table definition for a token definition. + /*! + The structure is used for IValueTableDefinition. + + Important: Do not change or remove field of this structure. It is + allowed to add new fields, if necesarry. 'structSize' must be properly + initialized and call must use 'structSize' to verify that a required + field is included. + */ + struct VValueDefinition + { + unsigned long structureSize; //!< Size of this structure in [byte] + const char *label; //!< Label of the value for display + VTokenFormat valueFormat; //!< Format of valueData, see VTokenFormat + unsigned long valueFormatFlags; //!< Format flags, see VTokeFormatFlagsInteger + unsigned long valueLength; //!< Number of byte of value + void *valueData; //!< Points to data of the value + }; + + /*-----------------------------------------------------------------------------------------------*/ + //! The IProtocolManager is the central entity to manage packets. + /*! + The IProtocolManager can be retrieved via IApi::GetProtocolManager. It is the central entity + to access and create packets and its tokens. It uses the IProtocol to handle specific IP based + protocols. With the IAddOnManager additional protocols can be implemented in external DLLs by + the user. + */ + class IProtocolManager + { + public: + VDECL GetEncoder ( VEncoder /*in*/encoderType, IEncoder /*out*/ **encoder ) = 0; + + VDECL CreatePacket ( VTokenId /*in*/busProtocolId, VTokenId /*in*/busProtocolTypeId, unsigned long /*in*/ capacity, IPacket /*out*/ **packet ) = 0; + VDECL ReleasePacket ( IPacket /*in*/ *packet ) = 0; + + VDECL InitPacket ( IPacket /*in*/*packet, VTokenId /*in*/ busProtocolId, VTokenId /*in*/busProtocolTypeId ) = 0; + VDECL RemoveProtocol ( IPacket /*in*/*packet, VTokenId /*in*/ protocolId ) = 0; + VDECL InitProtocol ( IPacket /*in*/*packet, VTokenId /*in*/ protocolId, VTokenId /*in*/ protocolTypeId, VProtocolToken /*out*/ *token ) = 0; + VDECL CompleteProtocol ( IPacket /*in*/*packet, VTokenId /*in*/ protocolId ) = 0; + VDECL ParsePacket ( IPacket /*in*/*packet, VTokenId /*in*/ busProtocolId, IFormatter /*in*/ *errorWriter ) = 0; + + VDECL GetAppProtocol ( IPacket /*in*/*packet, VProtocolToken /*out*/ *protocol ) = 0; + VDECL GetProtocol ( IPacket /*in*/*packet, VTokenId /*in*/ protocolId, VProtocolToken /*out*/ *protocol ) = 0; + VDECL GetProtocolByIndex( IPacket /*in*/*packet, unsigned long /*in*/ index, VProtocolToken /*out*/ *protocol ) = 0; + VDECL GetProtocolCount ( IPacket /*in*/*packet, unsigned long/*out*/ *protocolCount ) = 0; + + VDECL GetToken ( IPacket /*in*/*packet, VTokenId /*in*/ protocolId, VTokenId /*in*/ tokenId, VToken /*out*/ *token ) = 0; + VDECL ResizeToken ( const VToken /*in*/ *token, unsigned long /*in*/bitLength, VToken /*out*/ *resizedToken ) = 0; + + VDECL InspectPacket ( IPacket /*in*/*packet, VInspectionType /*in*/ type, IPacketInspector /*in*/ *inspector ) = 0; + }; + + /*-----------------------------------------------------------------------------------------------*/ + //! The IProtocol handle a single IP based protocol. + /*! + This interface must be implemented by specific protocols. The IPBPacketLib contains basic + protocols, which implement this protocol. + + Lifetime: An object, which implements this protocol, must exist during + the whole runtime (initializato to deinitialzation) of the IPBPacketAPI. + */ + class IProtocol + { + public: + //! Initialize the protocol + /*! + \param protocolManager The protocol manager for this protocol. The pointer can be stored and is valid + during the whole lifetime of the IProtocol object. + \param networkModel The network model for this protocol. The pointer can be stored and is valid + during the whole lifetime of the IProtocol object. + \param modelCreator Define network model entities with this object. Pointer is only valid during this call. + */ + VDECL Initialize( IProtocolManager /*in*/ *protocolManager, INetworkModel /*in*/ *networkModel, INetworkModelCreator /*in*/ *modelCreator ) = 0; + + /*! + \param protocolManager The protocol manager for this protocol. The pointer is invalid after Deinitialize. + \param networkModel The network model for this protocol. The pointer is invalid after Deinitialize. + */ + VDECL Deinitialize( IProtocolManager /*in*/ *protocolManager, INetworkModel /*in*/ *networkModel ) = 0; + + //! Returns the textual designator of the protocol + /*! + The designator is used to access the protocol in CAPL (via Nodelayer) or the GUI of CANoe/CANalyzer. + + \param bufferSize Length of 'buffer'. Must not > 0 + \param buffer The designator is copied to this buffer. Must not be 0 + */ + VDECL GetDesignator( unsigned long /*in*/ bufferSize, char /*out**/ *buffer ) = 0; + + //! Unique token identifier of the protocol + /*! + The VTokenId of the protocol is registerd on startup during defintion of the protocol token. + + \param identifier A pointer to a VTokenId, which retrieves the identifier. Must not be 0 + */ + VDECL GetIdentifier( VTokenId /*out*/ *identifier ) = 0; + + //! Returns specific encoder for a token ID + /*! + The IEncoder is used to access a token within a IPacket. + + \param tokenId Token identifier for which the encoder is requested. + \param encoder Returns a pointer to the encoder. Must not be 0. + */ + VDECL GetEncoder( VTokenId /*in*/ tokenId, IEncoder /*out*/ **encoder ) = 0; + + //! Initialize a specific protocol during creation of a new packet + /*! + Use this method to setup a protocol within a packet. + + \param packet The packet where the protocol should be setup. Must not be 0. + \param protocolTypeId Type ID for a specific type of the protocol, i.e ARP request or ARP response + \param topProtocolToken Points to the top most protocol within the packet. + \param protocolToken This strucuture must be filled in InitProtocol. + */ + VDECL InitProtocol( IPacket /*in*/ *packet, VTokenId /*in*/ protocolTypeId, const VProtocolToken /*in*/ *topProtocolToken, VProtocolToken /*out*/ *protocolToken ) = 0; + + //! Complete the protocol at the end of creation/modification of a packet. + /*! + In this function the checksum or length field of a protocol can be calculated. + + \param packet The packet to complete + \param protocol Points to the protocol token for this protocol + */ + VDECL CompleteProtocol( IPacket /*in*/ *packet, const VProtocolToken /*in*/ *protocol ) = 0; + + //! Parse a received packet. + /*! + The method is called, when a packet is parsed. During parsing the VProtocols structure is initialzed + with the protocol information, whiche are returnd with 'protocolToken'. + + \param packet The packet to parse. + \param topProtocolToken Points to the top most, already parsed protocol within the packet. + \param errorWriter Use this interface to returne parsing errors, i.e wrong checksum + \param nextProcotolId Return the VTokenId of the next protocol. + \param protocolToken Fill this strucutre to setup the VProtocols structure. + */ + VDECL ParsePacket( IPacket /*in*/ *packet, const VProtocolToken /*in*/ *topProtocolToken, IFormatter /*in*/ *errorWriter, VTokenId /*out*/ *nextProcotolId, VProtocolToken /*out*/ *protocolToken ) = 0; + + //! Return a token of a protocol. + /*! + The function must fill the 'token' with the information of the request 'tokenId'. + + \param protocolToken Points the the VProtocolToken for the protocol. + \param tokenId The identifier of the requested token. + \param token Points to a VToken, which must be fille by this function. + */ + VDECL GetToken( const VProtocolToken /*in*/ *protocolToken, VTokenId /*in*/ tokenId, VToken /*out*/ *token ) = 0; + + //! Build a tree with information of the protocol. + /*! + The function is used in CANoe/CANalyzer in the detail view of the trace window to build + a tree with protocols and fields. + + \param protocolToken Protocol token of this protocol + \param type Inspection type + \param inspector IPacketInspectore to create the output. + */ + VDECL InspectProtocol( const VProtocolToken /*in*/ *protocolToken, VInspectionType /*in*/ type, IPacketInspector /*in*/ *inspector ) = 0; + }; + + /*-----------------------------------------------------------------------------------------------*/ + //! Interface for packets. + /*! + The IPacket handles the data of a packet and its VProtocols structure. + */ + class IPacket + { + public: + VDECL GetDataSize( unsigned long /*out*/ *dataSize) = 0; + VDECL GetDataCapacity( unsigned long /*out*/ *dataCapacity) = 0; + VDECL GetDataPtr( void /*out*/ **data ) = 0; + VDECL GetProtocols( VProtocols /*out*/ **protocols ) = 0; + + VDECL IsLocked( bool /*out*/ *locked ) = 0; + VDECL Clear() = 0; + VDECL Resize( unsigned long /*in*/ newSize ) = 0; + }; + + /*-----------------------------------------------------------------------------------------------*/ + //! Intefacef for encoding or decoding values and data of a token whith a packet. + /*! + Encoders are static and singleton objects. + */ + class IEncoder + { + public: + VDECL Encode( const VToken /*in*/*token, const VEncoderInfo /*in*/ *info, VEncoding /*in*/encoding, unsigned long /*in*/valueLength, const void /*in*/ *value ) = 0; + VDECL Decode( const VToken /*in*/*token, const VDecoderInfo /*in*/ *info, VEncoding /*in*/encoding, unsigned long /*in*/bufferLength, void /*in*/ *buffer, unsigned long /*out*/ *decodedLength ) = 0; + VDECL GetLastError( VResult /*out*/ *error, unsigned long /*in*/bufferSize, char /*out*/ *buffer ) = 0; + }; + + /*-----------------------------------------------------------------------------------------------*/ + //! Inteface for creating textual output, i.e Trace window + /*! + IFormatter is provided by the IPacketInspector. + */ + class IFormatter + { + public: + VDECL GetNumberBase( unsigned long /*out*/ *numberBase ) = 0; + VDECL IsSymbolic( unsigned long /*out*/ *symbolic ) = 0; + VDECL IsCompact( unsigned long /*out*/ *compact ) = 0; + + VDECL Format( const char /*in*/ *format, ... ) = 0; + VDECL FormatToken( const VToken /*in*/ *token ) = 0; + VDECL FormatString( const char /*in*/ *string ) = 0; + VDECL FormatInteger( long /*in*/ value, unsigned long /*in*/ valueLength, unsigned long /*in*/numberBase ) = 0; + VDECL FormatUnsigned( unsigned long /*in*/ value, unsigned long /*in*/ valueLength, unsigned long /*in*/numberBase ) = 0; + VDECL FormatDouble( double /*in*/ value, unsigned long /*in*/ fieldLength, unsigned long /*in*/decimalLength ) = 0; + VDECL FormatData( unsigned long /*in*/ dataLength, const void /*in*/ *data, unsigned long /*in*/numberBase ) = 0; + }; + + /*-----------------------------------------------------------------------------------------------*/ + //! The packet inspector is used to create textual output, i.e Trace window + /*! + The packet inspector can build a tree of protocol and protocol fields. + */ + class IPacketInspector + { + public: + VDECL BeginToken( VTokenId /*in*/ tokenId, unsigned long /*in*/ index, VInspectorInfo /*in*/ *info ) = 0; + VDECL SelectField( unsigned long /*in*/ fieldId, IFormatter /*out*/ **formatter ) = 0; + VDECL EndToken() = 0; + }; + + /*-----------------------------------------------------------------------------------------------*/ + //! Interface to retreive values of a value table + /*! + This interface must be implemented by the client. It is used by the IPBPacketLib + In ITokenDefinition::GetValueTableDefinition to push the values of a value table to the caller. + */ + class IValueTableDefinition + { + public: + //! Add a single definition of a value table entry + /*! + \param definition Points to a VValueDefinition structure, which contains the + value definition. It is valid until next call of AddValueDefinition + or until ITokenDefinition::GetValueTableDefinition returns + \return kOK to receive more values + */ + VDECL AddValueDefinition( VValueDefinition /*in*/ *definition ) = 0; + }; + +} // namespace NIPB + +//////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////// + +#endif // IPBPACKETAPI_H diff --git a/Modbus-DLL/include/VCSignalProtocolDLL/Stdafx.cpp b/Modbus-DLL/include/VCSignalProtocolDLL/Stdafx.cpp new file mode 100644 index 0000000..f59f158 --- /dev/null +++ b/Modbus-DLL/include/VCSignalProtocolDLL/Stdafx.cpp @@ -0,0 +1,9 @@ +/*------------------------------------------------------------------- + StdAfx.cpp + ------------------------------------------------------------------- + + (c) 2009 Vector Informatik GmbH. All rights reserved. + + ------------------------------------------------------------------- */ + +#include "StdAfx.h" diff --git a/Modbus-DLL/include/VCSignalProtocolDLL/Stdafx.h b/Modbus-DLL/include/VCSignalProtocolDLL/Stdafx.h new file mode 100644 index 0000000..0eacf26 --- /dev/null +++ b/Modbus-DLL/include/VCSignalProtocolDLL/Stdafx.h @@ -0,0 +1,21 @@ +/*------------------------------------------------------------------- + StdAfx.h + ------------------------------------------------------------------- + + (c) 2009 Vector Informatik GmbH. All rights reserved. + + ------------------------------------------------------------------- */ + +#pragma once + +// +// Library includes +// + +#include + +// +// Project specific includes +// + +#include "include/IPBPacketAPI.h" diff --git a/Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocol.cpp b/Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocol.cpp new file mode 100644 index 0000000..abc45b5 --- /dev/null +++ b/Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocol.cpp @@ -0,0 +1,481 @@ +/*------------------------------------------------------------------- + VCSignalProtocol.h + ------------------------------------------------------------------- + + (c) Vector Informatik GmbH. All rights reserved. + + ------------------------------------------------------------------- */ + +#include "StdAfx.h" +#include "VCSignalProtocol.h" + +//////////////////////////////////////////////////////////////////////// +// +// Implementaiton of VExampleSignalProtocol +// +//////////////////////////////////////////////////////////////////////// + + +//---------------------------------------------------------------------- +//! Constructor +/** +*/ +VCSignalProtocol::VCSignalProtocol() : + mProtocolId( NIPB::kNil ), + mContentId ( 0 ) +{ +} + + +//////////////////////////////////////////////////////////////////////// +// IProtocol +//////////////////////////////////////////////////////////////////////// + +/*--------------------------------------------------------------------*/ +//! Initialize the protocol +/*! + Register the protocol and its tokens at the IPB Packet Lib. + + \param protocolManager The protocol manager for this protocol. The pointer can be stored and is valid + during the whole lifetime of the IProtocol object. + \param networkModel The network model for this protocol. The pointer can be stored and is valid + during the whole lifetime of the IProtocol object. + \param modelCreator Define network model entities with this object. Pointer is only valid during this call. +*/ +VDEF VCSignalProtocol::Initialize( NIPB::IProtocolManager /*in*/ *protocolManager, NIPB::INetworkModel /*in*/ *networkModel, NIPB::INetworkModelCreator /*in*/ *modelCreator ) +{ + if (protocolManager == 0) return NIPB::kInvalidArg; + if (networkModel == 0) return NIPB::kInvalidArg; + if (modelCreator == 0) return NIPB::kInvalidArg; + + mProtocolManager = protocolManager; + + NIPB::ITokenDefinitionCreator *protocol = 0; + if (modelCreator->DefineProtocol( "vc-sig", &mProtocolId, &protocol ) == NIPB::kOK) + { + modelCreator->DefineProtocolField( protocol, "contentId", &mContentId, 0 ); + } + + return NIPB::kOK; +} + +/*--------------------------------------------------------------------*/ +//! Denitialize the protocol +/*! + \param protocolManager The protocol manager for this protocol. The pointer is invalid after Deinitialize. + \param networkModel The network model for this protocol. The pointer is invalid after Deinitialize. +*/ +VDEF VCSignalProtocol::Deinitialize( NIPB::IProtocolManager /*in*/ * /*protocolManager*/, NIPB::INetworkModel /*in*/ * /*networkModel*/ ) +{ + return NIPB::kOK; +} + +/*--------------------------------------------------------------------*/ +//! Returns the textual designator of the protocol +/*! + The designator is used to access the protocol in CAPL (via Nodelayer) or the GUI of CANoe/CANalyzer. + + \param bufferSize Length of 'buffer'. Must not > 0 + \param buffer The designator is copied to this buffer. Must not be 0 +*/ +VDEF VCSignalProtocol::GetDesignator( unsigned long /*in*/ bufferSize, char /*out**/ *buffer ) +{ + if (bufferSize == 0) return NIPB::kInvalidArg; + if (buffer == 0) return NIPB::kInvalidArg; + + strcpy_s( buffer, bufferSize, "vc-sig" ); + + return NIPB::kOK; +} + +/*--------------------------------------------------------------------*/ +//! Unique token identifier of the protocol +/*! + The VTokenId of the protocol is registerd on startup during defintion of the protocol token. + + \param identifier A pointer to a VTokenId, which retrieves the identifier. Must not be 0 +*/ +VDEF VCSignalProtocol::GetIdentifier( NIPB::VTokenId /*out*/ *identifier ) +{ + if (identifier == 0) return NIPB::kInvalidArg; + + *identifier = mProtocolId; + + return NIPB::kOK; +} + +/*--------------------------------------------------------------------*/ +//! Returns specific encoder for a token ID +/*! + The IEncoder is used to access a token within a IPacket. + + \param tokenId Token identifier for which the encoder is requested. + \param encoder Returns a pointer to the encoder. Must not be 0. +*/ +VDEF VCSignalProtocol::GetEncoder( NIPB::VTokenId /*in*/ tokenId, NIPB::IEncoder /*out*/ **encoder ) +{ + if (encoder == 0) return NIPB::kInvalidArg; + + if (tokenId == mContentId) + { + return mProtocolManager->GetEncoder( NIPB::kEncoderUnsignedLE, encoder ); + } + else + { + return NIPB::kEncodingNotSupported; + } +} + +/*--------------------------------------------------------------------*/ +//! Initialize a specific protocol during creation of a new packet +/*! + Use this method to setup a protocol within a packet. + + \param packet The packet where the protocol should be setup. Must not be 0. + \param protocolTypeId Type ID for a specific type of the protocol, i.e ARP request or ARP response + \param topProtocolToken Points to the top most protocol within the packet. + \param protocolToken This strucuture must be filled in InitProtocol. +*/ +VDEF VCSignalProtocol::InitProtocol( NIPB::IPacket /*in*/ *packet, NIPB::VTokenId /*in*/ /*protocolTypeId*/, const NIPB::VProtocolToken /*in*/ * /*topProtocolToken*/, NIPB::VProtocolToken /*out*/ *vc_sig ) +{ + if (mProtocolManager == 0) return NIPB::kInternalError; + if (packet == 0) return NIPB::kInvalidArg; + + NIPB::VResult result = NIPB::kError; + BYTE broadcastMacId[6] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; + + // + // Init Ethernet protocol + // + NIPB::VProtocolToken eth; + if ((result = mProtocolManager->GetProtocolByIndex( packet, 0, ð )) != NIPB::kOK) + { + return result; + } + SetTokenData( eth, NIPB::kEthDestination, 6, broadcastMacId ); // Set destination MAC ID to Broadcast + + // + // Init IPv4 protocol + // + NIPB::VProtocolToken ipv4; + if ((result = mProtocolManager->InitProtocol( packet, NIPB::kIPv4, 0, &ipv4 )) != NIPB::kOK) + { + return result; + } + SetTokenUnsigned( ipv4, NIPB::kIPv4Destination, 4, 0xFFFFFFFF ); // Set destination IP address to Broadcast + + // + // Init UDP protocol + // + NIPB::VProtocolToken udp; + if ((result = mProtocolManager->InitProtocol( packet, NIPB::kUDP, 0, &udp )) != NIPB::kOK) + { + return result; + } + SetTokenUnsigned( udp, NIPB::kUDPSource , 2, 40001 ); // Set source port + SetTokenUnsigned( udp, NIPB::kUDPDestination, 2, 40001 ); // Set destination port + + // + // Init VCSig protocol + // + if (result == (mProtocolManager->ResizeToken( &udp, kHeaderBitLength, 0 ))) + { + vc_sig->tokenId = mProtocolId; + vc_sig->protocol = this; + vc_sig->packet = packet; + vc_sig->headerBitOffset = udp.bitOffset; + vc_sig->headerBitLength = kHeaderBitLength; + vc_sig->bitOffset = udp.bitOffset + kHeaderBitLength; + vc_sig->bitLength = 0; + + SetTokenUnsigned( *vc_sig, mContentId, 4, 0xFFFFFFFF ); // Set invalid content ID + } + + return result; +} + +/*--------------------------------------------------------------------*/ +//! Complete the protocol at the end of creation/modification of a packet. +/*! + In this function the checksum or length field of a protocol can be calculated. + + \param packet The packet to complete + \param protocol Points to the protocol token for this protocol +*/ +VDEF VCSignalProtocol::CompleteProtocol( NIPB::IPacket /*in*/ *packet, const NIPB::VProtocolToken /*in*/ *vc_sig ) +{ + if (packet == 0) return NIPB::kInvalidArg; + if (vc_sig == 0) return NIPB::kInvalidArg; + if (vc_sig->tokenId != mProtocolId) return NIPB::kError; + + return NIPB::kOK; +} + +/*--------------------------------------------------------------------*/ +//! Parse a received packet. +/*! + The method is called, when a packet is parsed. During parsing the VProtocols structure is initialzed + with the protocol information, whiche are returnd with 'protocolToken'. + + \param packet The packet to parse. + \param topProtocolToken Points to the top most, already parsed protocol within the packet. + \param errorWriter Use this interface to returne parsing errors, i.e wrong checksum + \param nextProcotolId Return the VTokenId of the next protocol. + \param protocolToken Fill this strucutre to setup the VProtocols structure. +*/ +VDEF VCSignalProtocol::ParsePacket( NIPB::IPacket /*in*/ *packet, const NIPB::VProtocolToken /*in*/ *topProtocolToken, NIPB::IFormatter /*in*/ * /*errorWriter*/, NIPB::VTokenId /*out*/ *nextProcotolId, NIPB::VProtocolToken /*out*/ *protocolToken ) +{ + if (packet == 0 ) return NIPB::kInvalidArg; + if (nextProcotolId == 0 ) return NIPB::kInvalidArg; + if (protocolToken == 0 ) return NIPB::kInvalidArg; + if (topProtocolToken == 0 ) return NIPB::kInvalidArg; + if (topProtocolToken->tokenId != NIPB::kUDP) return NIPB::kInvalidArg; + + NIPB::VResult result = NIPB::kError; + const BYTE *packetData = 0; + ULONG packetLength = 0; + NIPB::VProtocols *protocols = 0; + + if ( ((result = packet->GetDataSize( &packetLength )) == NIPB::kOK) + && ((result = packet->GetDataPtr ( (void**)&packetData )) == NIPB::kOK) + && ((result = packet->GetProtocols( &protocols )) == NIPB::kOK) + ) + { + result = NIPB::kPacketParseError; + + if (BI2BY(topProtocolToken->bitLength) >= kHeaderLength) + { + protocolToken->tokenId = mProtocolId; + protocolToken->protocol = this; + protocolToken->packet = packet; + protocolToken->headerBitOffset = topProtocolToken->bitOffset; + protocolToken->headerBitLength = kHeaderBitLength; + protocolToken->bitOffset = kHeaderBitLength + topProtocolToken->bitOffset; + protocolToken->bitLength = topProtocolToken->bitLength - kHeaderBitLength; + + protocols->contentId = GetContentId( packetData, packetLength, *protocolToken ); + + *nextProcotolId = 0; + result = NIPB::kOK; + } + } + + return result; +} + +/*--------------------------------------------------------------------*/ +//! Return a token of a protocol. +/*! + The function must fill the 'token' with the information of the request 'tokenId'. + + \param protocolToken Points the the VProtocolToken for the protocol. + \param tokenId The identifier of the requested token. + \param token Points to a VToken, which must be fille by this function. +*/ +VDEF VCSignalProtocol::GetToken( const NIPB::VProtocolToken /*in*/ *protocolToken, NIPB::VTokenId /*in*/ tokenId, NIPB::VToken /*out*/ *token ) +{ + if (token == 0) return NIPB::kInvalidArg; + if (protocolToken == 0) return NIPB::kInvalidArg; + if (protocolToken->tokenId != mProtocolId) return NIPB::kTokenNotFound; + + if (tokenId == mContentId) + { + return MakeHeaderToken( protocolToken, mContentId, 0, 32, token ); + } + else if (tokenId == NIPB::kData) + { + return MakePayloadToken( protocolToken, NIPB::kData, 0, protocolToken->bitLength, token ); + } + else if (tokenId == NIPB::kHeader) + { + return MakeHeaderToken( protocolToken, NIPB::kHeader, 0, protocolToken->bitLength, token ); + } + else + { + return NIPB::kTokenNotFound; + } +} + +/*--------------------------------------------------------------------*/ +//! Build a tree with information of the protocol. +/*! + The function is used in CANoe/CANalyzer in the detail view of the trace window to build + a tree with protocols and fields. + + \param protocolToken Protocol token of this protocol + \param type Inspection type + \param inspector IPacketInspectore to create the output. +*/ +VDEF VCSignalProtocol::InspectProtocol ( const NIPB::VProtocolToken /*in*/ *protocolToken, NIPB::VInspectionType /*in*/ type, NIPB::IPacketInspector /*in*/ *inspector ) +{ + if (protocolToken == 0) return NIPB::kInvalidArg; + if (protocolToken->packet == 0) return NIPB::kInvalidArg; + if (inspector == 0) return NIPB::kInvalidArg; + + NIPB::VResult result = NIPB::kError; + const BYTE *packetData = 0; + ULONG packetLength = 0; + + if ( ((result = protocolToken->packet->GetDataSize( &packetLength )) == NIPB::kOK) + && ((result = protocolToken->packet->GetDataPtr ( (void**)&packetData )) == NIPB::kOK) ) + { + switch(type) + { + // + // Protocol Info column + // + case NIPB::kInspectionInfoColumn: + break; + // + // Detail View + // + case NIPB::kInspectionDetailTree: + // UDP + if (inspector->BeginToken( mProtocolId, 0, 0) == NIPB::kOK) + { + NIPB::IFormatter *formatter = 0; + if (inspector->SelectField( NIPB::kFieldLabel, &formatter ) == NIPB::kOK) + { + formatter->FormatString( "vc-sig" ); + } + + // Source port + ULONG val = GetContentId( packetData, packetLength, *protocolToken ); + FormatUnsigned( inspector, "contentId", mContentId, val, 4 ); + + inspector->EndToken(); + } + break; + } + } + + return result; +} + +//////////////////////////////////////////////////////////////////////// +// Methods +//////////////////////////////////////////////////////////////////////// + +/*--------------------------------------------------------------------*/ +//! Returns the content ID +/*! +*/ +ULONG VCSignalProtocol::GetContentId( const BYTE *packetData, ULONG packetLength, const NIPB::VProtocolToken &protocol ) +{ + ULONG offset = BI2BY(protocol.headerBitOffset); + + if (offset+4 < packetLength) + { + return *((ULONG*)&packetData[offset]); + } + else + { + return 0; + } +} + +/*--------------------------------------------------------------------*/ +//! Fill a VToken structure. +/*! +*/ +NIPB::VResult VCSignalProtocol::MakeHeaderToken( const NIPB::VProtocolToken /*in*/ *protocolToken, NIPB::VTokenId /*in*/ tokenId, ULONG /*in*/ offset, ULONG /*in*/ length, NIPB::VToken /*out*/ *token ) +{ + if (token == 0) return NIPB::kInvalidArg; + if (protocolToken == 0) return NIPB::kInvalidArg; + + token->protocol = protocolToken->protocol; + token->packet = protocolToken->packet; + token->tokenId = tokenId; + token->bitOffset = offset + protocolToken->headerBitOffset; + token->bitLength = length; + + return NIPB::kOK; +} + +/*--------------------------------------------------------------------*/ +//! Fill a VToken structure. +/*! +*/ +NIPB::VResult VCSignalProtocol::MakePayloadToken( const NIPB::VProtocolToken /*in*/ *protocolToken, NIPB::VTokenId /*in*/ tokenId, ULONG /*in*/ offset, ULONG /*in*/ length, NIPB::VToken /*out*/ *token ) +{ + if (token == 0) return NIPB::kInvalidArg; + if (protocolToken == 0) return NIPB::kInvalidArg; + + token->protocol = protocolToken->protocol; + token->packet = protocolToken->packet; + token->tokenId = tokenId; + token->bitOffset = offset + protocolToken->bitOffset; + token->bitLength = length; + + return NIPB::kOK; +} + +/*--------------------------------------------------------------------*/ +//! Format a unsigned token. +/*! +*/ +void VCSignalProtocol::FormatUnsigned( NIPB::IPacketInspector *inspector, LPCTSTR label, NIPB::VTokenId tokenId, ULONG value, ULONG valueLength ) +{ + if ((inspector) && (inspector->BeginToken( tokenId, 0, 0) == NIPB::kOK)) + { + NIPB::IFormatter *formatter = 0; + + if (inspector->SelectField( NIPB::kFieldLabel, &formatter ) == NIPB::kOK) + { + formatter->FormatString( label ); + } + if (inspector->SelectField( NIPB::kFieldValue, &formatter ) == NIPB::kOK) + { + formatter->FormatUnsigned( value, valueLength, 0 ); + } + inspector->EndToken(); + } +} + +/*--------------------------------------------------------------------*/ +//! Set the value of a unsigned token. +/*! +*/ +NIPB::VResult VCSignalProtocol::SetTokenUnsigned( NIPB::VProtocolToken &protocolToken, NIPB::VTokenId tokenId, ULONG valueLength, ULONG value ) +{ + if (protocolToken.protocol == 0) return NIPB::kInvalidArg; + + NIPB::VResult result = NIPB::kError; + NIPB::VToken token; + if ((result = protocolToken.protocol->GetToken( &protocolToken, tokenId, &token)) == NIPB::kOK) + { + NIPB::IEncoder *encoder = 0; + if (((result = token.protocol->GetEncoder( tokenId, &encoder )) == NIPB::kOK) && (encoder)) + { + result = encoder->Encode( &token, 0, NIPB::kEncodingUnsigned, valueLength, &value ); + } + } + + return result; +} + +/*--------------------------------------------------------------------*/ +//! Set the data of a data token. +/*! +*/ +NIPB::VResult VCSignalProtocol::SetTokenData( NIPB::VProtocolToken &protocolToken, NIPB::VTokenId tokenId, ULONG dataLength, const BYTE *data ) +{ + if (protocolToken.protocol == 0) return NIPB::kInvalidArg; + + NIPB::VResult result = NIPB::kError; + NIPB::VToken token; + if ((result = protocolToken.protocol->GetToken( &protocolToken, tokenId, &token)) == NIPB::kOK) + { + NIPB::IEncoder *encoder = 0; + if (((result = token.protocol->GetEncoder( tokenId, &encoder )) == NIPB::kOK) && (encoder)) + { + result = encoder->Encode( &token, 0, NIPB::kEncodingData, dataLength, data ); + } + } + + return result; +} + +//////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////// + diff --git a/Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocol.h b/Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocol.h new file mode 100644 index 0000000..25e00c7 --- /dev/null +++ b/Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocol.h @@ -0,0 +1,76 @@ +/*------------------------------------------------------------------- + VCSignalProtocol.h + ------------------------------------------------------------------- + + (c) Vector Informatik GmbH. All rights reserved. + + ------------------------------------------------------------------- */ + +#pragma once + +//////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////// + +/*--------------------------------------------------------------------*/ +//! Signal protocol class +/*! + This class implements the NIPB::IProtocol interface. It handles a + proprietary signal protocol for the Vector Conecept Car Ethernet + Network. + + The protocol is located within a UDP protocol and uses the UDP + ports 40001. The first 32bit of the UDP payload are the content ID. + The 32-bit content ID represents the header of this Signal protocol. + The payload of this protocol is interpreted by the DBC. +*/ +class VCSignalProtocol : + public NIPB::IProtocol +{ + static const ULONG kHeaderLength = 4; + static const ULONG kHeaderBitLength = 32; + + // + // Construction + // +public: + VCSignalProtocol(); + + // + // IProtocol + // +public: + VDECL Initialize ( NIPB::IProtocolManager /*in*/ *protocolManager, NIPB::INetworkModel /*in*/ *networkModel, NIPB::INetworkModelCreator /*in*/ *modelCreator ); + VDECL Deinitialize ( NIPB::IProtocolManager /*in*/ *protocolManager, NIPB::INetworkModel /*in*/ *networkModel ); + VDECL GetDesignator ( unsigned long /*in*/ bufferSize, char /*out**/ *buffer ); + VDECL GetIdentifier ( NIPB::VTokenId /*out*/ *identifier ); + VDECL GetEncoder ( NIPB::VTokenId /*in*/ tokenId, NIPB::IEncoder /*out*/ **encoder ); + VDECL InitProtocol ( NIPB::IPacket /*in*/ *packet, NIPB::VTokenId /*in*/ protocolTypeId, const NIPB::VProtocolToken /*in*/ *topProtocolToken, NIPB::VProtocolToken /*out*/ *protocolToken); + VDECL CompleteProtocol( NIPB::IPacket /*in*/ *packet, const NIPB::VProtocolToken /*in*/ *udp ); + VDECL ParsePacket ( NIPB::IPacket /*in*/ *packet, const NIPB::VProtocolToken /*in*/ *topProtocolToken, NIPB::IFormatter /*in*/ *errorWriter, NIPB::VTokenId /*out*/ *nextProcotolId, NIPB::VProtocolToken /*out*/ *protocolToken ); + VDECL GetToken ( const NIPB::VProtocolToken /*in*/ *protocolToken, NIPB::VTokenId /*in*/ tokenId, NIPB::VToken /*out*/ *token ); + VDECL InspectProtocol ( const NIPB::VProtocolToken /*in*/ *protocolToken, NIPB::VInspectionType /*in*/ type, NIPB::IPacketInspector /*in*/ *inspector ); + + // + // Methods + // +public: + ULONG GetContentId( const BYTE *packetData, ULONG packetLength, const NIPB::VProtocolToken &protocol ); + + static NIPB::VResult MakeHeaderToken( const NIPB::VProtocolToken /*in*/ *protocolToken, NIPB::VTokenId /*in*/ tokenId, ULONG /*in*/ offset, ULONG /*in*/ length, NIPB::VToken /*out*/ *token ); + static NIPB::VResult MakePayloadToken( const NIPB::VProtocolToken /*in*/ *protocolToken, NIPB::VTokenId /*in*/ tokenId, ULONG /*in*/ offset, ULONG /*in*/ length, NIPB::VToken /*out*/ *token ); + static void FormatUnsigned( NIPB::IPacketInspector *inspector, LPCTSTR label, NIPB::VTokenId tokenId, ULONG value, ULONG valueLength ); + + static NIPB::VResult SetTokenUnsigned( NIPB::VProtocolToken &protocolToken, NIPB::VTokenId tokenId, ULONG valueLength, ULONG value ); + static NIPB::VResult SetTokenData( NIPB::VProtocolToken &protocolToken, NIPB::VTokenId tokenId, ULONG dataLength, const BYTE *data ); + + // + // Attributes + // +private: + NIPB::VTokenId mProtocolId; //!< Token ID of this protocol + NIPB::VTokenId mContentId; //!< Token ID of the 'contentID' field + NIPB::IProtocolManager *mProtocolManager; +}; + +//////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////// diff --git a/Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocolAddOn.cpp b/Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocolAddOn.cpp new file mode 100644 index 0000000..5145d57 --- /dev/null +++ b/Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocolAddOn.cpp @@ -0,0 +1,86 @@ +/*------------------------------------------------------------------- + VCSignalProtocolAddOn.h + ------------------------------------------------------------------- + + (c) Vector Informatik GmbH. All rights reserved. + + ------------------------------------------------------------------- */ + +#include "StdAfx.h" +#include "VCSignalProtocolAddOn.h" +#include "VCSignalProtocol.h" + +//////////////////////////////////////////////////////////////////////// +// +// Implementaiton of VCSignalProtocolAddOn +// +//////////////////////////////////////////////////////////////////////// + +VCSignalProtocolAddOn *VCSignalProtocolAddOn::sInstance = NULL; + +//---------------------------------------------------------------------- +//! +/** +*/ +VCSignalProtocolAddOn::VCSignalProtocolAddOn() +{ + sInstance = this; +} + +//---------------------------------------------------------------------- +//! +/** +*/ +VCSignalProtocolAddOn& VCSignalProtocolAddOn::Instance() +{ + if (sInstance == 0) throw; + + return *sInstance; +} + +//////////////////////////////////////////////////////////////////////// +// IProtocolAddOn +//////////////////////////////////////////////////////////////////////// + +//---------------------------------------------------------------------- +//! +/** +*/ +VDEF VCSignalProtocolAddOn::CreateProtocol( const char /*in*/ *protocolSymbol, NIPB::IProtocol /*out*/ **protocol ) +{ + if (protocol == 0) return NIPB::kInvalidArg; + if (protocolSymbol == 0) return NIPB::kInvalidArg; + + *protocol = new VCSignalProtocol(); + + return NIPB::kOK; +} + +//---------------------------------------------------------------------- +//! +/** +*/ +VDEF VCSignalProtocolAddOn::ReleaseProtocol( NIPB::IProtocol /*in*/ *protocol) +{ + VCSignalProtocol *prot = dynamic_cast( protocol ); + delete prot; + + return NIPB::kOK; +} + +//////////////////////////////////////////////////////////////////////// +// Public Methods +//////////////////////////////////////////////////////////////////////// + +//---------------------------------------------------------------------- +//! +/** +*/ +void VCSignalProtocolAddOn::Release() +{ + delete this; +} + +//////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////// + diff --git a/Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocolAddOn.h b/Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocolAddOn.h new file mode 100644 index 0000000..dba4fb1 --- /dev/null +++ b/Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocolAddOn.h @@ -0,0 +1,52 @@ +/*------------------------------------------------------------------- + VCSignalProtocolAddOn.h + ------------------------------------------------------------------- + + (c) Vector Informatik GmbH. All rights reserved. + + ------------------------------------------------------------------- */ + +#pragma once + +//////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////// + +/*--------------------------------------------------------------------*/ +//! Factory for the VCSignalProtocol +/*! + This class is registered at the NIPB::IAddOnRegistrar registrar. It + is responsible to create a instance of the VCSignalProtocol, when needed. +*/ +class VCSignalProtocolAddOn : + public NIPB::IProtocolAddOn +{ + // + // Construction + // +public: + VCSignalProtocolAddOn(); + + static VCSignalProtocolAddOn& Instance(); + + // + // IProtocolAddOn + // +public: + VDECL CreateProtocol( const char /*in*/ *protocolSymbol, NIPB::IProtocol /*out*/ **protocol ); + VDECL ReleaseProtocol( NIPB::IProtocol /*in*/ *protocol); + + // + // Methods + // +public: + void Release(); + + // + // Attributes + // +private: + static VCSignalProtocolAddOn *sInstance; +}; + +//////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////// diff --git a/Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocolDLL.cpp b/Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocolDLL.cpp new file mode 100644 index 0000000..b1bb99c --- /dev/null +++ b/Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocolDLL.cpp @@ -0,0 +1,69 @@ +/*------------------------------------------------------------------- + VCSignalProtocolDLL.cpp + ------------------------------------------------------------------- + + (c) 2009 Vector Informatik GmbH. All rights reserved. + + ------------------------------------------------------------------- */ + +#include "StdAfx.h" +#include "VCSignalProtocolDLL.h" +#include "VCSignalProtocolAddOn.h" + +//////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////// + +/*--------------------------------------------------------------------*/ +//! Reply new ProtocolManager instance +/*! + This function is called on loading of this DLL by the IPB Packet API. + It must register the protocol of this DLL. +*/ +STDAPI DllRegisterAddOn( NIPB::IAddOnRegistrar* registrar ) +{ + if (registrar == NULL) + { + return E_INVALIDARG; + } + + // + // register the signal protocol at the IPB Packet Lib. For the protocol + // UDP with source port 40001 is used. + // + if (registrar->RegisterProtocol( "vc-sig", new VCSignalProtocolAddOn(), "udp", 40001, 0xFFFFFFFF ) != NIPB::kOK) + { + VCSignalProtocolAddOn::Instance().Release(); + return NIPB::kError; + } + + return S_OK; +} + +/*--------------------------------------------------------------------*/ +//! Return interface version +/*! + This DLL must support a proper version of the IBP Packet API. +*/ +STDAPI DllGetApiVersion( unsigned long /*out*/*major, unsigned long /*out*/*minor, unsigned long /*out*/*structVersion ) +{ + if (major) + { + *major = IPB_PACKET_LIB_INTERFACE_VERSION_MAJOR; + } + + if (minor) + { + *minor = IPB_PACKET_LIB_INTERFACE_VERSION_MINOR; + } + + if (structVersion) + { + *structVersion = IPB_PACKET_LIB_STRUCT_VERSION; + } + + return S_OK; +} + +//////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////// + diff --git a/Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocolDLL.def b/Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocolDLL.def new file mode 100644 index 0000000..696554f --- /dev/null +++ b/Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocolDLL.def @@ -0,0 +1,7 @@ +; VCSignalProtocolDLL.def : Declares the module parameters. + +LIBRARY "VCSignalProtocolDLL.DLL" + +EXPORTS + DllGetApiVersion PRIVATE + DllRegisterAddOn PRIVATE diff --git a/Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocolDLL.h b/Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocolDLL.h new file mode 100644 index 0000000..f4c8d98 --- /dev/null +++ b/Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocolDLL.h @@ -0,0 +1,10 @@ +/*------------------------------------------------------------------- + VCSignalProtocolDLL.h + ------------------------------------------------------------------- + + (c) 2009 Vector Informatik GmbH. All rights reserved. + + ------------------------------------------------------------------- */ + +#pragma once + diff --git a/Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocolDLL.sln b/Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocolDLL.sln new file mode 100644 index 0000000..82a21b5 --- /dev/null +++ b/Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocolDLL.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VCSignalProtocolDLL", "VCSignalProtocolDLL.vcproj", "{0015F4D0-0830-408B-97FB-D9748FD43623}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {0015F4D0-0830-408B-97FB-D9748FD43623}.Debug|Win32.ActiveCfg = Debug|Win32 + {0015F4D0-0830-408B-97FB-D9748FD43623}.Debug|Win32.Build.0 = Debug|Win32 + {0015F4D0-0830-408B-97FB-D9748FD43623}.Release|Win32.ActiveCfg = Release|Win32 + {0015F4D0-0830-408B-97FB-D9748FD43623}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocolDLL.vcproj b/Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocolDLL.vcproj new file mode 100644 index 0000000..b3e7b61 --- /dev/null +++ b/Modbus-DLL/include/VCSignalProtocolDLL/VCSignalProtocolDLL.vcproj @@ -0,0 +1,261 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +