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.
--projId 5eee5946-293c-4753-9495-d6b11f73d670 Unique GUID as project identifier--projName ExampleProject Human-readable project name--projTimeZone Europe/Prague Project timezone--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--mdbKeyMappingTable [filepath] Excel file with data processing directives. Supports multiple comma-separated filepaths.--forceTimestamp [value] Force specific timestamp for all generated values (default: min)'min' (0001-01-01T00:00:00), 'current' (current UTC), or explicit ISO format like '2025-03-25T14:30:00.000'--sourceType [MervisDb|DataHub|SharkPlc] Specifies the data source type
When using a mapping file with --mdbKeyMappingTable without specifying --sourceType, the generator operates in mapping-only mode:
--mdbDpNameKey, --mdbTreeLevelKeys)--mdbConnStr)--useDbV2 and --mdbExportOnlyIdKeys options--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 generationTODO 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.
--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 filterpmLogin): 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).dataHubLogin): Added to the generated project for Data Hub operations. Permissions depend on project function:GetValues and ExecuteCommand to function properly.
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.
ArgumentException: Not valid arguments: Invalid project manager login. Invalid project manager password. Check if pmLogin or pmPass is missing.Exception: Getting datanodes problem. Code:42-InvalidCredentials InvalidCredentials.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.--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--proxyId [id] Proxy identifier for proxy connections--caChannelId [id] CloudAccess channel identifier--caUser [username] CloudAccess username--caPassword [password] CloudAccess password--mdbFrom [ISO_datetime] Only include variables newer than specified time--mdbTo [ISO_datetime] Only include variables older than specified time--mdbDpNameKey [key_name] Key used for data point namesNameName,Description{Name}"{Name, '([^\:]):(.)', $2} ({Guid})"--mdbTreeLevelKeys [path] Keys for hierarchical orderingLevel1/Level2/Level3--mdbDpNameKey for template syntax--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)--mdbExportOnlyIdKeys [true|false] Export only ID keys as driver parameters (default: false)--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--dpVisualDecimals 3 setting for all numerical data points {"type":"linear","unit":"°C","decimalPlaces":1,"params":{"k":0.1, "q":0}}
defines the number of decimal places for a specific data point
--mdbUnitKey FixedUnit defines which key should be used to set the unit{"type":"linear","unit":"°C","decimalPlaces":1,"params":{"k":0.1, "q":0}}
defines units for a specific data point
--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)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)dataPointId - Explicit data point GUIDdataPointType - Data point core typeDiscreteInput, DiscreteOutput, AnalogInput, AnalogOutput, StringInput, StringOutput, DateTimeInputOutput, PlanningCalendarForBasicTpg, BasicTpg, AlarmPointdataPointSourceType - Forced source data typeBool, Int64, Double, String, DateTimegetKey[index] - Define condition key for row matchinggetKey1, getKey2)getValue[index] - Define condition value for row matchingsetKey[index] - Set or modify key namesetValue[index] - Set or modify key value{keyname} syntaxsetIsId[index] - Mark key as identifiersetTagKey[index] - Define tag key namesetTagValue[index] - Define tag value{keyname} syntaxsetTagType[index] - Define tag value typestring (default), bool, numbersetTransformation - Apply data transformationsetMetadata - Alternative name for setTransformationsetTransformation column type. Same functionality and syntax as setTransformationsetAlarm - Alarm configuration[custom][index] - Document generator columnssetProperties1, Driver, setCALayer{keyname} - Replace with value of specified key*tagname - Prefix tag key with asterisk to allow duplicatessetBlock - Block configuration for data pointskind (block type), propRef (property reference), propBlockValue (trigger value)PermanentFunctionBlock, PermanentAlarmBlock, ConditionalFunctionBlock, ConditionalAlarmBlocksetProperties - Data point property definitionsReferenceValueProperty, DoubleValueProperty, Int64ValueProperty, BoolValueProperty, StringValueProperty, DateTimeValueProperty{properties: [{name:"PropName", type: "doubleValueProperty", value: "123.45", unit: "°C"}]}
setGroupRights - Access rights configuration- type: User/Group - access: R/RA/RW - R – read-only - RA – read and alarm actions - RW – read/write
{group_name: "GroupName", rights: [{type: "Group", name: "GroupName", access: "rw"}]}
setHistory[index] - Data point history configurationsetHistory, setHistory1, setHistory2, etc. are supported--useDbV2; enabled automatically in mapping-only mode)Sampling - saves the value at a fixed interval. Changes shorter than the interval can be missed.OnChange - saves the value when it changes. Nothing is saved while the value stays the same."Sampling, OnChange" - both: every change with its exact time, plus a regular sample.OnChange alone, the graph shows no connecting line between records that are more than about 26 hours apart. The data is complete, only the line is missing. Use "Sampling, OnChange" with a sampling interval shorter than 1 day to keep the line connected."Sampling, OnChange", interval PT1H, AnyChangeSampling with PT1M to PT15M, or "Sampling, OnChange" with AbsoluteChange. Do not use AnyChange on noisy analog values.{ "historyEngine": "MervisDb", "historyType": "Sampling, OnChange", "samplingParameters": { "interval": "PT1H" }, "onChangeParameters": { "triggerMode": "AnyChange", "minChangeRate": "PT2S" } }
historyEngine: MervisDb or None (removes history). Always specify it; if missing, None is used.historyType: Sampling, OnChange, "Sampling, OnChange", or None (keeps the existing triggers)samplingParameters.interval: time between samples (default 60 s, minimum 1 s)onChangeParameters.triggerMode:AnyChange - any changeAbsoluteChange - change of at least absoluteHysteresisParameters.absoluteDifference (default 100)PercentualChange - change of at least percentualHysteresisParameters.absoluteDifference percent (default 5)AbsoluteChange and PercentualChange work only on analog data pointsonChangeParameters.minChangeRate: minimum time between two saved changes (default 5 s, minimum 1 s). It limits saving; it never adds records.PT10S, PT15M, PT2H.onChangeParameters is ignored unless historyType contains OnChange; samplingParameters is ignored unless it contains Sampling.interval and minChangeRate.setHistory document wins.Driver - Communication driver typeSSCP, MERVISDB, MODBUS, AMITWEBSOCKET, INSPECTOR, SOFTPLCLINKDriverChannelParameters - Driver configuration parameters
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"}}
setCALayer - Planning calendar layer definitionsetCADefaultValue - Default calendar valuesetCAEmailForNotifications - Email notification settingssetCANotificationBlacklist - Notification blacklistsetCASumLayer - Calendar summary layersetCATPGDefinition - TPG definition for calendarsetCATPGSetup - TPG setup configuration{items: [...], max: 100, min: 0, type: "Planning", noExceptions: false}
setCAType - Calendar type specificationModbusDeviceAddress - Modbus device address (byte value)ModbusReadFunctionCode - Modbus read function codeModbusWriteFunctionCode - Modbus write function codeModbusStartingAddress - Starting register addressModbusQuantity - Number of registers to readModbusVariableType - Variable type (Bit, UInt16, SInt16, Float32, etc.)ModbusByteOrder - Byte order configurationSee the Examples page for an example with Modbus specification.
SSCPCOMMUID - Communication UID (required)SSCPOFFSET - Memory offset (required)SSCPLEN - Data length (required)SSCPELEMENTTYPE - Element data type (required)SSCPTIMEISSYSTEMRTC - System RTC flag (optional)SSCPTPGSPECS - TPG specifications (optional)SPLCID - SoftPLC element ID (required)SPLCNAME - Variable name (required)SPLCDATETIMEISEPOCH - DateTime epoch flag (optional)INSPECTORTARGET - Target selector (required)INSPECTORDATAID - Data identifier (required)INSPECTORDIRECTTARGET - Direct target reference (required)AMITWEBSOCKETVARIABLEID - Variable identifier (required)AMITWEBSOCKETVARIABLETYPE - Variable type (required)AMITWEBSOCKETVARIABLEMATRIXROW - Matrix row index (optional)AMITWEBSOCKETVARIABLEMATRIXCOL - Matrix column index (optional)AMITWEBSOCKETVARIABLETPGTYPE - TPG type (optional)AMITWEBSOCKETVARIABLETPGMIN - TPG minimum value (optional)AMITWEBSOCKETVARIABLETPGMAX - TPG maximum value (optional)