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 | NoneNotifyOnlyHandleReplyHandleFullProcess | 处理程序的行为: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#
| 名称 | 类型 | 可能的值 | 必填 | 描述 |
|---|---|---|---|---|
| 类型 | 字符串 | U1、U2、U4、U8、I1、I2、I4、I8、F4、F8、A、BI、BO | 是 | 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
取消注册处理程序#
通知异常流程驱动程序在出现特定消息时停止引发该消息。
void connect.iot.driver.secsgem.unregisterHandler(data: UnregisterHandler)
示例#
通知 connect.iot.driver.secsgem.unregisterHandler
发送消息#
向设备发送消息(或回复)。
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版开始,驱动程序以预打包格式提供,这意味着第一次安装时不需要互联网连接,并且所需的所有补丁也都包括在内,特别是此部分提到的内存泄漏。此部分仅作为备注保留在此处。
由于已部署的组件存在内存泄漏问题,需要执行一些手动步骤来进行修复并重新编译该组件。
-
转到
node_modules\edge-js\src\CoreCLREmbedding -
编辑
coreclrnodejsfuncinvokecontext.cpp文件 -
转到第100行并添加以下行:
- 代码应如下所示:
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");
-
保存并关闭编辑器
-
返回
node_modules\edge-js目录 -
进入
tools目录 -
输入以下命令(将相应部分更改为您正在使用的节点版本)
- 如果上述命令由于缺少node-gyp依赖项而失败,请确保已安装该依赖项