Project Generator Help

On the https://generator.mervis.info website, you can generate a Mervis SCADA project according to the specified parameters, optionally using a mapping file in XLSX format.

Parameters can be defined either as individual values in the text field or stored in a text file (e.g., params.txt) and selected from your computer.

Additionally, you can use a mapping file in the XLSX format, in which individual data points can be defined. This file allows transforming input values (keys and values) into new ones, enabling the creation of your own data structure for the resulting project.

Individual available options are described below. Specific practical examples are listed on the Examples page.

Settings

Parameters

  • --projId 5eee5946-293c-4753-9495-d6b11f73d670 Unique GUID as project identifier
  • --projName ExampleProject Human-readable project name
  • --projTimeZone Europe/Prague Project timezone

Parameters

  • --outputDirectory 5eee5946-293c-4753-9495-d6b11f73d670 Output directory for generated files
  • --outputFileSuffix _p5 (optional) Specify output file suffix. In this example, the output filename is set to <projId>.data_p5, instead of <projId>.data

Parameters

  • --mdbKeyMappingTable [filepath] Excel file with data processing directives. Supports multiple comma-separated filepaths.

Parameters

  • --forceTimestamp [value] Force specific timestamp for all generated values (default: min)
    • Options: 'min' (0001-01-01T00:00:00), 'current' (current UTC), or explicit ISO format like '2025-03-25T14:30:00.000'

Parameters

  • --sourceType [MervisDb|DataHub|SharkPlc] Specifies the data source type

Mapping-Only Mode

When using a mapping file with --mdbKeyMappingTable without specifying --sourceType, the generator operates in mapping-only mode:

  • Generates datapoints exclusively from the mapping file definitions
  • Automatically routes to the Mervis DB generator, so other Mervis DB options can still be configured (e.g., --mdbDpNameKey, --mdbTreeLevelKeys)
  • Does not require a valid database connection (--mdbConnStr)
  • Automatically sets --useDbV2 and --mdbExportOnlyIdKeys options

Parameters

  • --mdbConnStr [connection_string] MervisDb connection string - Format: rcwaredb://user_name:password@host:port/?protocol=http,endpoint=MervisDbAcces,uriaccess=MervisDbAcces
  • --mdbSourceKeys [keys] Key-value pairs to include in generation
  • --mdbSourceKeysSkip [keys] Key-value pairs to exclude from generation

Action Required: Deprecation of TODO Credentials

Previously, the placeholder TODO was supported for Data Hub credentials (e.g., --dataHubLogin TODO). These placeholders are no longer accepted when generating a project. You must provide a real Data Hub username and password. Existing params.txt files that still contain TODO must be updated immediately to avoid failures during project generation.

Planned Phase 2: In the second phase of this change, existing generated projects that still use TODO credentials will stop working. Existing projects must also be reviewed and updated with valid Data Hub credentials before the migration is activated.

Parameters

  • --pmUrl [url] Project manager URL - Format: http://localhost:5123/
  • --pmLogin [username] [REQUIRED] Project manager login credentials (e.g., GlobalDomain\test-generator-manage)
  • --pmPass [password] [REQUIRED] Project manager password
  • --dataHubUrl [url] Data hub URL - Format: http://localhost:5005/hub/data/
  • --dataHubLogin [username] [REQUIRED] Data hub login credentials (e.g., GlobalDomain\test-generator-data-2)
  • --dataHubPass [password] [REQUIRED] Data hub password
  • --dataNodeIds [ids] Specific data node IDs to process
  • --dataHubUpdatePeriod [seconds] Update period for data hub read group in seconds (default: 2)
  • --pmPropFilter [filter] PM properties filter

Account Types and Permissions

  • Project Manager Account (pmLogin): Used by the Project Generator to access Project Manager. This account must have the Manage permission assigned for all data nodes in the domain (configured in Portal > Manage domain > Change datanodes permissions).
  • Data Hub Account (dataHubLogin): Added to the generated project for Data Hub operations. Permissions depend on project function:
    • GetValues: Required for reading values. A read-only project uses only this.
    • ExecuteCommand: Required for writing values or executing commands.
    • Note: A project that writes data normally requires both GetValues and ExecuteCommand to function properly.

Security Considerations

The Project Manager account and Data Hub account should be separate. The Data Hub account should normally be a service account (no MFA). Since credentials are stored locally in params.txt, do not use highly privileged personal accounts, protect the file from unauthorized access, and never commit it to source control.

Troubleshooting Common Errors

  • Missing Project Manager login or password: Throwing ArgumentException: Not valid arguments: Invalid project manager login. Invalid project manager password. Check if pmLogin or pmPass is missing.
  • Incorrect Project Manager login or password: Throwing Exception: Getting datanodes problem. Code:42-InvalidCredentials InvalidCredentials.
  • Missing Manage permission: Throwing Exception: Getting datanodes problem. Code:40-ErrorByMessage Request cannot be completed for some of the requested data nodes: Check if the PM account has the Manage permission for all required nodes.

Parameters

  • --connectionType [Tcp|Proxy|CloudAccess] Connection method to SharkPLC
  • --host [hostname] SharkPLC host address
  • --port [number] SharkPLC port number
  • --ssl [true|false] Use TLS/SSL connection
  • --validateCertificate [true|false] Validate SSL certificates
  • --plcAddr [number] Device address (default: 1)
  • --plcUser [username] PLC authentication username
  • --plcPassword [password] PLC authentication password
  • --readTimeout [timespan] Read operation timeout
  • Used with Proxy connectionType:
    • --proxyId [id] Proxy identifier for proxy connections
  • Used with CloudAccess connectionType:
    • --caChannelId [id] CloudAccess channel identifier
    • --caUser [username] CloudAccess username
    • --caPassword [password] CloudAccess password

Parameters

  • --mdbFrom [ISO_datetime] Only include variables newer than specified time
  • --mdbTo [ISO_datetime] Only include variables older than specified time

Parameters

  • --mdbDpNameKey [key_name] Key used for data point names
    • Supports direct key names: Name
    • Supports comma-separated list: Name,Description
    • Supports templates: {Name}
    • Supports regex: "{Name, '([^\:]):(.)', $2} ({Guid})"

Parameters

  • --mdbTreeLevelKeys [path] Keys for hierarchical ordering
    • Example: Level1/Level2/Level3
    • Supports regex syntax at each level
    • See --mdbDpNameKey for template syntax

Parameters

  • --sortBy [keys] Sort data points by specified key values (example: "Level1,Level2,myLevel3,Name")
  • --notSortDataPoints [true|false] Disable alphabetical sorting of data points (default: false)
  • --keepEmptyFolders [true|false] Preserve empty groups in output (default: false)

Parameters

  • --mdbExportOnlyIdKeys [true|false] Export only ID keys as driver parameters (default: false)

Parameters

  • --driverDataUpdatePeriod [milliseconds] Driver variable read update period (default: 100)
  • --dataHubTimestampValidityLimit [timespan] Timestamp validity limit. Communication error is set when timestamp exceeds this limit. (default: none), (example: P1DT4H30M)
  • --mdbUrl [url] Optional. Force DB URL in the data file to this value

Parameters

  • --dpVisualDecimals 3 setting for all numerical data points

Mapping File

  • SetTransformation
    {"type":"linear","unit":"°C","decimalPlaces":1,"params":{"k":0.1, "q":0}}

    defines the number of decimal places for a specific data point

Parameters

  • --mdbUnitKey FixedUnit defines which key should be used to set the unit

Mapping File

  • SetTransformation
    {"type":"linear","unit":"°C","decimalPlaces":1,"params":{"k":0.1, "q":0}}

    defines units for a specific data point

Parameters

  • --dbWriteModeOn [true|false] Enable write mode for database access (default: false)
  • --dbWriteModeDecimals [number] Decimal places for database writes (default: 2)
  • --dbWriteModeNoTriggers [true|false] Disable database write triggers (default: false)
  • --dbWriteModeSamplingInterval [seconds] Sampling interval for database writes
  • --useDbV2 [true|false] Use version 2 database properties (default: false)
  • --dbEnableWriteFromDriver [true|false] Enable write from MervisDb driver (default: false)
  • --dbUseSourcePropertyTimestampForSave [true|false] Use source property's timestamp when saving to DB (default: false)
  • --mdbDataSpecification [specification] Data retrieval specification (default: MaxTimestamp)
    • Options: MinTimestamp, MaxTimestamp, FirstLessThanReferenceDateTime, FirstLessThanOrEqualThanReferenceTime, FirstGreaterThanReferenceDateTime, FirstGreaterThanOrEqualThanReferenceTime, MaxGoodThroughTime
  • --mdbDateTimeShift [timespan] Time shift for data retrieval (example: -PT1H30M)
  • --mdbWriteValueDbSaveInterval [timespan] Save interval for write operations (default: 1H, example: P1DT1H30M)
  • --mdbCommErrorIntervalMultiple [number] Communication error when last value is older than given multiple of interval (0 = disabled)

Mapping File Specification

Data Point Handling Headers

  • dataPointId - Explicit data point GUID
    • Specifies a fixed GUID for the data point
    • Used for explicit data point definitions
    • Must be valid GUID format
  • dataPointType - Data point core type
    • Specifies the core type of the data point
    • Options: DiscreteInput, DiscreteOutput, AnalogInput, AnalogOutput, StringInput, StringOutput, DateTimeInputOutput, PlanningCalendarForBasicTpg, BasicTpg, AlarmPoint
  • dataPointSourceType - Forced source data type
    • Overrides automatic type detection
    • Options: Bool, Int64, Double, String, DateTime
  • getKey[index] - Define condition key for row matching
    • Used to specify which key must match for the row to be applied
    • Index allows multiple condition keys (e.g., getKey1, getKey2)
  • getValue[index] - Define condition value for row matching
    • Specifies the value that must match the corresponding getKey
    • Supports regex patterns when value starts with '^' or ends with '$'
    • Index corresponds to matching getKey index
  • setKey[index] - Set or modify key name
    • Defines which key to set or modify when conditions are met
    • Index allows multiple key modifications per row
  • setValue[index] - Set or modify key value
    • Specifies the value to assign to the corresponding setKey
    • Supports template replacement using {keyname} syntax
    • Index corresponds to matching setKey index
  • setIsId[index] - Mark key as identifier
    • Boolean value (true/false or 1/0) indicating if key is part of unique identifier
    • Index corresponds to matching setKey index
  • setTagKey[index] - Define tag key name
    • Specifies the name of a tag to be added to the data point
    • Index allows multiple tags per row
  • setTagValue[index] - Define tag value
    • Specifies the value for the corresponding settagkey
    • Supports template replacement using {keyname} syntax
    • Index corresponds to matching setTagKey index
  • setTagType[index] - Define tag value type
    • Specifies the data type for the tag value
    • Options: string (default), bool, number
    • Index corresponds to matching setTagKey index
  • setTransformation - Apply data transformation
    • JSON specification for data point transformations
    • Used for value mapping, scaling, or other data processing rules
  • setMetadata - Alternative name for setTransformation
    • Alias for setTransformation column type. Same functionality and syntax as setTransformation
  • setAlarm - Alarm configuration
    • JSON specification for alarm settings
    • Defines alarm conditions, limits, and behaviors
  • [custom][index] - Document generator columns
    • Any column header not matching above patterns becomes a document generator
    • Used for custom property settings and configurations
    • Examples: setProperties1, Driver, setCALayer

Template Replacement Syntax

  • {keyname} - Replace with value of specified key
    • Supports nested replacements and complex expressions
    • Available in setValue, setTagValue, and document generator columns
    • Keys are resolved from the current row's key-value pairs

Special Tag Features

  • *tagname - Prefix tag key with asterisk to allow duplicates
    • Without asterisk: only last value is kept for each tag name
    • With asterisk: multiple values allowed for same tag name

Document Generator Columns (Custom Set Documents)

  • setBlock - Block configuration for data points
    • JSON format for function and alarm blocking
    • Parameters: kind (block type), propRef (property reference), propBlockValue (trigger value)
    • Block types: PermanentFunctionBlock, PermanentAlarmBlock, ConditionalFunctionBlock, ConditionalAlarmBlock
  • setProperties - Data point property definitions
    • JSON format for setting custom properties on data points
    • Supports property types: ReferenceValueProperty, DoubleValueProperty, Int64ValueProperty, BoolValueProperty, StringValueProperty, DateTimeValueProperty
    • Example format:
      {properties: [{name:"PropName", type: "doubleValueProperty", value: "123.45", unit: "°C"}]}
  • setGroupRights - Access rights configuration
    • JSON format for defining user/group permissions. If filled, creates a group for the given data point and sets the specified rights to it. If the group exists, adds rights to it. If there is a right for the entity in the group, it extends it (nothing is removed).
    • Options:
       - type: User/Group
       - access: R/RA/RW
        - R – read-only
        - RA – read and alarm actions
        - RW – read/write
    • Structure:
      {group_name: "GroupName", rights: [{type: "Group", name: "GroupName", access: "rw"}]}
  • setHistory[index] - Data point history configuration [Feature not available yet]
    • Configures Mervis DB history triggers for matching data points
    • setHistory, setHistory1, setHistory2, etc. are supported
    • Requires RcWareDb v2 properties (--useDbV2; enabled automatically in mapping-only mode)
    • Example format:
      {
        "historyEngine": "MervisDb",
        "historyType": "Sampling, OnChange",
        "samplingParameters": {
          "interval": "PT1M"
        },
        "onChangeParameters": {
          "triggerMode": "AbsoluteChange",
          "minChangeRate": "PT5S",
          "absoluteHysteresisParameters": {
            "absoluteDifference": 1
          }
        }
      }
    • historyEngine: None or MervisDb. Always specify it explicitly; if historyEngine is not specified, it is interpreted as None and removes history from the matching data points.
    • historyType: None, Sampling, OnChange, or "Sampling, OnChange"
    • triggerMode: AnyChange, AbsoluteChange, or PercentualChange
    • Durations use ISO-8601 notation, for example PT10S, PT15M, or PT2H.
    • Default sampling interval: 60 seconds; minimum: 1 second. Default on-change rate: 5 seconds; minimum: 1 second. Default thresholds: 100 (absolute change), 5 (percentual change).
    • Defaults apply when the containing parameter object is absent; a present empty object supplies zero values (durations are clamped to the one-second minimum).
    • When onChangeParameters is absent, AnyChange is used with the five-second rate and preserves the existing hysteresis threshold.
    • historyEngine: "None" disables history. MervisDb with historyType: "None" preserves existing triggers.
    • Absolute and percentual change modes require an analog data point; on other types the document is skipped and an error naming the mapping cell is logged.
    • If multiple matching rows or mapping files apply to one data point, the last matching setHistory document wins.
  • Driver - Communication driver type
    • Specifies the driver type for data point communication
    • Options: SSCP, MERVISDB, MODBUS, AMITWEBSOCKET, INSPECTOR, SOFTPLCLINK
    • Triggers driver-specific communication setup
  • DriverChannelParameters - Driver configuration parameters
    • JSON configuration for driver communication settings
    • Contains driver-specific connection parameters (host, port, credentials, etc.)
    • Used in conjunction with Driver column
  • Examples per driver type:

SSCP:

{"pauseBetweenTelegrams": 2000,
 "host": "localhost",
 "port": 12346,
 "user": "admin",
 "password": "rw",
 "proxyId": "PRX232232",
 "ssl": false,
 "slaveId": 0
}

MervisDb:

{"pauseBetweenRequestCycles": "PT10S",
 "writeValueDbSaveInterval": "PT1H",
 "readRequestVariableCount": 1000,
 "url": "http://localhost:9876/RcWareDbAccess",
 "user": "rc_user",
 "password": "rc_user",
 "dataSpecification": 0,
 "dateTimeShift": "PT15M"
}

Modbus:

{ "host": "localhost",
 "port": 502,
 "useCloudAccess": "true",
 "cloudAccess":
 {
   "host": "cloudaccess.mervis.info",
   "port": 23000,
   "ssl": "true",
   "channelId": "chxxxxxxx",
   "user": "uxxxxxxxx",
   "password": "pxxxxxxxx"
  }
}

If the cloudAccess part is specified, it will be used for communication.

AmitWebSocket:

{
 "host": "amitws.mervis.info",
 "port": 80,
 "useCloudAccess": "false",
 "cloudAccess":
 {
   "host": "cloudaccess.mervis.info",
   "port": 23000,
   "ssl": "true",
   "channelId": "chxxxxxxx",
   "user": "uxxxxxxxx",
   "password": "pxxxxxxxx"
  }
}

SoftPlcLink:

Without CloudAccess:

{"host": "hostname",
 "port": portnumber,
 "user": "user",
 "password": "password"}

With CloudAccess:

{"host": "localhost", 
"port": portnumber, 
"user": "user", 
"password": "password", 
"useCloudAccess": "true", 
"cloudAccess": {"host": "host", "port": portnumber, "ssl": "true/false", "channelId": "channel", "user": "user", "password": "password"}}

Planning Calendar Set Documents

  • setCALayer - Planning calendar layer definition
    • JSON format for defining calendar event layers
    • Creates PlanningCalendarValueProperty with event layer data
  • setCADefaultValue - Default calendar value
    • Integer value for planning calendar default state
    • Sets default value for planning calendar data points
  • setCAEmailForNotifications - Email notification settings
    • Email addresses for calendar notifications
    • Configures notification recipients for calendar events
  • setCANotificationBlacklist - Notification blacklist
    • List of excluded email addresses or conditions
    • Prevents notifications to specified recipients
  • setCASumLayer - Calendar summary layer
    • Similar to setCALayer but for summary/aggregated data
    • Creates summary layer for planning calendar
  • setCATPGDefinition - TPG definition for calendar
    • Defines TPG (Time Profile Generator) settings
    • Links planning calendar to PLC communication
  • setCATPGSetup - TPG setup configuration
    • JSON format for TPG setup parameters
    • Includes items, metadata, min/max values, and type settings
    • Example structure:
      {items: [...], max: 100, min: 0, type: "Planning", noExceptions: false}
  • setCAType - Calendar type specification
    • Integer value defining calendar behavior type
    • Determines planning vs. blocking calendar functionality

Modbus Driver Columns (used with Driver: MODBUS)

  • ModbusDeviceAddress - Modbus device address (byte value)
  • ModbusReadFunctionCode - Modbus read function code
  • ModbusWriteFunctionCode - Modbus write function code
  • ModbusStartingAddress - Starting register address
  • ModbusQuantity - Number of registers to read
  • ModbusVariableType - Variable type (Bit, UInt16, SInt16, Float32, etc.)
  • ModbusByteOrder - Byte order configuration

See the Examples page for an example with Modbus specification.

SSCP Driver Columns (used with Driver: SSCP)

  • SSCPCOMMUID - Communication UID (required)
    • Unsigned integer (uint) identifying the communication element
    • Used for addressing specific PLC memory areas
    • Must be valid uint value
  • SSCPOFFSET - Memory offset (required)
    • Unsigned integer (uint) specifying the byte offset in PLC memory
    • Starting position for data read/write operations
    • Must be valid uint value
  • SSCPLEN - Data length (required)
    • Unsigned integer (uint) specifying number of bytes to read/write
    • Defines the size of the data element
    • Must be valid uint value
  • SSCPELEMENTTYPE - Element data type (required)
    • Enum value specifying the data type interpretation
    • Options: BYTE, WORD, DWORD, INT etc.
    • Determines how raw bytes are interpreted
  • SSCPTIMEISSYSTEMRTC - System RTC flag (optional)
    • Boolean value (true/false)
    • When true, uses system Real-Time Clock instead of PLC memory
    • Used for timestamp synchronization
    • Defaults to false if not specified
  • SSCPTPGSPECS - TPG specifications (optional)
    • JSON format for Time Profile Generator settings
    • Structure: {ExceptionLength: int, ExceptionOffset: int, HasExceptions: bool, ItemType: enum}
    • Used for planning calendar and time-based control
    • Creates TpgV1_0Specs object when parsed
  • SPLCID - SoftPLC element ID (required)
    • GUID identifying the specific variable in SoftPLC
    • Must be valid GUID format
    • Used for variable addressing and identification
  • SPLCNAME - Variable name (required)
    • String name of the variable in SoftPLC
    • Human-readable identifier for the data element
    • Used alongside ID for variable resolution
  • SPLCDATETIMEISEPOCH - DateTime epoch flag (optional)
    • Boolean value (true/false)
    • When true, treats DateTime values as Unix epoch timestamps
    • When false, uses standard DateTime format
    • Defaults to false if not specified

SCADA Inspector Driver Columns (used with Driver: INSPECTOR)

  • INSPECTORTARGET - Target selector (required)
    • Enum value specifying the inspection target type
    • Determines how the inspector locates the target for monitoring
  • INSPECTORDATAID - Data identifier (required)
    • String identifying the specific data element to inspect
    • Used to locate the exact data point within the target
    • Must match available data IDs in the target system
  • INSPECTORDIRECTTARGET - Direct target reference (required)
    • String reference to the direct target object
    • Used when INSPECTORTARGET is set to DirectTarget
    • Maps to existing driver instances in the project

AMiT WebSocket Driver Columns (used with Driver: AMITWEBSOCKET)

  • AMITWEBSOCKETVARIABLEID - Variable identifier (required)
    • String ID of the variable in the AMiT system
    • Unique identifier for the data element
    • Used for WebSocket communication addressing
  • AMITWEBSOCKETVARIABLETYPE - Variable type (required)
    • Enum value specifying the AMiT variable type
    • Options: BOOL, INT, REAL, BYTE, WORD, DWORD, etc.
    • Determines data type interpretation and communication protocol
  • AMITWEBSOCKETVARIABLEMATRIXROW - Matrix row index (optional)
    • Integer specifying the row index for matrix/array variables
    • Used for accessing specific elements in multi-dimensional data
    • Defaults to 0 if not specified
  • AMITWEBSOCKETVARIABLEMATRIXCOL - Matrix column index (optional)
    • Integer specifying the column index for matrix/array variables
    • Used for accessing specific elements in multi-dimensional data
    • Defaults to 0 if not specified
  • AMITWEBSOCKETVARIABLETPGTYPE - TPG type (optional)
    • Enum value for Time Profile Generator type in AMiT
    • Options: BOOL, INT, REAL, BYTE, WORD, DWORD, UNKNOWN
    • Used for planning calendar and time-based control configuration
    • Automatically configures TPG properties for BasicTpg data points
  • AMITWEBSOCKETVARIABLETPGMIN - TPG minimum value (optional)
    • Double value specifying the minimum range for TPG variables
    • Used in conjunction with TPG type for range validation
    • Applied to BasicTpgInputOutput data point cores
  • AMITWEBSOCKETVARIABLETPGMAX - TPG maximum value (optional)
    • Double value specifying the maximum range for TPG variables
    • Used in conjunction with TPG type for range validation
    • Applied to BasicTpgInputOutput data point cores

Driver Usage Notes

  • All driver-specific columns are used in combination with the Driver column that specifies the driver type
  • Driver configuration is provided through the DriverChannelParameters column (JSON format)
  • Optional columns use sensible defaults when not specified
  • All values support template replacement using {keyname} syntax from row key-value pairs
  • © Energocentrum Plus, s.r.o. 2017 - 2026