跳转至

物联网运行时组件配置#

配置文件是一个JSON结构化文件,所有组件(管理器、监视器、控制器、驱动)都将使用该文件。它允许插入某些令牌,根据具体上下文,下表对这些令牌进行了说明:

名称 类型 用法 描述
applicationName Application ${applicationName} 当前应用的名称
pid Application ${pid} 当前应用的进程ID
componentId Application ${componentId} 正在运行的组件的名称(AutomationManagerAutomationMonitorAutomationControllerDriverCsv等)
entityName Application ${entityName} 当前应用的上下文实体的名称
tmp OperatingSystem ${tmp} 用户临时目录
pwd OperatingSystem ${pwd} 正在运行的脚本的位置
cwd OperatingSystem ${cwd} 工作目录(执行命令的位置)

Table: 物联网模块配置令牌

基本结构#

名称 类型 默认值 描述
ID 字符串 进程的标识符
monitorHost 字符串 "localhost" 本地监视器侦听器的地址
monitorPort 整数 0 本地监视器侦听器的端口。对于自动端口分配,则为0
cache 字符串 下载和执行包的本地路径
monitorApplication 字符串 ""${pwd}\monitor.js" 监视器进程的完整路径
repository Repository 有关包处理的代码库
system System 系统访问设置
storage Storage 用于配置持久性位置的部分
logging Logging 日志记录机制设置
monitor monitor 监视器进程特定设置
controller controller 控制器进程特定设置
driver driver 驱动进程特定设置

Table: 物联网模块基本结构

代码库结构#

代码库表示监视器进程处理包所在位置(远程)和存储位置(本地)的方式。

名称 类型 可能的值 默认值 描述
类型 字符串 Npm
Directory
代码库类型
- Npm - 使用NPM服务器
- Directory - 使用包的本地目录和基于json的数据库描述符
- System - 从 MES 下载包(从下面详述的系统结构中检索设置)
settings 对象 代码库设置(取决于类型)

Table: 物联网模块代码库结构

键入Npm设置#

名称 类型 默认值 描述
url 字符串 NPM服务器所在的网址(包括端口)
令牌 字符串 用于身份验证的可选不记名令牌

Table: Npm特定设置

键入Directory设置#

名称 类型 默认值 描述
路径 字符串 包所在的目录。必须可被进程访问,目前支持UNC

Table: 目录特定设置

目录示例#

"repository": {
    "type": "Npm",
    "settings": {
        "url": "http://cmflab:4873/",
        "token": "asjndlkjhwquelwqhjoidwquofdhwqudfW"
    }
}
"repository": {
    "type": "Directory",
    "settings": {
        "path": "D:\\MyDirectoryRepository"
    }
}

存储结构#

名称 类型 可能的值 默认值 描述
类型 字符串 Directory Directory 持久性位置的类型
设置 对象 存储类型设置
settings\path 字符串 将存储持久性数据的基本路径。
支持OperatingSystem标记
settings\retentionTime Integer
string
"30d" 存储数据的秒数。0表示永远。
支持带有用来表示时间单位的尾随标记的字符串:
s - 秒
m - 分钟
h - 小时
d - 天
w - 周(7天)
m - 月(30天)

Table: 物联网模块存储结构

存储结构示例#

"storage": {
    "type": "Directory",
    "settings": {
        "path": "D:/Temp/Persistency",
        "retentionTime": 3600
    }
}
"storage": {
    "type": "Directory",
    "settings": {
        "path": "${tmp}/Persistency",
        "retentionTime": "10d"
    }
}

系统结构#

名称 类型 默认值 描述
tenantName 字符串 组件要使用的系统租户名称
地址 字符串 "localhost"
端口 整数
timeout 整数
useSsl 布尔值 false
isLoadBalancingEnabled 布尔值 false 配置是否指向负载均衡
authentication Authentication 对象

Table: 物联网模块系统结构

Authentication结构#

名称 类型 可能的值 默认值 描述
类型 字符串 Password
SecurityPortal
要使用的身份验证类型
设置 对象 身份验证设置(取决于类型)

Table: 身份验证结构

Password类型身份验证设置#

名称 类型 默认值 描述
字符串 用户网域
用户名 字符串 用户名
密码 字符串 用户密码

Table: 密码类型身份验证结构

SecurityPortal类型身份验证设置#

名称 类型 默认值 描述
clientId 字符串 访问(MES)的客户端的ID
访问令牌 字符串 安全门户生成的长期访问令牌。在使用安全门户的非交互式使用场景中设置
openIdConfiguration 字符串 可访问OpenID端点的网址。示例: http://cmflab:11000/tenant/CriticalManufacturing/.well-known/openid-configuration

Table: 安全门户类型身份验证结构

示例#

"system": {
    "tenantName": "CriticalManufacturing",
    "address": "CMFLAB",
    "port": 8093,
    "timeout": 60000,
    "useSsl": false,
    "isLoadBalancingEnabled": false,
    "authentication": {
        "_type": "Password",
        "settings": {
            "domain": "cmf",
            "username": "administrator",
            "password": "1234567890"
        }
    }
}
"system": {
    "tenantName": "CriticalManufacturing",
    "address": "CMFLAB",
    "port": 8093,
    "timeout": 60000,
    "useSsl": false,
    "isLoadBalancingEnabled": false,
    "authentication": {
        "type": "SecurityPortal",
        "settings": {
            "clientId": "MES",
            "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsInRlbmFudE5hbWUiOiJDcml0aWNhbE1hbnVmYWN0dXJpbmcifQ.eyJjbGllbnRJZCI6Ik1FUyIsInRlbmFudE5hbWUiOiJDcml0aWNhbE1hbnVmYWN0dXJpbmciLCJzdWIiOiJDTUZcXEFkbWluaXN0cmF0b3IiLCJ1c2VyQWNjb3VudCI6IkNNRlxcQWRtaW5pc3RyYXRvciIsImlhdCI6MTU2MjE3MTU1OSwiZXhwIjoxNjYyMTc1MTU5LCJhdWQiOiJBdXRoUG9ydGFsIiwiaXNzIjoiQXV0aFBvcnRhbCJ9.iiN1Gg7vfW9dYApPCMoLBGgff9IR-uH-GZaBc5QvyGs",
            "openIdConfiguration": "http://cmflab:9091/tenant/CriticalManufacturing/.well-known/openid-configuration"
        }
    }
}

日志记录结构#

日志记录配置允许同时配置多个不同的日志程序,这意味着可以为每种类型的日志程序配置不同的选项。

名称 类型 可能的值 默认值 描述
ID 字符串 日志程序的标识符;如果未配置,则同一种类型只允许有一个日志程序
类型 字符串 Console
File
Http
传输类型
options 对象 传输选项,每种类型的传输的选项各不相同,请参阅下文每种传输的相关信息
applications 字符串数组 AutomationMonitor
AutomationController
AutomationManager
DriverSecsGem
DriverOpcUA
DriverMqtt
DriverBle
DriverCsvFile
DriverRawFile
DriverKeyboardWedge
DriverOib
DriverOpcDA
DriverSerial
DriverTcpIp
通配符可以配置全部应用或按名称进行过滤,例如:“Driver*

Table: 物联网模块日志记录结构

通用传输选项#

这些选项适用于所有类型:

名称 类型 可能的值 默认值 描述
级别 字符串 debug
info
warning
error
"info" 此传输应记录的消息的最低级别。如果定义了info级别,则系统将记录infowarningerror级别的所有条目,并将忽略debug条目。
label 字符串 "${applicationName}" 要在日志条目的开头附加的标签(如果在格式中使用了标签)
format 字符串 "${log.timestamp}${log.level}:${log.message}" 日志行的格式
时间戳 布尔值 true 指示是否应在输出前加上时间戳的标志。如果指定了函数,则将使用其返回值而不是时间戳
timestampFormat 字符串 "YYYY-MM-DD HH:mm:ss.SSS" 日志条目中时间戳的格式。有关完整格式的信息,请参阅https://github.com/taylorhakes/fecha#formatting-tokens ⧉
maxLength 整数 0 要记录的消息条目的最大长度(<=0表示忽略)。如果条目长度大于该值,系统将记录消息开头的(maxLength的70%)个字符和最后的(maxLength的30%)个字符。此设置有助于将大量通信日志保持在更可控的状态。
specificLevelLock 布尔值 false 仅记录指定的详细程度级别。如果将此项设置为true,则系统将忽略大于level的级别。

Table: 物联网模块通用传输选项

控制台传输选项#

此传输将所有消息记录到应用控制台。

名称 类型 默认值 描述
colorize 布尔值 true 指示是否应对输出着色的标志。
colorizeMessage 布尔值 true 着色是应用于完整消息还是仅应用于特定详细程度级别。

Table: 物联网模块控制台传输选项

示例#

{
    "type": "Console",
    "options": {
        "level": "debug",
        "prettyPrint": true,
        "colorizeMessage": true
    },
    "applications": [ "*" ]
}

文件传输选项#

从名称即可看出,此传输会将所有消息记录到文件系统。

名称 类型 默认值 描述
frequency 字符串 表示轮替频率的字符串。如果您希望进行定时轮替,而不是在特定时间进行轮替,此设置将非常有用。有效值为'#m''#h'(例如,“5m”或“3h”)。留空则会根据datePattern来确定轮替时间。
datePattern 字符串 "YYYY-MM-DD" 表示要用于轮替的moment.js日期格式的字符串。此字符串中使用的元字符将决定文件轮替的频率。例如,如果您的datePattern只是简单的'HH',则最终将有24个日志文件每天被收集并附加到系统中。
filename 字符串 "LogFile_${date}.log" 要记录到的文件的文件名。此文件名可以包括${date}占位符,该占位符将在文件名中包含该时刻的格式化datePattern
dirname 字符串 "." 要将日志文件保存到的目录的目录名
maxSize 字符串 "10m" 文件的最大大小,超过此大小后文件将被轮替。此设置可以是字节数,也可以KB、MB和GB作为单位。如果使用单位,请添加kmg作为后缀。这些单位需要直接跟在数字后面。
maxFiles 字符串 "30d" 要保留的日志数上限。如果未设置,则不会移除任何日志。此设置可以是文件数或天数。如果使用天数,请添加d作为后缀
option 对象 { flags: 'a', mode: 0o777 } 类似https://nodejs.org/api/fs.html#fs_fs_createwritestream_path_options ⧉的对象,表示应传递到文件流的其他选项

Table: 物联网模块文件传输选项

文件传输选项示例#

{
    "id": "MyFileLogger01",
    "type": "File",
    "options": {
        "filename": "${applicationName}_${date}.log",
        "dirname": "${tmp}/JSManager01/Logs/${applicationName}",
        "level": "debug",
        "timestampFormat": "HH:mm:ss.SSSSS",
        "maxSize": "10m",
        "maxFiles": 5,
        "maxLength": 5000,
        "specificLevelLock": false
    },
    "applications": [ "AutomationMonitor", "AutomationManager" ]
}

HTTP传输选项#

HTTP传输是从任意HTTP端点(最好使用winstond)记录、查询和流式传输日志的通用方式。它将使用传递给node.js http或https请求的选项:

名称 类型 默认值 描述
主机 字符串 "localhost" HTTP日志记录端点的远程主机。
端口 整数 80443 HTTP日志记录端点的远程端口。
路径 字符串 "/" HTTP日志记录端点的远程URI。
auth 对象 None 表示用于HTTP基本身份验证的用户名和密码的对象。
ssl 布尔值 false 指示是否应使用HTTPS的值

Table: 物联网模块HTTP传输选项

HTTP传输选项示例#

{
    "id": "MyHttp01",
    "type": "Http",
    "options": {
        "host": "localhost",
        "port": "80",
        "path": "logger",
    },
    "applications": [ "AutomationController" ]
}

监视器结构#

可选的监视器部分专门用于监视器进程,其他应用不会使用该模块。

名称 类型 默认值 描述
notifyBeforeKill 布尔值 true 用于指示是在终止进程之前先发出通知(以便这些进程能够正确清理所有资源、断开与设备的连接等)还是直接终止进程的标志。
killNotificationTimeout 整数 10000 等待“即将终止”的进程回复已完成清理并准备好被终止的毫秒数。
retryAttempts 整数 30 当受重试机制保护的调用失败时,失败前执行的次数
sleepBetweenAttempts 整型 1000 当受重试机制保护的调用失败时,重试之间的等待时间
processCommunication SslConfig 允许进程间通信使用SSL的配置(监视器<->控制器和监视器<->驱动)

Table: 物联网模块监视器结构

监视器结构示例#

"monitor": {
    "notifyBeforeKill": "true",
    "killNotificationTimeout": 30000,
    "retryAttempts": 45,
    "sleepBetweenAttempts": 1000,
    "processCommunication": {
        "useSsl": true,
        "privateKey": "C:\\Users\\jpsantos\\Desktop\\ssl\\certificates\\key.pem",
        "certificate": "C:\\Users\\jpsantos\\Desktop\\ssl\\certificates\\cert.pem",
        "certificateAuthority": "C:\\Users\\jpsantos\\Desktop\\ssl\\certificates\\ca-cert.pem"
    }
}

控制器结构#

可选的控制器部分专门用于控制器进程,其他应用不会使用该模块。

名称 类型 默认值 描述
retryAttempts 整数 30 当受重试机制保护的调用失败时,失败前执行的次数
sleepBetweenAttempts 整数 1000 当受重试机制保护的调用失败时,重试之间的等待时间
profilerSessionsLocation 字符串 分析器会话的存储位置

Table: 物联网模块控制器结构

控制器结构示例#

"controller": {
    "retryAttempts": 45,
    "sleepBetweenAttempts": 1000,
    "profilerSessionsLocation": "C:\\Users\\jpsantos\\tempController"
}

驱动结构#

可选的驱动部分专门用于驱动进程,其他应用不会使用该模块。

名称 类型 默认值 描述
retryAttempts 整数 30 当受重试机制保护的调用失败时,失败前执行的次数
sleepBetweenAttempts 整数 1000 当受重试机制保护的调用失败时,重试之间的等待时间
processCommunication SslConfig 允许进程间通信使用SSL的配置(驱动<->控制器)

Table: 物联网模块驱动结构

驱动结构示例#

"driver": {
    "retryAttempts": 45,
    "sleepBetweenAttempts": 1000,
    "processCommunication": {
        "useSsl": true,
        "privateKey": "C:\\Users\\jpsantos\\Desktop\\ssl\\certificates\\key.pem",
        "certificate": "C:\\Users\\jpsantos\\Desktop\\ssl\\certificates\\cert.pem",
        "certificateAuthority": "C:\\Users\\jpsantos\\Desktop\\ssl\\certificates\\ca-cert.pem"
    }
}

SslConfig结构#

当进程之间的通信需要使用SSL时,请使用这些设置。

名称 类型 默认值 描述
useSsl 布尔值 false 在组件通信时使用SSL通信
rejectUnauthorized 布尔值 false 如果不为false,服务器将自动拒绝具有无效证书的客户端。
允许绕过错误:如果设置为false,系统将以完全不安全的方式绕过“监视器连接错误:无法验证第一个证书”!
此外,如果要忽略环境变量“NODE_TLS_REJECT_UNAUTHORIZED=”,则可将rejectUnauthorized设置为true
在自签名证书上,可以通过certificateAuthority选项传递正确的CA(证书授权机构)证书
privateKey 字符串 PEM编码的SSL私钥值或包含密钥值的文件的完整路径
certificate 字符串 PEM编码的SSL证书值或包含证书值的文件的完整路径
certificateAuthority 字符串 PEM编码的SSL自定义证书授权机构(CA)值或包含证书值的文件的完整路径

Table: 物联网模块SslConfig结构

SslConfig结构示例#

{
    "useSsl": true,
    "privateKey": "C:\\Users\\jpsantos\\Desktop\\ssl\\certificates\\key.pem",
    "certificate": "C:\\Users\\jpsantos\\Desktop\\ssl\\certificates\\cert.pem",
    "certificateAuthority": "C:\\Users\\jpsantos\\Desktop\\ssl\\certificates\\ca-cert.pem"
}

完整示例#

以下JSON文档展示了一个可能的配置:

{
   "id":"JSManager01",
   "cache":"D:/Temp/JSManager01/packages",
   "hostName":"localhost",
   "monitorApplication":"N:/Product/72x/IoMT/src/monitor/src/index.js",
   "monitor":{
      "notifyBeforeKill":"true",
      "killNotificationTimeout":30000,
      "retryAttempts":45,
      "sleepBetweenAttempts":1000,
      "processCommunication":{
         "useSsl":true,
         "privateKey":"C:\\Users\\jpsantos\\Desktop\\ssl\\certificates\\key.pem",
         "certificate":"C:\\Users\\jpsantos\\Desktop\\ssl\\certificates\\cert.pem",
         "certificateAuthority":"C:\\Users\\jpsantos\\Desktop\\ssl\\certificates\\ca-cert.pem"
      }
   },
   "controller":{
      "retryAttempts":45,
      "sleepBetweenAttempts":1000,
        "profilerSessionsLocation": "C:\\Users\\jpsantos\\tempController"
   },
   "repository":{
      "type":"Directory",
      "settings":{
         "path":"D:\\Temp\\fakeNPM"
      }
   },
   "system":{
      "tenantName":"CriticalManufacturing",
      "address":"CMFLAB",
      "port":8093,
      "timeout":60000,
      "useSsl":false,
      "isLoadBalancingEnabled":false,
      "authentication":{
         "type":"SecurityPortal",
         "settings":{
            "clientId":"MES",
            "accessToken":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsInRlbmFudE5hbWUiOiJDcml0aWNhbE1hbnVmYWN0dXJpbmcifQ.eyJjbGllbnRJZCI6Ik1FUyIsInRlbmFudE5hbWUiOiJDcml0aWNhbE1hbnVmYWN0dXJpbmciLCJzdWIiOiJDTUZcXEFkbWluaXN0cmF0b3IiLCJ1c2VyQWNjb3VudCI6IkNNRlxcQWRtaW5pc3RyYXRvciIsImlhdCI6MTU2MjE3MTU1OSwiZXhwIjoxNjYyMTc1MTU5LCJhdWQiOiJBdXRoUG9ydGFsIiwiaXNzIjoiQXV0aFBvcnRhbCJ9.iiN1Gg7vfW9dYApPCMoLBGgff9IR-uH-GZaBc5QvyGs",
            "openIdConfiguration":"http://cmflab:9091/tenant/CriticalManufacturing/.well-known/openid-configuration"
         }
      }
   },
   "storage":{
      "type":"Directory",
      "settings":{
         "path":"${temp}/Persistency",
         "retentionTime":3600
      }
   },
   "logging":[
      {
         "type":"Console",
         "options":{
            "level":"debug",
            "prettyPrint":true,
            "colorizeMessage":true
         },
         "applications":[
            "*"
         ]
      },
      {
         "id":"file01",
         "type":"File",
         "options":{
            "filename":"${applicationName}_${date}.log",
            "dirname":"d:/Temp/JSManager01/Logs/${entityNameNormalized}/${componentId}",
            "level":"debug",
            "timestampFormat":"HH:mm:ss.SSSSS",
            "maxSize":"10m",
            "maxFiles":5
         },
         "applications":[
            "Driver*",
            "AutomationController"
         ]
      },
      {
         "id":"file02",
         "type":"File",
         "options":{
            "filename":"${applicationName}_${date}.log",
            "dirname":"d:/Temp/JSManager01/Logs/${applicationName}",
            "level":"debug",
            "timestampFormat":"HH:mm:ss.SSSSS",
            "maxSize":"10m",
            "maxFiles":5,
            "maxLength":5000,
            "specificLevelLock":false
         },
         "applications":[
            "AutomationMonitor",
            "AutomationManager"
         ]
      }
   ]
}