1. Problem Overview
When generating a configured report in SIMATIC Energy Manager PRO (EnMPro) versions 7.0 through 7.4, the client raises a modal dialog and aborts the rendering job. The error is logged in the Administration → Logging Viewer as a CalculationServerReferenceNullException with the message text "mindestens 1 Modul abgebrochen" (at least one module aborted) and an English secondary description "Can not call/reach Calculation Server; Reference not set (null)".
The visible symptom is identical for all affected releases:
- User clicks Generate Report in the EnMPro report module.
- A popup message appears indicating the report could not be produced.
- The Logging Viewer records the calculation server reference exception with a timestamp prefix
AUSF:YYYY-MM-DD HH:MM:SS-msecand the offending report path, e.g.Protocol|Report: ReportDaily_x1 / Module: New_Module. - No PDF, XLSX, or HTML output is written to the configured report storage.
The error is non-destructive — the database and MEVA configuration remain intact — but the report workflow is fully blocked until the calculation service connection is restored.
2. Affected Versions and Components
| Component | Version / Detail | Status |
|---|---|---|
| EnMPro Server | V7.0 (up to Update 2), V7.0 Update 3, V7.1 (up to Update 0), V7.1 Update 1, V7.2, V7.4 | Affected — patched by service restart and cumulative updates |
| EnMPro Web Client | V7.2 SPx, V7.4 SPx | Affected — same back-end service dependency |
| Energy Manager PRO Calculation Service | Windows service: BDataCalculationService (display name "Energy Manager PRO Calculation Service") |
Primary root cause location |
| PortalWorks Session | BData.PortalWorks.Session.get_localCalculationServiceAccess |
Call site that throws the exception |
| DataAccessWorks / CalculationServer | BData.DataAccessWorks.ICalculationService.TriggerManualCalculationForTimeRange |
Remoting interface that fails |
| OLE DB Provider | BData.OleDb.DataAccess.CalculationServer.SelectMevaSpecificTable |
Final stack frame before abort |
3. Error Message Decoded
The raw entry written to the EnMPro log by the PortalWorks session layer is reproduced verbatim so the field engineer can match it line-for-line:
Analysis error 2/25/2019 11:45:55 AM
Protocol|Report: ReportDaily_x1 / Module: New_Module
AUSF:2019-02-25 11:45:55-31368
CalculationServerReferenceNullException: mindestens 1 Modul abgebrochen
Can not call/reach Calculation Server; Reference not set (null).
StackTrace:
Server stack trace:
at BData.PortalWorks.Session.<get_localCalculationServiceAccess>b__30()
at RemotingLib.ReconnectableObjectReference.Worker`1.Invoke(IMessage msg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at BData.DataAccessWorks.ICalculationService
.TriggerManualCalculationForTimeRange(MevaCalculationInitiator calculationInitiator,
Guid guidCalculationAttempt,
Int64 mevaId,
FromToTimezone fromToRange,
DateTime modelDate,
Int64 compLevel,
CycleSwitcher cycleInfo,
Int32 offset,
Boolean waitForCalculationFinished)
at BData.OleDb.DataAccess.CalculationServer.SelectMevaSpecificTable(Int64 messid,
FromToTimezone fromToRange, DateTime modelDate, CycleSwitcher cycleInfo,
Int64 comp, Int32 limit, Nullable`1 guidCalculationAttempt)
at BData.PortalWorks.CalculationServerAccess.SelectMevaSpecif...
Interpretation of the key tokens:
| Token | Meaning |
|---|---|
Protocol|Report: ReportDaily_x1 |
Name of the report definition (user-configured) being executed |
Module: New_Module |
Specific module in the report layout whose calculation failed |
AUSF:YYYY-MM-DD HH:MM:SS-msec |
Local execution timestamp; "AUSF" is the German abbreviation for "Ausführung" (execution) |
mindestens 1 Modul abgebrochen |
At least one module was aborted by the calculation service |
get_localCalculationServiceAccess |
Property accessor resolving the .NET remoting proxy to the local calculation service |
ReconnectableObjectReference |
EnMPro wrapper that retries the remoting channel; fails after exhausting retries |
TriggerManualCalculationForTimeRange |
Method called when the user requests a report covering a manual time range |
SelectMevaSpecificTable |
OLE DB call that selects MEVA values from the configured table for the requested time window |
The decisive evidence is the call to get_localCalculationServiceAccess — EnMPro is trying to bind to the .NET remoting endpoint of the local Energy Manager PRO Calculation Service and receiving a null reference. This means the service is either stopped, hung, or has lost its remoting channel registration.
4. Root Cause Analysis
Three independent root causes can produce the identical exception text. They must be ruled in or out in the order presented.
4.1 Calculation Service Is Not Running
The most common cause. The Windows service Energy Manager PRO Calculation Service (service binary BDataCalculationService.exe) is stopped, set to Manual startup, or has crashed. When the EnMPro front-end requests get_localCalculationServiceAccess, the .NET remoting infrastructure cannot resolve the channel and returns a null reference. This is the case documented in the field: the user added MEVAs and datapoints to a brand-new report module (New_Module) and triggered a manual calculation for the first time on a server where the calculation service was either never started, or had been disabled by a Windows update or group-policy change.
4.2 Calculation Service Is Running but Unreachable
The service is up but its remoting channel is not bound to the expected port, or the channel is bound but the application pool / user account running the EnMPro web site cannot authenticate to the named pipe / TCP endpoint. This typically occurs after a hostname change, an IP reassignment, or a service-account password rotation that was not propagated to the EnMPro service logon.
4.3 Stale or Corrupted MEVA Binding in the Report Module
The Module referenced in the error (New_Module) has a MEVA or datapoint reference that points to a mevaId no longer present in the configuration database (e.g. the source MEVA was deleted from the matrix but the report module still holds the old GUID). The TriggerManualCalculationForTimeRange call passes an invalid mevaId, the service returns null, and the remoting wrapper surfaces it as a CalculationServerReferenceNullException. Refer to the SIMATIC Energy Manager PRO V7.2 Operation Manual for the canonical MEVA / datapoint workflow.
5. Solution Path A — Restart the Calculation Service
This is the correct first-line action when the service has simply stopped or has entered a hung state.
5.1 Prerequisites
- Local administrator or domain account that is a member of the EnMPro administrators group on the application server.
- RDP or console access to the EnMPro application server.
- Confirmation of the service name under Services (local) → look for display name Energy Manager PRO Calculation Service.
5.2 Procedure
- Open services.msc on the EnMPro application server.
- Locate Energy Manager PRO Calculation Service (binary path typically
%ProgramFiles%\Siemens\EnergyManagerPRO\CalculationService\BDataCalculationService.exe). - Right-click → Properties → Startup type → set to Automatic (Delayed Start). Apply.
- If the service status is Stopped, click Start. If it is Running, click Stop, wait 10 seconds, then click Start to perform a clean restart.
- Open Event Viewer → Windows Logs → Application and confirm the service writes an Information event with source
BDataCalculationServiceindicating that the remoting channel was bound successfully. The expected port is the one configured under EnMPro Administration → Services → Calculation Service (default TCP 9090 or a named pipeBDataCalculationService). - Return to the EnMPro client and re-trigger the failing report.
5.3 Command-Line Equivalent (PowerShell)
Get-Service -Name "BDataCalculationService"
Restart-Service -Name "BDataCalculationService" -Force
Get-Service -Name "BDataCalculationService" | Select-Object Name, Status, StartType
# Expected: Status = Running, StartType = Automatic
6. Solution Path B — Apply the Latest Cumulative Update
Siemens ships cumulative updates that fix known issues in the calculation service, the remoting layer, and the report module editor. For EnMPro 7.0 the release is Update 3; for 7.1 it is Update 1. Versions 7.2 and 7.4 are maintained through their respective service packs.
- Identify the exact build: Help → About in the EnMPro client, or inspect
HKLM\SOFTWARE\Siemens\EnergyManagerPRO\Versionon the server. - Download the matching update from the Siemens Industry Online Support portal using the article number reported by SIMATIC Energy Manager PRO V7.2 Operation or V7.4 Operation manuals (see References section in the manuals themselves).
- Stop the EnMPro web site, the PortalWorks service, and the Calculation Service.
- Run the cumulative update executable with administrative rights.
- Reboot the server.
- Verify all three services start automatically and write a clean Information event on boot. The expected kernel-start log line is documented in Starting the kernel (e.g.
20190211|10:26:02:455|1000: ...).
%ProgramData%\Siemens\EnergyManagerPRO directory before applying a service pack. The installer replaces calculation service binaries and may reset kernel parameters.7. Solution Path C — Re-bind MEVAs and Datapoints in the Report Module
If Path A and Path B do not clear the error, the report module itself is the cause. This is especially likely when the error names a freshly created module such as New_Module or when the MEVA referenced in the report was renamed or moved in the matrix.
- In the EnMPro client open Reports → Report definitions and select
ReportDaily_x1. - Open the failing module (
New_Module) in the layout editor. - Delete every existing MEVA and datapoint reference in the module (select row → Delete).
- Re-add the MEVAs: in the Matrix view, select the required rows, Ctrl+C, switch back to the module, and Ctrl+V to paste the MEVA references. Repeat for datapoints using the Data point tab.
- Click Apply and Save. The system writes a new binding row to the EnMPro configuration database with a fresh
mevaId. - Trigger the report. The
TriggerManualCalculationForTimeRangecall should now resolve a valid MEVA and thenullreference is no longer returned.
This binding procedure is fully documented in chapter Configuring the Report of the SIMATIC Energy Manager PRO V7.2 Operating Manual and the equivalent chapter in the SIMATIC Energy Manager PRO V7.4 Operating Manual.
8. Solution Path D — Recover the Remoting Channel
When the service is Running but the front-end still receives a null reference, the remoting channel has been lost. Symptoms include Event Viewer entries RemotingLib.ReconnectableObjectReference: cannot reconnect or System.Net.Sockets.SocketException on the configured port.
- Open the EnMPro Administration console and navigate to Services → Calculation Service.
- Note the configured endpoint (TCP port or named pipe name) and the service-account under which
BDataCalculationService.exeruns. - Open
services.msc, locate Energy Manager PRO Calculation Service, and confirm the Log On tab shows the expected account. Re-enter the password if it was recently rotated in Active Directory. - Stop the service, wait 15 seconds, then start it. The service re-binds its remoting channel during the
OnStartsequence. - From a PowerShell prompt on the same server, test the TCP endpoint if TCP is configured:
Test-NetConnection -ComputerName localhost -Port 9090(replace 9090 with the configured port). A successfulTcpTestSucceeded : Trueconfirms the channel is bound. - If the named pipe is used, run
[System.IO.Pipes.NamedPipeClientStream]::new('.', 'BDataCalculationService', 'InOut')from PowerShell. A successful object construction means the pipe was created. - Re-trigger the report in the EnMPro client.
9. Log File Locations and Reading
All three EnMPro log streams are required to confirm the fix:
| Log | Default Path | Purpose |
|---|---|---|
| PortalWorks session log | %ProgramData%\Siemens\EnergyManagerPRO\Logs\PortalWorks\*.log |
Captures the exception text and stack trace shown in the Logging Viewer |
| Calculation service log | %ProgramData%\Siemens\EnergyManagerPRO\Logs\CalculationService\*.log |
Records remoting channel bind/unbind, MEVA lookup attempts, abort reasons |
| Reporting service log | %ProgramData%\Siemens\EnergyManagerPRO\Logs\ReportingService\*.log |
Tracks report rendering pipeline after the calculation phase |
| Kernel log | %ProgramData%\Siemens\EnergyManagerPRO\Logs\Kernel\*.log |
Records the kernel startup line; useful to confirm clean boot |
Log retention and rotation behavior is described in Storing the log files. To extract the relevant lines from the PortalWorks log without a text editor:
Select-String -Path "$env:ProgramData\Siemens\EnergyManagerPRO\Logs\PortalWorks\*.log" `
-Pattern "CalculationServerReferenceNullException|TriggerManualCalculationForTimeRange|SelectMevaSpecificTable" `
-Context 3,10
10. Verification Procedure
After applying any of the four solution paths, validate that the report workflow is fully restored:
- In the EnMPro client, open Reports → Report definitions → ReportDaily_x1.
- Click Generate Report. Choose the same time range that previously produced the error.
- Confirm the modal popup does not appear and the progress indicator completes within 30–120 seconds (depends on MEVA count and selected time range).
- Open the report storage directory configured in the report module. Verify the rendered file (PDF/XLSX/HTML) is written with a fresh timestamp.
- In Administration → Logging Viewer, filter for the current execution. There should be no
CalculationServerReferenceNullExceptionentry. If informational entries about the calculation run are present, that is normal. - Generate two more reports back-to-back to confirm the service does not fall over under repeat load.
11. Related Errors and Edge Cases
| Symptom | Likely Cause | Action |
|---|---|---|
| Report popup but no Logging Viewer entry | Logging level set too low | Raise PortalWorks log level to Verbose under Administration → Logging and retry |
| Reporting service error in addition to calculation error | Reporting service also stopped | Restart Energy Manager PRO Reporting Service per the procedure in Storing the log files |
| Daily values present in matrix but monthly values missing | Aggregation cycle misconfigured | Re-check CycleSwitcher parameters in the report module |
| Alarms for acquisition values not generated | Acquisition service not running | Restart Energy Manager PRO Acquisition Service |
| Gaps in time-series data not detected | GAP detection service disabled | Re-enable under Administration → Acquisition → Gap detection |
| Calculation aborts only for one specific MEVA | Source MEVA deleted from matrix | Recreate the MEVA in the matrix and re-bind it in the report module |
12. Preventive Maintenance Checklist
- Keep the EnMPro server fully patched with the latest cumulative update (V7.0 Update 3 / V7.1 Update 1 or later).
- Set the Calculation Service startup type to Automatic (Delayed Start) so it boots after SQL Server has finished its own recovery.
- Configure a Windows service recovery action: restart the service after 1 minute, then 5 minutes, then 30 minutes on subsequent failures.
- Monitor the PortalWorks and CalculationService log directories — alert on the string
CalculationServerReferenceNullExceptionusing SCOM, PRTG, or a PowerShell scheduled task. - After any change to the matrix (MEVA rename, deletion, datatype change), regenerate every report definition that referenced the affected MEVAs to clear stale bindings.
- Document the service-account credentials in a corporate password vault and rotate them according to the same policy as the SQL service account.
13. FAQ
What does the error "CalculationServerReferenceNullException: mindestens 1 Modul abgebrochen" mean in EnMPro?
It means the EnMPro front-end tried to obtain a reference to the Energy Manager PRO Calculation Service via .NET remoting, but the reference resolved to null because the service is stopped, hung, or the remoting channel is lost. The English secondary text "Can not call/reach Calculation Server; Reference not set (null)" confirms this. The fix is to restart the BDataCalculationService Windows service or to re-bind the MEVAs in the failing report module.
Which EnMPro versions are affected by this report generation error?
EnMPro V7.0 (up to Update 2), V7.0 Update 3, V7.1 (up to Update 0), V7.1 Update 1, V7.2 and V7.4 are all affected. Siemens resolved several underlying remoting issues in the cumulative updates for V7.0 (Update 3) and V7.1 (Update 1). V7.2 and V7.4 are maintained through their respective service packs and the same restart / re-bind procedure applies.
Where can I find the EnMPro calculation service log files?
By default in %ProgramData%\Siemens\EnergyManagerPRO\Logs\CalculationService\. The PortalWorks session log that contains the user-visible exception sits in %ProgramData%\Siemens\EnergyManagerPRO\Logs\PortalWorks\. The retention and rotation behavior of these files is described in the Storing the log files reference.
Do I need to restart the EnMPro web site after restarting the calculation service?
Not normally. The web site and the calculation service are independent Windows processes; restarting one does not require restarting the other. However, if the error persists after a clean service restart, recycle the EnMPro application pool in IIS to flush the cached remoting proxy held in the PortalWorks session. If still failing, perform a full server reboot to clear any leaked remoting channels.
How do I bind MEVAs and datapoints to a newly created report module?
Open the report module layout, switch to the Matrix tab, select the required MEVA rows, press Ctrl+C, switch back to the module editor and press Ctrl+V. Repeat for datapoints using the Data point tab. Save the module. The exact workflow is described in the Configuring the Report chapter of the SIMATIC Energy Manager PRO V7.2 Operation Manual and the V7.4 Operation Manual.
Why does the error reference a stack frame in BData.OleDb.DataAccess.CalculationServer.SelectMevaSpecificTable?
That stack frame is the OLE DB call that retrieves the MEVA values for the requested time range. It is reached only after the remoting reference has been obtained, so seeing it in the trace means the null reference was returned one frame earlier inside get_localCalculationServiceAccess. The OLE DB call cannot complete because the upstream remoting channel returned null, which is why the entire calculation aborts and the report popup is raised.