Connect IoT - 串行驱动程序#
串行通信(符合RS232标准)是一种通信接口,该接口一次输入或输出一位信息。
它是目前仍在各种设备中广泛使用的通信接口(如果不是本机使用,则可通过USB串行转换器进行使用)。
在该驱动程序上,解析器用于获取原始的串行数据并将它们转换为可用的消息。
数据类型#
这些是受支持的特定数据类型:
| 名称 | 描述 |
|---|---|
| 字符串 | 字符串值 |
| 布尔值 | 布尔值 |
| 整数 | 整数值 |
| 十进制 | 十进制值 |
| 对象 | 结构化值 |
异常流程参数#
异常流程支持以下参数:
| 名称 | 类型 | 可能的值 | 默认值 | 描述 |
|---|---|---|---|---|
| 端口名称 | 字符串 | COM1 | 要连接的端口的名称(例如:COM1、/dev/tty-usbserial1等)。驱动程序启动时,系统将打印可用端口列表。 | |
| BaudRate | 整数 | 9600 | 要打开的端口的波特率。它应是某个常用的波特率,例如110、300、1200、2400、4800、9600、14400、19200、38400、57600或115200。每个平台都会尽可能地支持自定义波特率。连接到串行端口的设备不能保证支持所请求的波特率,即使端口本身支持该波特率也是如此 | |
| 数据位 | 整数 | 8 | 必须是以下各项之一:8、7、6或5 | |
| 停止位 | 整数 | 1 | 必须是以下各项之一:1或2 | |
| 串行奇偶校验 | 枚举 | none 偶数 奇数 标记 空间 | none | 串行奇偶校验配置 |
| 流量控制握手 | 枚举 | none RTS/CTS XON/XOFF | none | 通过“硬件”、“软件”或“无”选项进行流量控制。 |
| highWaterMark | 整数 | 65536 | 读取和写入缓冲区的大小 | |
| parserType | 枚举 | Raw Readline ByteLength Delimiter InterByteTimeout 准备就绪 Regex | ReadLine | 选择用于确定何时识别从设备接收到的数据并准备好处理的解析器(有关详细信息,请查看每个解析器的特定部分)。 |
| delimiter | 字符串 | "\r\n" | 用于Readline、Delimiter、Ready和RegularExpression解析器:用于拆分传入文本的字符串分隔符。简单的字符串替换可以像\r\n\t一样使用如果解析器是RegularExpression,则可以使用正则表达式,例如:[\r\n]+ | |
| encoding | 枚举 | ascii utf8 utf16le ucs2 base64 binary hex | ascii | 用于Readline和Regex解析器:接收到的数据的文本编码 |
| byteLengthNumber | 整数 | 8 | 用于ByteLength解析器:触发事件前要接收的字节数 | |
| timeoutValue | 整数 | 1000 | 用于InterByteTimeout解析器:发出数据前的静默时间段(以毫秒为单位) | |
| maxBufferSize | 整数 | 65536 | 在解析器中使用:InterByteTimeout:发出数据前的最大字节数 | |
| 发送时默认转换非可打印ASCII字符 | 布尔值 | False | 对发送的值执行字符替换。用相应的ASCII值替换ASCII令牌名称。(请参阅表非可打印ASCII字符 - 令牌/值替换)。 | |
| 接收时默认转换非可打印ASCII字符 | 布尔值 | False | 对收到的值执行字符替换。将不可打印的ASCII代码替换为对应的<NAME>。(请参阅表非可打印ASCII字符 - 令牌/值替换)。 | |
| 默认命令消息开始 | 字符串 | 命令开头使用的默认值 | ||
| 默认命令消息分隔符 | 字符串 | 命令参数之间使用的默认值 | ||
| 默认命令消息结束 | 字符串 | 命令末尾使用的默认值 |
解析器#
解析器是指用于处理传入数据的转换流的集合。以下解析器可用:
| 名称 | 参数 | 描述 |
|---|---|---|
| Raw | 接收到的任何数据都将立即处理。 | |
| Readline | delimiter | 在接收到配置的换行分隔符后发出数据。 |
| ByteLength | byteLengthSize | 在接收到特定字节数后立即发出数据。 |
| Delimiter | delimiter | 每次接收到特定序列时都发出数据。 |
| 字节间超时 | timeoutValue maxBufferSize | 在指定的时间内未接收任何字节或缓冲区已满后,将发出数据。 |
| 准备就绪 | delimiter | 在发出就绪事件和发出数据事件之前,直到一系列就绪字节(与delimiter参数匹配)才会发出数据 |
| Regex | delimiter encoding | 正则表达式(分隔符参数)用于拆分传入文本。匹配项将作为要处理的数据发出。 |
扩展参数#
与其他异常流程驱动程序一样,还需要一些额外参数来对预期行为提供更多上下文。
属性#
| 名称 | 类型 | 可能的值 | 默认值 | 描述 |
|---|---|---|---|---|
| identifierType | 枚举 | 无 RegularExpression Token | 无 | 用于标识属性的方法。如果使用None,则将忽略identifierValue,并且所有消息都将更新该属性。Token 类型将仅匹配消息开头的identifierValue文本,而RegularExpression将匹配配置的正则表达式identifierValue字段。 |
| identifierValue | 字符串 | 属性标识符的值。对RegularExpression(输入有效的正则表达式)或Token(输入预期文本)identifierType有效。 | ||
| convertIdentifierNonPrintableASCIIChars | 布尔值 | false | 如果为true,则对Identifier Value执行字符替换。将不可打印的ASCII代码替换为对应的<NAME>。(请参阅表非可打印ASCII字符 - 令牌/值替换)。 |
备注/行为#
- 属性上使用的标识符用于标识属性,而不是从属性中提取任何类型的信息。要从属性值中提取信息,可以使用控制器工作流(例如类型为
Regular Expression的Regular Evaluator任务)。
事件#
| 名称 | 类型 | 可能的值 | 默认值 | 描述 |
|---|---|---|---|---|
| triggerMode | 枚举 | AllValues DifferentValues Periodic | AllValues | 确定数据作为事件发出的方式和时间。AllValues:每次收到触发器属性值时DifferentValues:每次收到不同的触发器属性值时Periodic:定期(每隔periodicDataInterval,以毫秒为单位),忽略属性会更新周期或值。 |
| periodicDataInterval | 整数 | 1000 | 发布数据的毫秒数。仅对triggerMode有效 Periodic |
事件属性#
| 名称 | 类型 | 可能的值 | 默认值 | 描述 |
|---|---|---|---|---|
| isTrigger | 布尔值 | true | 接收到属性(事件触发器模式AllValues)或值更改(事件触发器模式AllValues或DifferentValues)时触发事件 |
备注/行为#
- 当事件具有多个属性带
isTrigger标志时:- 每次任何属性值更改时都会触发它。
- 此时将请求其他属性的值。
- 可能有多个触发器具有相同的设置值(因为它们未更改)。如果不希望出现这种行为,请将其分成多个事件,每个事件都有自己的触发器集。
- 如果事件没有具有isTrigger标志的属性,则从不触发(除非事件定义为
Periodic)
命令#
| 名称 | 类型 | 可能的值 | 默认值 | 描述 |
|---|---|---|---|---|
| 命令结构行为 | 枚举 | UseEquipmentSetupTaskSettings UseCurrentCommandSettings RawCommandParameters RawCommand | UseEquipmentSetupTaskSettings | 命令可以使用来自设备设置任务(使用设备设置任务令牌)的配置(令牌和ASCII转换定义)或对每个命令进行自定义(使用当前命令令牌)。在RawCommand模式下,不使用令牌,发送设备ID数据。在RawCommandParameters模式下,命令参数串联并发送。 |
| 命令设备ID用法 | 枚举 | AtBeginning AtEnd NotUsed | AtBeginning | 命令设备ID可以在已发送消息的开头、已发送消息的结尾使用,也可以根本不使用,并且该消息将只包含命令参数。请注意,如果commandBehavior是RawCommand或RawCommandParameters,则忽略此字段。 |
| 对发送值转换不可打印的ASCII字符 | 布尔值 | False | 如果为true,则对命令发送值执行令牌替换。用字符值替换ASCII令牌名称。(请参阅表非可打印ASCII字符 - 令牌/值替换)。 | |
| 消息启动令牌 | 字符串 | 命令开头使用的值 | ||
| 消息分隔符令牌 | 字符串 | 命令参数之间使用的值 | ||
| 消息结束令牌 | 字符串 | 消息结束令牌 | ||
| Reply Expected | 布尔值 | False | 如果此命令需要回复,则应为true | |
| 对回复内容转换不可打印的ASCII字符 | 布尔值 | False | 如果为true,则对命令回复接收的值执行字符替换。将回复内容中不可打印的ASCII代码替换为对应的<NAME>(请参阅表非可打印ASCII字符 - 令牌/值替换)。 | |
| Reply TimeOut (ms) | 整数 | 1000 | 命令答复以指定的毫秒值超时。 |
备注/行为#
- 如果
Reply Expected为true,则在等待Reply TimeOut (ms)时不会发送其他命令(将在收到回复或达到超时值后排队并发送) - 如果
Reply TimeOut等于或小于0,则加载默认值(1秒)
示例方案#
命令设备ID用法#
| 所选选项 | 命令发送的值 |
|---|---|
| AtBeginning | <StartToken>CommandDeviceID<SeparatorToken>Parameter_1_Value<SeparatorToken>Parameter_2_Value<EndToken> |
| AtEnd | <StartToken>Parameter_1_Value<SeparatorToken>Parameter_2_Value<SeparatorToken>CommandDeviceID<EndToken> |
| NotUsed | <StartToken><SeparatorToken>Parameter_1_Value<SeparatorToken>Parameter_2_Value<EndToken> |
对发送值转换不可打印的ASCII字符#
| 转换前 | 转换后 |
|---|---|
| <DeviceID<TAB>Parameter_1_Value> | <DeviceID\tParameter_1_Value> |
- 注意:
- 起始令牌: <
- 分隔符令牌: <TAB>
- 结束令牌: >
命令参数#
| 名称 | 类型 | 可能的值 | 默认值 | 描述 |
|---|---|---|---|---|
| 参数类型 | 枚举 | CommandParameter RawCommandParameter | CommandParameter | 允许将此参数配置为常规命令参数或RAW命令。如果Command Structure Behavior是RawCommandParameters,则至少应有一个参数类型为RawCommandParameter(如果定义了多个,则执行串联)。 |
示例#
RAW命令示例#
参数#
- 测试方案:
- 命令结构行为:RawCommandParameters
- 参数01:参数类型:CommandParameter
- 参数01值:TestPar_1
- 参数02:参数类型:RawCommandParameter
- 参数02值:TestRaw_2
- 参数03:参数类型:RawCommandParameter
- 参数03值:TestRaw_3
- 起始令牌: <
- 分隔符令牌: <TAB>
- 结束令牌: >
- 发送的值:
- TestRaw_2TestRaw_3
DeviceId#
- 测试方案:
- 命令结构行为:RawCommand
- 命令设备ID:DeviceId
- 参数01:参数类型:CommandParameter
- 参数01值:TestPar_1
- 参数02:参数类型:RawCommandParameter
- 参数02值:TestRaw_2
- 参数03:参数类型:RawCommandParameter
- 参数03值:TestRaw_3
- 起始令牌: <
- 分隔符令牌: <TAB>
- 结束令牌: >
- 发送的值:
- DeviceId
非可打印ASCII字符 - 令牌/值替换#
| 令牌 | 值 | 令牌 | 值 | 令牌 | 值 | 令牌 | 值 | 令牌 | 值 |
|---|---|---|---|---|---|---|---|---|---|
| <NUL> | 0 | <SOH> | 1 | <STX> | 2 | <ETX> | 3 | <EOT> | 4 |
| <ENQ> | 5 | <ACK> | 6 | <BEL> | 7 | <BS> | 8 | <TAB> | 9 |
| <LF> | 10 | <VT> | 11 | <FF> | 12 | <CR> | 13 | <SO> | 14 |
| <SI> | 15 | <DLE> | 16 | <DC1> | 17 | <DC2> | 18 | <DC3> | 19 |
| <DC4> | 20 | <NAK> | 21 | <SYN> | 22 | <ETB> | 23 | <CAN> | 24 |
| <EM> | 25 | <SUB> | 26 | <ESC> | 27 | <FS> | 28 | <GS> | 29 |
| <RS> | 30 | <US> | 31 | <DEL> | 127 |
请注意:
- 值以十进制表示。
- 这些令牌/值替换值是硬编码的。