Автор:
revtor
It took a while but the new NCS Dummy version is nearing completion. Because I only have access to a limited amount of BMW vehicles, a public beta of the upcoming version is released first.[/i]
What is NCS Dummy? NCS Dummy is an application which should make life with NCS Expert a bit easier. NCS Dummy parses "FSW_PSW.TRC" trace files and "NETTODAT.TRC" trace files, and displays all possible parameters and even control unit (ECU) data for each function. For a history of the NCS Dummy development, refer to the
old thread.
NCS Dummy only parses NCS Expert data files and trace files. NCS Dummy doesn't actually use NCS Expert, it doesn't connect to the car and it doesn't make changes to any file apart from the ones you explicitly chose to export. In other words, it's safe to use. If you are interested in finding out what coding functionality a certain module offers, you can safely export its module or trace function to a human readable text file with NCS Dummy. NCS Dummy only requires access to the NCS Expert DATEN folder to build the relations between functions and parameters.
Download NCS Dummy 0.4.0.0 beta (226 kB)
Requirements:
[*:1zs5yuh0]Microsoft Windows 2000 or later
[*:1zs5yuh0]Microsoft .NET Framework 3.5 Service Pack 1 (
link)
[*:1zs5yuh0]Local or remote access to the NCS Expert "DATEN" folderIf you find bugs or experience any problems with this version, please let me know in this thread or contact me at

. When you report bugs, always include the NCS Dummy log (right click on the log and select "Copy Log" from the menu to put the entire log on the clipboard) and if applicable the keyword trace file ("FSW_PSW.TRC") or nettodata trace file ("NETTODAT.TRC") you are trying to parse. It also helps to include the selected NCS Expert *.C?? module file - my version may differ from yours.
Even if the application works fine for you I do welcome feedback, suggestions and ideas for future functionality, and you can help development by sending keyword trace files ("FSW_PSW.TRC") and nettodata trace files ("NETTODAT.TRC"). The more real world data I have, the better I can test the application. If you send trace files, please always clearly specify the chassis and module or even better rename the file(s) to "chassis-module-filename.trc" (for example "E31-GM2.C25-NETTODAT.TRC"). Thanks in advance!
Please keep this thread on-topic - NCS Dummy only! Questions concerning where to get or the usage of NCS Expert, what parameters to change to achieve certain functionality on your car,... will not be answered.
What's new?What's new since the last public release - version 0.2.1.1? Actually a lot... Version 0.4.0.0 is rewritten almost entirely from scratch. The major new features are:
[*:1zs5yuh0]New and much improved parser for the NCS Expert *.C?? module files: Where the previous versions used masks to locate and identify data in the module files, the new parser knows exactly what it is reading and how to interpret it. No more guessing - it should be balls-on accurate.
[*:1zs5yuh0]Ability to display control unit (ECU) data: This feature may be of use only to a small number of users, but it's what makes NCS Dummy extremely powerful. NCS Dummy can tell you what data to expect at a certain address location in the module's coding memory and to a limited extent also what it means. This is a great aid if you intend to write custom data to a module to accomplish features impossible with the classic "FSW_PSW.MAN" manipulation.
[*:1zs5yuh0]Support for nettodata trace files ("NETTODAT.TRC"): Because the new version is able to handle control unit (ECU) data, it can also parse nettodata trace files. Nettodata trace files often contain more information than the dumbed-down keyword trace files ("FSW_PSW.TRC"). Nettodata trace files are a more reliable representation of the control unit's coding. Keywords may change between NCS Expert "DATEN" versions, but the binary data always remains the same.
[*:1zs5yuh0]The new version maps nettodata and keyword trace files against the NCS Expert module file. The old versions used the module file only as reference and ignored them for trace differences. That makes the new version less tolerant for module version mismatches. Make sure you select the same chassis and module as used in NCS Expert to generate the trace file. You can still compare trace files from different modules, but expect a lot of unresolved functions and parameters.
[*:1zs5yuh0]Automatic detection of chassis and module from the keyword or nettodata trace filename. If you rename your trace files to a "chassis-module-filename.trc" structure (for example "E31-EKM.C25-FSW_PSW.TRC"), NCS Dummy will automatically set the chassis and module (chassis "E31" and module "EKM.C25" in the example). This should save time when working with many trace files.
[*:1zs5yuh0]Full export functionality for the second trace file. In previous versions the second trace file could only be used for the differences.For existing users it may be worth mentioning that several items were renamed to be more in line with BMW Ediabas terminology. "Parameter names" are now "function keywords" (from FSW - Funktionschl?sselw?rt) and "parameter values" became "parameter keywords" (from PSW - Parameterschl?sselw?rt). Another minor change is the path to NCS Expert. Previous versions required the path to the NCS Expert installation root (default: "C:\NCSEXPER\"). Version 0.4.0.0 requires the path to the NCS Expert "DATEN" folder (default: "C:\NCSEXPER\DATEN\"). This change should only affect those who set the path hardcoded through the command-line parameters.
Understanding the NCS Dummy outputThere are three practical scenarios of use for NCS Dummy:[*:1zs5yuh0]
Module Functions: Find out what coding functionality a module offers. NCS Dummy shows all functions and their possible parameters.
[*:1zs5yuh0]
Trace Functions: Same as the module functions, but with indication of the selected parameters in the loaded trace file.
[*:1zs5yuh0]
Trace Differences: Compare two trace files to see the differences.In the default mode, without control unit (ECU) data, the output is mostly identical to the previous versions. Below is and excerpt from the module functions output of the E31 "LKM2.C25" Lamp Monitor module with translations enabled.
Generated with NCS Dummy version 0.4.0.0 beta 1 — copyright © 2010 revtor software
Output : Module Functions
Chassis : E31
Module : LKM2.C25
FUNCTION KEYWORD FUNCTION KEYWORD TRANSLATION
PARAMETER KEYWORD PARAMETER KEYWORD TRANSLATION
KALTUEBERWACHUNG COLD MONITORING
nsl_li_re left and right rear fog lights
nsl_li left rear fog light
FEHLER_3.BREMSLEUCHTE THIRD BRAKE LIGHT FAILURE
nicht_melden do not report
melden report
NSW_BEI_ABBLENDLICHT FRONT FOG LIGHTS SIMULTANEOUSLY WITH LOW BEAMS
aktiv active
nicht_aktiv not active
KALTUEBERWACHUNG_NSW COLD MONITORING FRONT FOG LIGHTS
nicht_aktiv not active
aktiv active
The "function keyword" column contains a list of all coding functions supported by the module. The indented "parameter keyword" column shows the possible parameters for each function. Functions are always in UPPERCASE while parameters are always in lowercase. For example "NSW_BEI_ABBLENDLICHT" has two possible parameters; "aktiv" and "nicht_aktiv". On the right are the English translations for the functions and parameters. You may notice a lot blanks in the translations when you parse your own modules. That's because the translations are a community effort and far from complete. You may also notice that the translations not always really clarify the functions and or parameters. The function and parameter keywords are reused in many modules and therefore the translations can't be too specific. The translations can be turned of by clearing the "Translations" checkbox. A real description of each function and parameter is only available in the original source codes from BMW. I'd love to include these descriptions in NCS Dummy, but sadly I don't have access to these source codes...
The trace functions output shown below is very similar. The only difference is the asterisk (*) in the S(elected) column to indicate which parameter is selected in the loaded keyword or nettodata trace file. This is probably the most used output to see what's possible starting from your current configuration.
Generated with NCS Dummy version 0.4.0.0 beta 1 — copyright © 2010 revtor software
Output : Trace Functions
Chassis : E31
Module : LKM2.C25
Trace file : "C:\NCSEXPER\WORK\revtor\E31-LKM2.C25-FSW_PSW.TRC" (FSW/PSW)
S FUNCTION KEYWORD FUNCTION KEYWORD TRANSLATION
PARAMETER KEYWORD PARAMETER KEYWORD TRANSLATION
KALTUEBERWACHUNG COLD MONITORING
* nsl_li_re left and right rear fog lights
nsl_li left rear fog light
FEHLER_3.BREMSLEUCHTE THIRD BRAKE LIGHT FAILURE
nicht_melden do not report
* melden report
NSW_BEI_ABBLENDLICHT FRONT FOG LIGHTS SIMULTANEOUSLY WITH LOW BEAMS
* aktiv active
nicht_aktiv not active
KALTUEBERWACHUNG_NSW COLD MONITORING FRONT FOG LIGHTS
nicht_aktiv not active
* aktiv active
If you load a keyword trace file with a non-matching chassis and/or module, you may notice an extra column U(nresolved) with question marks (?) for each function and parameter that does not occur in the loaded module. Unresolved functions and parameters almost always indicate module mismatches. Even if the module is seemingly correct, the trace file may have been generated with a younger or older module file which differs from the one NCS Dummy uses.
Another important feature of NCS Dummy is the trace file comparison (trace differences). An excerpt from the output of the differences between two E31 "EKM.C25" Body Electronics modules is displated below.
Generated with NCS Dummy version 0.4.0.0 beta 1 — copyright © 2010 revtor software
Output : Trace Differences
Chassis : E31
Module : EKM.C25
Trace file 1 : "C:\NCSEXPER\WORK\revtor\E31-EKM.C25-FSW_PSW.TRC" (FSW/PSW)
Trace file 2 : "C:\NCSEXPER\WORK\cc66541\E31-EKM.C25-FSW_PSW.TRC" (FSW/PSW)
Differences : Yes
1 2 FUNCTION KEYWORD FUNCTION KEYWORD TRANSLATION
PARAMETER KEYWORD PARAMETER KEYWORD TRANSLATION
STEIGUNG_EINSPRITZ_KENNL FUEL INJECTION CHARACTERISTIC CURVE
* s70b56 s70b56 5.6-liter v12
* m60b40 m60b40 4.0-liter v8
OFFSET_GESAMTWEGSTRECKE TOTAL DISTANCE OFFSET
* 0_km 0 kilometers
SCHWELLE_UEBERDREHZAHL ENGINE SPEED THRESHOLD
* 6700_u/min 6700 revolutions per minute
* 6400_u/min 6400 revolutions per minute
ZYLINDER_ZAHL CYLINDER COUNT
* 8_zylinder 8-cylinder
* 12_zylinder 12-cylinder
Note that only the differences are shown in this output. Refer to the module functions and trace functions for a complete reference of the available functions and parameters. The asterisks (*) in column "1" show the selected parameters in the first trace file, column "2" those of the second trace file. Some functions may not be present in both trace files. For example "OFFSET_GESAMTWEGSTRECKE" is only available in the second trace file.
You may notice that the log sometimes indicates more fetched data (groups, properties,...) than actually visible in the output. This is because without "Control unit data" checked NCS Dummy outputs in keyword trace compatible mode and cannot display the additional data. Ultimately this may even result in a trace differences output which says "Yes" for "Differences" but shows no differences. Does this mean the output is incorrect? No. While both trace files contain differences you cannot change these differences through the classic "FSW_PSW.MAN" manipulation because the differences cannot be represented in a keyword trace file.
To view the full details, tick the "Control unit data" checkbox. Below is an excerpt from the module functions of the E31 "EKM.C25" Body Electronics module. The translations were disabled for this example to keep the width reasonable.
Generated with NCS Dummy version 0.4.0.0 beta 1 — copyright © 2010 revtor software
Output : Module Functions
Chassis : E31
Module : EKM.C25
M FUNCTION KEYWORD ADDRESS MASK
PARAMETER KEYWORD DATA MASKED
Variable_Daten1 00000058
?????????????????????????????????????????????????????????????????????????????????
<UNBELEGT> 00000058 FF
<initwert> FF,FF FF,FF
Varianten 00000066
?????????????????????????????????????????????????????????????????????????????????
VERBRAUCH_EINHEIT 00000066 03
l/100km 00 00
mpg_us 01 01
mpg_uk 02 02
km/l 03 03
WEG_REICHWEITE 00000066 04
km 00 00
mls 01 04
# K_ZAHL 0000006E FF
4534_imp/km 11 11
alpina 11 11
# K_ZAHL 0000006F FF
4534_imp/km B6 B6
alpina 4E 4E
TACHO_SKALA_ENDWERT 0000007E FF
300_km/h_ece/jpn C8 C8
280_km/h_ece/jpn B4 B4
340_km/h_alpina F0 F0
TANK_KENNLINIE_WINKEL 000000D0 FF
90_l_literskala 00,33,56,75,AD,E6,F6,FF 00,33,56,75,AD,E6,F6,FF
90_l_prozentskala 00,33,5E,8F,CA,E6,F6,FF 00,33,5E,8F,CA,E6,F6,FF
Checksum 000000FD
?????????????????????????????????????????????????????????????????????????????????
CHECKSUM_1 000000FD FF
CHECKSUM_2 000000FE FF
The horizontal bars divide the output in groups. The title of the group ("Variable_Daten1" for the first one, "Varianten" for the second,...) is just above the bar (let me know if there's a preference to have the title below the bar). Groups always run up to the next group or the end of file. Group titles are usually in camel-case setting them apart from the uppercase function keywords and lowercase parameter keywords, but that's not a rule. Groups have no functionality other than splitting the output depending on context. Groups cannot be coded or modified in any way.
Some function and parameter keywords are surrounded by brackets (for example "
"). This means those keywords are not really true keywords - they cannot be used in keyword trace files. These fake keyword indicate fields the keyword trace files cannot represent. The "" functions (which would show "" if the translations were enabled) indicate unoccupied locations or blocks in the module's coding memory. This does not always mean these memory locations aren't used at all, but the data in these locations cannot be represented by even the module file. The "" function always comes with a "" parameter (""). "" shows the initial data that is stored in the unoccupied locations for virgin modules.
Function "K_ZAHL" occurs twice in the list. This is not an error, although this situation is relatively rare and only found in older modules. This is an example of a multiword function where a single function has data stored in two different locations of the module's memory. Multiword functions are indicated by a number sign sign (#) in the M(ultiword) column. Note that not all functions tagged by NCS Dummy are true multiword functions. For example function "NICHT_BELEGT" ("NOT ASSIGNED") can occur multiple times but the individual fields have no relation with each other and falsely trigger the multiword tag. This does not affect the reliability of the output. The multiword indication is only there for your convenience to quickly spot potential multiword functions.
Functions "CHECKSUM_1" and "CHECKSUM_2" do not have parameters. Basically this means any value is possible - there are no presets. These functions cannot be set through classic "FSW_PSW.MAN" manipulation. NCS Dummy refers to parameter-less functions as properties.
The "address", "data", "mask" and "masked" column are tied together and represent the control unit (ECU) data. Please note all values in these columns are hexadecimal values! The "address" is a 32 bit (4 byte) value representing the location in the module's coding memory where the function's data can be found. The "data" is the actual data that can be stored in this address location (modules don't store data like "aktiv" and "nicht_aktiv" but binary values). The data length can vary but the smallest unit is 8 bit (1 byte) and the data is always a multiple of that. Many functions don't even need 8 bit to store their parameter. For example, for activ and not active two states (1 bit) suffices. This is where the "mask" comes in. The "mask" allows a single byte to be shared amongst multiple functions. The "masked" value is the "data" value with the "mask" applied. This value is very useful when working directly in the binary (hexadecimal) data.
Take for example following excerpt from the nettodata trace file ("NETTODAT.TRC") of an E31's EKM module:
B 00000050,0010,ED,96,FF,FF,F4,F4,33,A3,FF,FF,FF,FF,FF,FF,FF,FF
B 00000060,0010,FF,FF,FF,FF,FF,FF,D6,6F,BF,99,80,FF,D8,A0,11,B6
B 00000070,0010,EE,49,00,00,6B,4B,75,C3,77,21,E2,CC,10,10,C8,50[*:1zs5yuh0]Nettodata identifier
[*:1zs5yuh0]Address location
[*:1zs5yuh0]Number of data bytes starting at this address
[*:1zs5yuh0]Data byteLet's find the value of "VERBRAUCH_EINHEIT" in the nettodata trace file. "VERBRAUCH_EINHEIT" is at address "00000066". That's the sixth position at base address "00000060" (always start counting at 0). At this location in the nettodata trace file is byte "D6". But "D6" is not in the list of available parameters for "VERBRAUCH_EINHEIT" - only "00", "01", "02" and "04" are. That's because this byte is shared amongst multiple functions. Refer to the "mask" - "03". Just do a bitwise AND operation on the byte with the mask. This results to "02" (nettodata AND mask = D6 AND 03 = 02), which according to the "masked" column is the "mpg_uk" parameter. If you are not fimiliar with bitwise operations on hexadecimal values, here's what happens in binary:
D6 = 11010110 (nettodata)
03 = 00000011 (mask)
????????????? (AND)
02 = 00000010 (masked)
Simply put only the bits that are true (1) in the mask go to the result. "WEG_REICHWEITE" shares the same byte ("D6" at "00000066") but obviously has a different mask to differentiate it from "VERBRAUCH_EINHEIT". The bitwise AND gives "04" (nettodata AND mask = D6 AND 04 = 04):
D6 = 11010110 (nettodata)
04 = 00000100 (mask)
????????????? (AND)
04 = 00000100 (masked)
Again, look up "04" in the "masked" column for "WEG_REICHWEITE" - it's set to parameter "mls". Simple, not?
What if you want to change "VERBRAUCH_EINHEIT" from "mpg_uk" to "mpg_us" in the nettodata? First clear the current nettodata by performing a bitwise NAND (NOT AND) with the mask "03" against the nettodata "D6" (nettodata NAND mask = D6 NAND 03 = D4):
D6 = 11010110 (nettodata)
03 = 00000011 (mask)
????????????? (NAND)
D4 = 11010100 (cleared_nettodata)
The NAND operation allows all bits outside the mask to pass and sets all bits in the mask to false (0). Then perform a bitwise OR with the masked data "01" against the cleared nettodata "D4" (cleared_nettodata OR masked = D4 OR 01 = D5):
D4 = 11010100 (cleared_nettodata)
01 = 00000001 (masked)
????????????? (OR)
D5 = 11010101 (new_nettodata)
Or simplified: (nettodata NAND mask) OR masked = (D6 NAND 03) OR 01 = D5. In other words, to change "VERBRAUCH_EINHEIT" from "mpg_uk" to "mpg_us" in the nettodata, byte "D6" at position "00000066" must be changed to "D5".
For some keywords the mask is shorter than the data. "TANK_KENNLINIE_WINKEL" for example has parameter data of 8 bytes length, but the mask is only one byte long. Simply apply the mask to each byte in the data. The mask can also contain multiple bytes. In that case cycle through the mask.
You may wonder about the purpose of knowing and modifying the nettodata if you could change it as well in a much more readable format through the classic "FSW_PSW.MAN" manipulation. Correct, but the above are just simple examples to help you understand nettodata manipulation. The real power of nettodata manipulation comes only with more advanced fields. Take for example the "TACHO_SKALA_ENDWERT" function. According to the nettodata ("C8" at address "0000007E") it's set to "300_km/h_ece/jpn". The other parameters indicate one can choose between a 280 km/h, 300 km/h and 340 km/h speedometer. What if you wanted to manufacture your own instrument cluster dials with a speedometer that goes up to 320 km/h without affecting the accuracy of the speedometer? You can't choose 320 km/h from the list of available parameters, but the nettodata allows you to do stuff which is simply impossible through the classic "FSW_PSW.MAN" manipulation. The only problem with the nettodata is understanding what the bytes mean. Sometimes it's obvious, in other cases you will get nowhere without detailed documentation which is probably only available to the module developers/engineers at BMW. Let's give the speedometer a try. Convert each parameter's data to a decimal value for easier interpretation:
C8 = 200
B4 = 180
F0 = 240
Sadly this doesn't directly translate to 300, 280 and 340 but apparently the differences between the numbers are the same. Just add 100 and you get the real speeds. So for a 320 km/h speedo, the decimal value would be 320 - 100 = 220, or hexadecimal value "DC". Write "DC" to the module's coding memory at address "0000007E" and your speedometer has effectively become a 320 km/h speedometer! This very simple example shows how the nettodata allows you to go outside the boundaries of the classic "FSW_PSW.MAN" manipulation.
Obviously, if all you want to do is view what data is set in a nettodata trace file ("NETTODAT.TRC") and indirectly in a keyword trace file ("FSW_PSW.TRC"), you don't have to perform the bitwise operations all by hand. Just use the NCS Dummy "trace function" and NCS Dummy does all the work for you:
Generated with NCS Dummy version 0.4.0.0 beta 1 — copyright © 2010 revtor software
Output : Trace Functions
Chassis : E31
Module : EKM.C25
Trace file : "C:\NCSEXPER\WORK\cc66541\E31-EKM.C25-NETTODAT.TRC" (Nettodata)
M C S FUNCTION KEYWORD ADDRESS MASK
PARAMETER KEYWORD DATA MASKED
Variable_Daten1 00000058
?????????????????????????????????????????????????????????????????????????????????
<UNBELEGT> 00000058 FF
* <initwert> FF,FF FF,FF
Varianten 00000066
?????????????????????????????????????????????????????????????????????????????????
VERBRAUCH_EINHEIT 00000066 03
l/100km 00 00
mpg_us 01 01
* mpg_uk 02 02
km/l 03 03
WEG_REICHWEITE 00000066 04
km 00 00
* mls 01 04
# K_ZAHL 0000006E FF
* 4534_imp/km 11 11
alpina 11 11
# K_ZAHL 0000006F FF
* 4534_imp/km B6 B6
alpina 4E 4E
TACHO_SKALA_ENDWERT 0000007E FF
300_km/h_ece/jpn C8 C8
280_km/h_ece/jpn B4 B4
340_km/h_alpina F0 F0
+ * <tats?chlich> DC DC
TANK_KENNLINIE_WINKEL 000000D0 FF
90_l_literskala 00,33,56,75,AD,E6,F6,FF 00,33,56,75,AD,E6,F6,FF
* 90_l_prozentskala 00,33,5E,8F,CA,E6,F6,FF 00,33,5E,8F,CA,E6,F6,FF
Checksum 000000FD
?????????????????????????????????????????????????????????????????????????????????
CHECKSUM_1 000000FD FF
+ * <tats?chlich> AD AD
CHECKSUM_2 000000FE FF
+ * <tats?chlich> 62 62
The above is actually a bit faked, but it shows what we would get if we had actually changed the speedometer as described above. Since there's no parameter to assign with value "DC", NCS Dummy shows it as "" ("" in the translations) - the actual value of the memory position. These custom values are also indicated with a plus sign (+) in the C(ustom) column. Even without modifying the nettodata, you may end up with several of these custom parameters when parsing nettodata trace files ("NETTODAT.TRC"). This is perfectly normal.
Known issues
NCS Dummy is not able to read module "KMBI_E38.C12" (chassis E38, E39, E53) and "ARS.C0E" (chassis E60 and E65). There is an inconsistency in these two files I cannot explain. I can easily change NCS Dummy to support these two modules, but until I know what the inconsistency means I prefer to disable support for these. If you do have a car with one of these modules (needs to be exactly the same version - "KMBI_E38.C11" for example works just fine) and can pull "FSW_PSW.TRC" and "NETTODAT.TRC" trace file from it, please contact me. Thanks!
Hints and tips
The application should be pretty much straighforward to use, but here are a few hints and tips that might make using NCS Dummy easier or explain certain behavior:
[*:1zs5yuh0]When exporting to a text file in NCS Dummy, you can double click on the log line saying "Successfully exported ..." to open the file immediatly in the text editor assigned with the *.txt extension. You can even automate this behavior by adding /autoopenexported=1 to the command-line arguments. The easiest way to do this is by creating a shortcut to the NCS Dummy executable ("NcsDummy.exe") and add the command-line argument to the target properties.
[*:1zs5yuh0]The default folder where NCS Dummy looks for the NCS Expert DATEN is "C:\NCSEXPER\DATEN\". If yours is in a different location and you don't want to set it manually on each application launch, add command-line argument /ncsexpertdatenpath="path" (for example /ncsexpertdatenpath="D:\EDIABAS\NCSEXPER\DATEN\"). NCS Dummy supports remote locations (network shares) like \\remotecomputer\daten\.
[*:1zs5yuh0]By default NCS Dummy has "Control unit data" unchecked. If you work a lot with nettodata and wish to check this option automatically each time you launch the application, add /exportecudata=1 to the command-line arguments.
[*:1zs5yuh0]When using trace files with "chassis-module-filename.trc" filename structures (for example "E31-GM2.C25-NETTODAT.TRC"), NCS Dummy will automatically set the appropriate chassis and module. Sometimes this behavior may hinder working with different module versions. You can temporarily disable the automatic detection by holding down the shift key while clicking "Browse...". To disable the feature permanently, add /autodetectchassismodule=0 to the command-line arguments.
[*:1zs5yuh0]The trace functions can also export to a keyword trace file ("FSW_PSW.TRC"). this doesn't make much sense when starting from a keyword trace file, but can be used to create one from a nettodata trace file ("NETTODAT.TRC"). A situation where this can be handy is when existing keyword trace files suddenly contain unresolved keywords after updating the NCS Expert DATEN to a newer version. Creating new keyword trace files directly from the nettodata resolves this issue. That's why it's strongly recommended to always keep a copy of the "NETTODAT.TRC" trace files as backup.
[*:1zs5yuh0]When exporting to a sorted text files with "Control unit data" enabled, no groups will be included. Groups only make sense in the original order.
[*:1zs5yuh0]If you wish to compare trace files from different module revisions, it's best to load the one with the highest module revision number as trace file 1.
[*:1zs5yuh0]Because the default mode, without control unit (ECU) data, cannot export all data it is possible to get a file comparison (trace differences) where the log and header indicate differences, but no differences are shown. This is not incorrect behavior - just a limitation of the output without control unit (ECU) data. Tick the "Control unit data" checkbox for a detailed export which will include the differences.Quick reference for NCS Expert
Reading "FSW_PSW.TRC" and "NETTODAT.TRC" trace files with NCS Expert
Despite people's claims of how dangerous NCS Expert is, reading FSW/PSW trace files from a car is perfectly safe as long as you keep your head at the job. NCS Expert's default setting is to code, which we definitely don't want (at this point), but once the job type is changed to reading the program is harmless. You don't need to take special precautions for the car. Reading trace files takes just seconds, so there's absolutely no need for an external power supply. Low battery voltages cannot cause damage, but may of course drop the connection so you are unable to complete the trace file reading. Thus make sure your batteries are ok and properly charged.
Before you can start reading FSW/PSW trace files with NCS Expert you need a good profile. By default NCS Expert comes with the "Expertenmodus" profile ("FZG2.PFL"), which despite the name is not that expert at all. You can either use the "Fisterprofile" ("GOODFIST.PFL") from the founder of bmwecu.org, or my profile (download and unpack "REVTOR.PFL" from the zip archive to the "C:\NCSEXPER\PFL\" folder).
Navigate to the "C:\NCSEXPER\WORK\" folder and (if not yet existing) create a new empty text file called "FSW_PSW.MAN".
Now connect your diagnostic interface to the car and turn the ignition on (just the ignition - no need to start the engine). Test the connection with for example INPA. Don't forget to close INPA before using NCS Expert. The interface throws errors when multiple applications try to get access to it.[*:1zs5yuh0]Once the profile is in the PFL folder and the diagnostic link ok, launch NCS Expert. At this moment no profile is loaded, so the screen is quite empty.
[*:1zs5yuh0]From the "File" menu, choose "Load Profil".
[*:1zs5yuh0]In the "Choose profile" popup window, select "Fisterprofile" or "Revtor's NCS Expert Profile" and click "OK". Nothing much happens, but you'll notice some of the buttons on the bottom now have labels.
[*:1zs5yuh0]Click the "VIN/ZCS/FA" button (F1). The button labels change once again.
[*:1zs5yuh0]Click the "ZCS/FA f. ECU" button (F3).
[*:1zs5yuh0]In the "Choose CHASSIS" popup window, select your chassis and click "OK".
[*:1zs5yuh0]In the "Choose ECU" popup window, select one of the presented modules (for example "EKM", "EWS" or "CAS") and click "OK".
[*:1zs5yuh0]After a short moment, the top groupbox should now show information regarding your car.
[*:1zs5yuh0]Click the "Back" button (F6). The middle groupbox now shows the available modules and default job name. The default is "SG_CODIEREN" which we definitely don't want, so pay attention what buttons you press right now!
[*:1zs5yuh0]Click the "Process ECU" button (F4).
[*:1zs5yuh0]In the "Choose ECU" popup window, select the desired module and click "OK". If you want to read all modules, you'll have to work module by module.
[*:1zs5yuh0]A popup window displaying the *.C??, *.IPO and *.PRG files for the chosen module is shown. Write these filenames down as you need those for NCS Dummy. Click "OK".
[*:1zs5yuh0]Click the "Change job" button (F2). If "JOBNAME" in the middle groupbox already reads "CODIERDATEN_LESEN" you can skip the following steps and jump to 16.
[*:1zs5yuh0]In the "Choose job" popup window, select "CODIERDATEN_LESEN" and click "OK". The default job action is now reading instead of coding. Note that NCS Expert will still say "get coded" in the middle groupbox and during the read operation it says it's coding... but it will not. "CODIERDATEN_LESEN" is a safe read-only operation.
[*:1zs5yuh0]Confirm "JOBNAME" in the middle groupbox says "CODIERDATEN_LESEN".
[*:1zs5yuh0]Click the "Execute job" button (F3). The process takes only a few seconds. As said, NCS Expert may indicate it's coding but it's actually only reading.Head over to the "C:\NCSEXPER\WORK\" folder. In it are now two files that interest us: "FSW_PSW.TRC" and "NETTODAT.TRC". The first is the human readable keyword trace file, the second is the nettodata trace file. I strongly encourage to keep a backup copy of both "FSW_PSW.TRC" and "NETTODAT.TRC". Each time you read a module with NCS Expert these files are overwritten, so you must move or rename them (no need to copy - if the original files are missing, NCS Expert will write new ones). If you rename them to a "chassis-module-filename.trc" filename structure, NCS Dummy will automatically select the right chassis and module upon loading (for example: "E31-GM2.C25-FSW_PSW.TRC" and "E31-GM2.C25-NETTODAT.TRC").
If you want to read a trace files from another module, head back to NCS Expert, click the "Change ECU" button (F1) and repeat the steps starting from 11, but with a different module.
Coding modules from a manipulated "FSW_PSW.MAN" trace file with NCS Expert
First of all make sure you have a good NCS Expert profile. Read the previous chapter for more information on profiles.
Where little could go wrong with reading, coding is a different story. You don't want the battery voltage get too low during coding as this may render the module dead. Luckily older bimmers like the E31 don't take long to code - just seconds per module. So you don't need any special precautions if your batteries are good and properly charged. Nevertheless it's recommended to attach a small 13.8 V power supply to keep the voltage well over 13 V. A simple battery charger with power supply mode functionality and a current output of 5 A or better should be sufficient. Note that newer bimmers may take a lot longer to code, with a much higher current draw. BMW recommends power supplies that can deliver over 40 A for newer cars.
Open the keyword trace file ("FSW_PSW.TRC") you wish to make changes to in a plain text editor, make the changes and save the file to "FSW_PSW.MAN" in the "C:\NCSEXPER\WORK\" folder overwriting a previous version (if existing).
Connect your diagnostic interface to the car and turn the ignition on (just the ignition - no need to start the engine). Test the connection with for example INPA. Don't forget to close INPA before using NCS Expert. The interface throws errors when multiple applications try to get access to it.[*:1zs5yuh0]Launch NCS Expert. At this moment no profile is loaded, so the screen is quite empty.
[*:1zs5yuh0]From the "File" menu, choose "Load Profil".
[*:1zs5yuh0]In the "Choose profile" popup window, select "Fisterprofile" or "Revtor's NCS Expert Profile" and click "OK". Nothing much happens, but you'll notice some of the buttons on the bottom now have labels.
[*:1zs5yuh0]Click the "VIN/ZCS/FA" button (F1). The button labels change once again.
[*:1zs5yuh0]Click the "ZCS/FA f. ECU" button (F3).
[*:1zs5yuh0]In the "Choose CHASSIS" popup window, select your chassis and click "OK".
[*:1zs5yuh0]In the "Choose ECU" popup window, select one of the presented modules (for example "EKM", "EWS" or "CAS") and click "OK".
[*:1zs5yuh0]After a short moment, the top groupbox should now show information regarding your car.
[*:1zs5yuh0]Click the "Back" button (F6). The middle groupbox now shows the available modules and default job name.
[*:1zs5yuh0]Click the "Process ECU" button (F4).
[*:1zs5yuh0]In the "Choose ECU" popup window, select the desired module and click "OK". Make sure the manipulated "FSW_PSW.MAN" trace file is for the same module.
[*:1zs5yuh0]A popup window displaying the *.C??, *.IPO and *.PRG files for the chosen module is shown. Click "OK".
[*:1zs5yuh0]Click the "Change job" button (F2). If "JOBNAME" in the middle groupbox already reads "SG_CODIEREN" you can skip the following steps and jump to 16.
[*:1zs5yuh0]In the "Choose job" popup window, select "SG_CODIEREN" and click "OK". The default job action is now coding.
[*:1zs5yuh0]Confirm "JOBNAME" in the middle groupbox says "SG_CODIEREN".
[*:1zs5yuh0]Click the "Execute job" button (F3). The process takes only a few seconds on older cars like the E31.After NCS Expert has finished coding, close the application and turn the ignition back to off. That's all there is to it. The module has been coded. It's recommended to empty (not delete) the "FSW_PSW.MAN" file after coding.
Please note this coding method does not change the ZCS (Central Coding Key) or VO (Vehicle Order). In other words, if you ever recode the car using the ZCS/VO all your changes will be lost. So if you are happy with the new coding, keep a backup of the "FSW_PSW.MAN" file - just in case. I also strongly encourage to keep a backup of the original unmodified "FSW_PSW.TRC" and "NETTODAT.TRC" trace files.