跳转至

Connect IoT - SECS/GEM驱动程序#

SECS/GEM是半导体的设备接口协议,用于设备对主机的数据通信。在自动化制造产业中,该接口可用于启动和停止设备处理、收集测量数据、更改变量和选择产品配方。SECS(SEMI设备通信标准)/GEM(通用设备模型)标准将以明确定义的方式完成所有这些操作。

数据类型#

这些是受支持的特定数据类型:

名称 描述
U1 无符号整数1个字节
U2 无符号整数2个字节
U4 无符号整数4个字节
U8 无符号整数8个字节
I1 有符号整数1个字节
I2 有符号整数2个字节
I4 有符号整数4个字节
I8 有符号整数8个字节
F4 浮点数4个字节
F8 浮点数8个字节(双精度)
A ASCII 值(文本字符串)
BI 二进制值
BO 布尔值
L 列表

Table: SECS/GEM特定数据类型

Note

所有类型(L类型除外)均支持数组

异常流程参数#

异常流程支持以下参数,用于定义通信参数以及驱动程序的预期行为:

名称 类型 可能的值 默认值 描述
autoConfigure 布尔值 true 自动建立通信、设置联机并配置设备(报告、事件、警报、链接)
customLibrary 字符串 "" 使用自定义SECS/GEM事务以xsc文件格式输入自定义库的完整路径。留空则可使用默认库。注意:如果找不到库文件,通信尝试将失败。
variableIdType 枚举 U1
U2
U4
U8
I1
I2
I4
I8
F4
F8
A
BI
BO
U4 变量ID的类型(在链接/请求/设置值时使用)
reportIdType 枚举 U1
U2
U4
U8
I1
I2
I4
I8
F4
F8
A
BI
BO
U4 报告ID的类型(在创建/删除/链接时使用)
alarmIdType 枚举 U1
U2
U4
U8
I1
I2
I4
I8
F4
F8
A
BI
BO
U4 警报ID的类型(在启用/禁用时使用)
eventIdType 枚举 U1
U2
U4
U8
I1
I2
I4
I8
F4
F8
A
BI
BO
U4 事件ID的类型(在启用/禁用/链接时使用)
dataIdType 枚举 U1
U2
U4
U8
I1
I2
I4
I8
F4
F8
A
BI
BO
U4 数据ID的类型(用于包含DATAID项目的所有消息)
commandType 枚举 U1
U2
U4
U8
I1
I2
I4
I8
F4
F8
A
BI
BO
A 命令类型(在发送命令名称时使用,也称为“RCMD”)
commandParameterNameType 枚举 U1
U2
U4
U8
I1
I2
I4
I8
F4
F8
A
BI
BO
A 命令参数名称的类型(在发送命令时使用,也称为“CPNAME”)
protocol 枚举 HSMS
RS232
TCP
HSMS 用于连接设备的协议
connectionMode 枚举 Active
被动
Active (HSMS)用于连接的模式
Active 意味着设备必须充当服务器,集成必须充当客户端
Passive 意味着集成作为服务器工作,机器作为客户端工作
networkAddress 字符串 127.0.0.1 (HSMS)远程连接地址(主动模式)或本地连接地址(被动模式)
networkPort 整数 5000 (HSMS)远程连接端口(主动模式)或本地连接端口(被动模式)
serialPortName 字符串 (Serial/TCP)要使用的COM端口名称
autoBaudRate 布尔值 true (Serial/TCP)自动调整波特率
isSecsHost 布尔值 true (Serial/TCP)定义主机
baudRate 整数 9600 (Serial/TCP)连接速度(bps)
t1 整数 1 (Serial/TCP)T1超时(秒)
t2 整数 1 (Serial/TCP)T2超时(秒)
t3 整数 60 T3超时(秒)
t4 整数 15 T4超时(秒)
t5 整数 10 (HSMS)T5超时(秒)
t6 整数 10 (HSMS)T6超时(秒)
t7 整数 10 T7超时(秒)
t8 整数 10 T8超时(秒)
linkTestInterval 整数 60 (HSMS)测试链接的时间间隔(秒)
monitorEnabled 布尔值 false Secs/Gem底层通信调试模式
deviceId 整数 0 设备的标识符
retryLimit 整数 1 (Serial/TCP)最大重试次数
allowInterleave 布尔值 true (Serial/TCP)消息排序模式
allowMultipleOpen 布尔值 true (Serial/TCP)允许请求多条消息
allowDuplicatedBlocks 布尔值 true (Serial/TCP)允许重复的消息
deleteReportsMode 枚举 DeleteAllCreatedReports
DeleteCreatedReportsOneByOne
DeleteAllReports
DeleteAllCreatedReports 用于在设置阶段删除报告的方法
DeleteAllCreatedReports 删除与正在创建的报告具有相同ID的所有报告,所有报告在同一消息中
DeleteCreatedReportsOneByOne删除与正在创建的报告具有相同ID的所有报告,每个报告在单独的消息中
DeleteAllReports删除机器中存在的所有报告
enableDisableEventsMode 枚举 DisableAllEnableSelection
EnableAllDisableSelection
DisableAllEnableSelection 定义在设置阶段启用/禁用事件相关的行为
DisableAllEnableSelection首先禁用所有事件,然后启用在驱动程序定义中启用的事件
EnableAllDisableSelection 启用所有事件,然后仅禁用驱动程序定义中禁用的事件
enableDisableAlarmsMode 枚举 DisableAllEnableSelection
EnableAllDisableSelection
DisableAllEnableSelection 定义在设置阶段启用/禁用警报相关的行为
DisableAllEnableSelection 首先禁用所有事件,然后启用在驱动程序定义中启用的事件
EnableAllDisableSelection 启用所有事件,然后仅禁用驱动程序定义中禁用的事件

Table: SECS/GEM特定参数

扩展参数#

属性#

使用此协议的驱动程序定义中定义的所有自动化属性都将具有以下可自定义的扩展(额外)属性

名称 类型 可能的值 默认值 描述
variableType 枚举 DataVariable
StatusVariable
常量
DataVariable Secs/Gem变量类型。根据变量类型,设置/获取属性值将产生不同的Secs/Gem消息

Table: SECS/GEM特定扩展属性

事件#

驱动程序定义中定义的使用此异常流程的所有自动化事件都将具有以下可用于自定义的扩展(额外)属性

名称 类型 可能的值 默认值 描述
isAlarm 布尔值 false 将此事件标识为SecsGem中的警报

Table: SECS/GEM特定扩展事件

事件属性#

使用此协议的驱动程序定义中定义的所有自动化事件属性都将具有以下可自定义的扩展(额外)属性

名称 类型 可能的值 默认值 描述
reportId 字符串 要与事件链接的报告的ID(空白表示自动生成)。使用此属性以强制使用报告标识符。如果机器使用无法更改的预定义报告,则必须使用此属性。

命令#

驱动程序定义中定义的使用此异常流程的所有自动化命令都将具有以下可用于自定义的扩展(额外)属性

名称 类型 可能的值 默认值 描述
messageType 枚举 S2F41
S2F49
S2F41 用于命令的消息流/函数
successAckCodes 值数组 [0x00, 0x04] 可接受为成功消息的回复代码列表

Table: SECS/GEM特定命令

初始配置流程#

当已请求连接且设置了自动配置配置时,系统将执行以下消息交换来配置设备:

  • 建立通信(S1F13)
    • 应为S1F14且具有0x00 ACK
  • 设置联机(S1F17)
    • 预期S1F18将获得0x00或0x02 ACK
  • 基于deleteReportsMode设置删除报告(S2F33)
    • 应为S2F34且具有0x00 ACK
  • 定义报告(S2F33)
    • 应为S2F34且具有0x00 ACK
  • 将事件与报告链接(S2F35)
    • 应为S2F36且具有0x00 ACK
  • 基于enableDisableEventsMode设置启用/禁用事件(S2F37)
    • 应为S2F38且具有0x00 ACK
  • 基于enableDisableAlarmsMode设置启用/禁用警报(S5F3)
    • 应为S5F4且具有0x00 ACK

驱动程序扩展#

此异常流程驱动程序提供了一组扩展,允许自定义执行独立于关联的驱动程序定义的操作。这意味着您可以使用自定义注册驱动程序定义中不存在的事件。

这在访问共享的设备数据或者由于过于复杂而无法使用常规机制访问的设备数据时特别有用。在需要访问命名约定可能因设备而异的数据时也很有用。

对象#

对象是作为参数传递或作为结果值返回的结构。

RegisterHandler#

名称 类型 可能的值 描述
类型 字符串 要注册的SECS/GEM事务的名称(主要消息)。示例: S1F13
mode HandlerMode None
NotifyOnly
HandleReply
HandleFullProcess
处理程序的行为:
None:完全不进行处理。所有内容都由驱动程序来处理。甚至连通知都不会发送。
NotifyOnly:只通知消息。处理和回复均由驱动程序来处理。
HandleReply:驱动程序负责处理消息,自定义项负责提供回复(驱动程序不会直接向设备提供回复)
HandleFullProcess:自定义项负责处理消息和提供回复

Table: SECS/GEM特定处理程序注册

UnregisterHandler#

名称 类型 描述
类型 字符串 要注销通知的事件的ID。示例: S1F13

Table: SECS/GEM特定处理程序取消注册

SecsMessage#

名称 类型 必填 描述
name 字符串 要发送的消息的名称
description 字符串 消息的描述
类型 字符串 SxFy格式表示的SECS/GEM消息类型。示例S1F13
item SecsItem 是/否 消息的根节点。如果未使用该项,将使用库中的消息。

Table: SECS/GEM特定SecsMessage

SecsItem#

名称 类型 可能的值 必填 描述
类型 字符串 U1U2U4U8I1I2I4I8F4F8ABIBO SECS/GEM项目的数据类型
name 字符串 项目的名称
comment 字符串 添加到项目的备注
任何 项目的值(可以是数组)

Table: SECS/GEM特定SecsItem

SecsTransaction#

名称 类型 描述
ID 字符串 消息的ID。在通信生命周期中唯一。
systemBytes 缓冲区 基于SECS/GEM的消息ID。主机和设备有自己的编号且可以重复
needsReply 布尔值 指示消息是否需要发送回复的标志
primary SecsMessage 接收到的消息
secondary SecsMessage 将发送的回复的模板

Table: SECS/GEM特定SecsTransaction

方法#

注册处理程序#

在发生特定SECS/GEM消息类型时通知协议驱动程序引发该事件。

void connect.iot.driver.secsgem.registerHandler(data: RegisterHandler)

Note

事件将发布到侦听器connect.iot.driver.secsgem.receivedMessage.并附加注册的类型。示例: connect.iot.driver.secsgem.receivedMessage.S1F13

示例#

通知 connect.iot.driver.secsgem.registerHandler

{
  "type": "S1F13",
  "mode": "HandleFullProcess"
}

取消注册处理程序#

通知异常流程驱动程序在出现特定消息时停止引发该消息。

void connect.iot.driver.secsgem.unregisterHandler(data: UnregisterHandler)

示例#

通知 connect.iot.driver.secsgem.unregisterHandler

{
  "type": "S1F13"
}

发送消息#

向设备发送消息(或回复)。

any connect.iot.driver.secsgem.sendMessage (data: SecsMessage)

示例#

SendRequest connect.iot.driver.secsgem.sendMessage

{
    "type": "S1F13",
    "item": {
        "type": "L",
        "value": [ {
            "type": "A",
            "name": "MLDN",
            "value": "Equipment TopModel"
        }, {
            "type": "A",
            "name": "SOFTREV",
            "value": "Software Rev 1.0"
        } ]
    }
}

示例(回复)#

SendRequest connect.iot.driver.secsgem.sendMessage

{
    "type": "REPLY_1234567890",
    "item": {
        "type": "L",
        "value": [ {
            "type": "BI",
            "name": "COMMACK",
            "value": "0x00"
        }
    }
}

内部删除报告#

基于deleteReportsMode设置发送“删除报告”消息(S2F33)。如果您希望发送一些自定义握手流,则使用此功能。

bool connect.iot.driver.secsgem.internalDeleteReports()

内部定义报告#

发送“定义报告”消息(S2F33)。如果您希望发送一些自定义握手流,则使用此功能。

bool connect.iot.driver.secsgem.internalDefineReports()

内部链接事件#

发送“将事件与报告链接”消息(S2F35)。如果您希望发送一些自定义握手流,则使用此功能。

bool connect.iot.driver.secsgem.internalLinkEvents()

内部启用禁用事件#

基于enableDisableEventsMode设置发送“启用/禁用事件”消息(S2F37)。如果您希望发送一些自定义握手流,则使用此功能。

bool connect.iot.driver.secsgem.internalEnableDisableEvents()

内部启用禁用警报#

基于enableDisableAlarmsMode设置发送“启用/禁用警报”消息(S5F3)。如果您希望发送一些自定义握手流,则使用此功能。

bool connect.iot.driver.secsgem.internalEnableDisableEvents()

事件#

connect.iot.driver.secsgem.receivedMessage.*#

只有在先注册事件后,才会引发事件。事件的内容类型为SecsTransaction,其中相关的值将因触发的事件而异。

触发的事件的全名将附加先前注册的事件的全名。

示例(假定之前已使用registerHandler注册S1F13消息):

{
    "id": "1234567890",
    "systemBytes": [0x00, 0x01, 0x02, 0x03],
    "needsReply": true,
    "primary": {
        "type": "S1F13",
        "item": {
            "type": "L",
            "value": [ {
                "type": "A",
                "name": "MLDN",
                "value": "Equipment TopModel"
            }, {
                "type": "A",
                "name": "SOFTREV",
                "value": "Software Rev 1.0"
            } ]
        }
    },
    "secondary": {
        "type": "S1F14",
        "item": {
            "type": "L",
            "value": [ {
                "type": "BI",
                "name": "COMMACK",
                "value": "0x00"
            }
  }
    }
}

要发送此消息的回复(并替换模板回复),请使用“发布”/“发送请求” connect.iot.driver.secsgem.sendMessage

{
    "type": "REPLY_1234567890",
    "item": {
        "type": "L",
        "value": [ {
            "type": "BI",
            "name": "COMMACK",
            "value": "0x01"
        }
    }
}

内存泄漏修复手册说明#

Note

从7.0.0版开始,驱动程序以预打包格式提供,这意味着第一次安装时不需要互联网连接,并且所需的所有补丁也都包括在内,特别是此部分提到的内存泄漏。此部分仅作为备注保留在此处。

由于已部署的组件存在内存泄漏问题,需要执行一些手动步骤来进行修复并重新编译该组件。

  1. 转到 node_modules\edge-js\src\CoreCLREmbedding

  2. 编辑coreclrnodejsfuncinvokecontext.cpp文件

  3. 转到第100行并添加以下行:

CoreClrFunc::FreeMarshalData(context->Payload, context->PayloadType);
  1. 代码应如下所示:
DBG("CoreClrNodejsFuncInvokeContext::InvokeCallback - Calling JavaScript function");
Nan::Call(Nan::New(*(context->FunctionContext->Func)), Nan::GetCurrentContext()->Global(), 2, argv);
CoreClrFunc::FreeMarshalData(context->Payload, context->PayloadType);
DBG("CoreClrNodejsFuncInvokeContext::InvokeCallback - Called JavaScript function");
  1. 保存并关闭编辑器

  2. 返回node_modules\edge-js目录

  3. 进入tools目录

  4. 输入以下命令(将相应部分更改为您正在使用的节点版本)

node -v
build.bat release 8.14.0
  1. 如果上述命令由于缺少node-gyp依赖项而失败,请确保已安装该依赖项
npm install -g node-gyp