1170 lines
27 KiB
Markdown
1170 lines
27 KiB
Markdown
# VWED在线脚本内置函数文档
|
||
|
||
本文档包含VWED在线脚本系统中所有可用的内置函数,按功能模块分类整理,为用户提供开发指导。
|
||
|
||
## 目录
|
||
|
||
1. [协议通信](#协议通信)
|
||
- [Fins协议](#fins协议)
|
||
- [HTTP请求](#http请求)
|
||
- [MQTT协议](#mqtt协议)
|
||
- [Melsec协议](#melsec协议)
|
||
- [Modbus TCP协议](#modbus-tcp协议)
|
||
- [OPC UA协议](#opc-ua协议)
|
||
- [S7协议](#s7协议)
|
||
- [Websocket协议](#websocket协议)
|
||
2. [任务管理](#任务管理)
|
||
3. [库位管理](#库位管理)
|
||
4. [机器人管理](#机器人管理)
|
||
5. [缓存数据管理](#缓存数据管理)
|
||
6. [系统工具](#系统工具)
|
||
7. [数据库操作](#数据库操作)
|
||
8. [文件操作](#文件操作)
|
||
9. [日志相关](#日志相关)
|
||
10. [注册方法](#注册方法)
|
||
11. [多线程及时间](#多线程及时间)
|
||
12. [手持端相关](#手持端相关)
|
||
|
||
---
|
||
|
||
## 协议通信
|
||
|
||
### Fins协议
|
||
|
||
#### read_fins_string
|
||
**描述**: Fins读取字符串
|
||
|
||
```python
|
||
def read_fins_string(ip: str, port: int, area: int, fins_io_addr: int, bit_offset: int, word_length: int) -> str | None
|
||
```
|
||
|
||
**参数**:
|
||
- `ip`: str类型,从机IP
|
||
- `port`: int类型,从机端口
|
||
- `area`: int类型,读取的存储区域代码,16进制值如:0x82
|
||
- `fins_io_addr`: int类型,读取的地址位
|
||
- `bit_offset`: int类型,读取的偏移量
|
||
- `word_length`: int类型,读取的长度
|
||
|
||
**返回值**: 成功返回字符串,失败返回None
|
||
|
||
**异常**: 本方法不抛出异常,异常捕获后只作日志记录
|
||
|
||
#### read_fins_word
|
||
**描述**: Fins读取word
|
||
|
||
```python
|
||
def read_fins_word(ip: str, port: int, area: int, fins_io_addr: int, bit_offset: int) -> int | None
|
||
```
|
||
|
||
**参数**:
|
||
- `ip`: str类型,从机IP
|
||
- `port`: int类型,从机端口
|
||
- `area`: int类型,读取的存储区域代码,16进制值如:0x82
|
||
- `fins_io_addr`: int类型,读取的地址位
|
||
- `bit_offset`: int类型,读取的偏移量
|
||
|
||
**返回值**: 成功返回整数,失败返回None
|
||
|
||
#### read_fins_bit
|
||
**描述**: Fins读取bit
|
||
|
||
```python
|
||
def read_fins_bit(ip: str, port: int, area: int, fins_io_addr: int, bit_offset: int) -> int | None
|
||
```
|
||
|
||
**参数**: 同read_fins_word
|
||
|
||
**返回值**: 成功返回整数,失败返回None
|
||
|
||
#### write_fins_word
|
||
**描述**: Fins写入word
|
||
|
||
```python
|
||
def write_fins_word(ip: str, port: int, area: int, fins_io_addr: int, bit_offset: int, value: int) -> None
|
||
```
|
||
|
||
**参数**: 在read_fins_word基础上增加value参数(写入的值)
|
||
|
||
#### write_fins_bit
|
||
**描述**: Fins写入bit
|
||
|
||
```python
|
||
def write_fins_bit(ip: str, port: int, area: int, fins_io_addr: int, bit_offset: int, value: bool) -> None
|
||
```
|
||
|
||
**参数**: 在read_fins_bit基础上增加value参数(bool类型,写入的值)
|
||
|
||
---
|
||
|
||
### HTTP请求
|
||
|
||
#### request_post
|
||
**描述**: 发送POST请求,参数为JSON格式
|
||
|
||
```python
|
||
def request_post(url: str, param: str) -> str | None
|
||
```
|
||
|
||
**参数**:
|
||
- `url`: str类型,请求的URL
|
||
- `param`: str类型,JSON字符串,请求的参数
|
||
|
||
**返回值**: 成功返回响应JSON字符串,失败返回None
|
||
|
||
#### request_get
|
||
**描述**: 发送GET请求
|
||
|
||
```python
|
||
def request_get(url: str) -> str | None
|
||
```
|
||
|
||
**参数**:
|
||
- `url`: str类型,请求的URL
|
||
|
||
**返回值**: 成功返回请求返回的字符串,失败返回None
|
||
|
||
#### set_header
|
||
**描述**: 设置请求头,设置一次后对所有请求都有效
|
||
|
||
```python
|
||
def set_header(key: str, value: str) -> None
|
||
```
|
||
|
||
**参数**:
|
||
- `key`: str类型,请求头的key
|
||
- `value`: str类型,请求头的value
|
||
|
||
#### request_post_xml
|
||
**描述**: 发送POST请求,参数为XML格式
|
||
|
||
```python
|
||
def request_post_xml(url: str, param: str) -> str | None
|
||
```
|
||
|
||
**参数**:
|
||
- `url`: str类型,请求的URL
|
||
- `param`: str类型,JSON字符串,会自动转换为XML格式
|
||
|
||
**返回值**: 成功时将响应的XML格式字符串转化为JSON格式并返回,失败返回None
|
||
|
||
#### request_http_post
|
||
**描述**: 发送POST请求(增强版),可设置请求媒体类型和请求头
|
||
|
||
```python
|
||
def request_http_post(url: str, param: str, head_param: str, media_type: str) -> str | None
|
||
```
|
||
|
||
**参数**:
|
||
- `url`: 请求的URL
|
||
- `param`: 请求的入参json字符串
|
||
- `head_param`: 请求头,如有传json字符串,无传空字符串
|
||
- `media_type`: 请求类型,可选值:JSON、JAVASCRIPT、HTML、XML、XWWWFORMURLENCODED
|
||
|
||
**返回值**: 成功返回json字符串,失败返回None
|
||
|
||
---
|
||
|
||
### MQTT协议
|
||
|
||
#### mqtt_subscribe
|
||
**描述**: MQTT订阅信息(使用传入的topic)
|
||
|
||
```python
|
||
def mqtt_subscribe(topic: str) -> str
|
||
```
|
||
|
||
**参数**:
|
||
- `topic`: str类型,订阅的topic
|
||
|
||
**返回值**: 订阅到的信息,失败返回None
|
||
|
||
**使用示例**:
|
||
```python
|
||
data = mqtt_subscribe("test_topic")
|
||
script_log("info", "sub1", data)
|
||
```
|
||
|
||
#### mqtt_publish
|
||
**描述**: MQTT发布信息(使用传入的topic)
|
||
|
||
```python
|
||
def mqtt_publish(topic: str, message: str) -> None
|
||
```
|
||
|
||
**参数**:
|
||
- `topic`: str类型,发布的topic
|
||
- `message`: str类型,需要发布的信息
|
||
|
||
**使用示例**:
|
||
```python
|
||
mqtt_publish("test_topic", "RDS-Script sub message.")
|
||
```
|
||
|
||
---
|
||
|
||
### Melsec协议
|
||
|
||
#### read_melsec_boolean
|
||
**描述**: Melsec读取boolean
|
||
|
||
```python
|
||
def read_melsec_boolean(ip: str, port: int, address: str) -> bool | None
|
||
```
|
||
|
||
**参数**:
|
||
- `ip`: str类型,从机IP
|
||
- `port`: int类型,从机端口
|
||
- `address`: str类型,读取的地址位
|
||
|
||
**返回值**: 成功返回布尔值,失败返回None
|
||
|
||
#### read_melsec_number
|
||
**描述**: Melsec读取number
|
||
|
||
```python
|
||
def read_melsec_number(ip: str, port: int, address: str) -> float | None
|
||
```
|
||
|
||
**参数**: 同read_melsec_boolean
|
||
|
||
**返回值**: 成功返回浮点数,失败返回None
|
||
|
||
#### read_melsec_string
|
||
**描述**: Melsec读取string
|
||
|
||
```python
|
||
def read_melsec_string(ip: str, port: int, address: str, length: int) -> str | None
|
||
```
|
||
|
||
**参数**: 在read_melsec_boolean基础上增加length参数(读取的长度)
|
||
|
||
**返回值**: 成功返回字符串,失败返回None
|
||
|
||
#### write_melsec_boolean
|
||
**描述**: Melsec写入boolean
|
||
|
||
```python
|
||
def write_melsec_boolean(ip: str, port: int, address: str, value: bool) -> bool
|
||
```
|
||
|
||
**参数**: 在read_melsec_boolean基础上增加value参数
|
||
|
||
**返回值**: 成功返回True,失败返回False
|
||
|
||
#### write_melsec_number
|
||
**描述**: Melsec写入number
|
||
|
||
```python
|
||
def write_melsec_number(ip: str, port: int, address: str, value: float) -> bool
|
||
```
|
||
|
||
#### write_melsec_string
|
||
**描述**: Melsec写入string
|
||
|
||
```python
|
||
def write_melsec_string(ip: str, port: int, address: str, value: str) -> bool
|
||
```
|
||
|
||
---
|
||
|
||
### Modbus TCP协议
|
||
|
||
#### read_coil_status
|
||
**描述**: Modbus读取线圈量,功能码01
|
||
|
||
```python
|
||
def read_coil_status(ip: str, port: int, slave_id: int, offset: int) -> bool | None
|
||
```
|
||
|
||
**参数**:
|
||
- `ip`: str类型,从机IP
|
||
- `port`: int类型,从机端口
|
||
- `slave_id`: int类型,从机slave ID
|
||
- `offset`: int类型,Modbus地址
|
||
|
||
**返回值**: 成功返回布尔值,失败返回None
|
||
|
||
#### read_input_status
|
||
**描述**: Modbus读取离散输入,功能码02
|
||
|
||
```python
|
||
def read_input_status(ip: str, port: int, slave_id: int, offset: int) -> bool | None
|
||
```
|
||
|
||
#### read_holding_register
|
||
**描述**: Modbus读取保持寄存器,功能码03
|
||
|
||
```python
|
||
def read_holding_register(ip: str, port: int, slave_id: int, offset: int, data_type: int) -> int | None
|
||
```
|
||
|
||
**参数**: 在基础参数基础上增加data_type(2:无符号整形,3:有符号整形)
|
||
|
||
#### read_input_register
|
||
**描述**: Modbus读取输入寄存器,功能码04
|
||
|
||
```python
|
||
def read_input_register(ip: str, port: int, slave_id: int, offset: int, data_type: int) -> int | None
|
||
```
|
||
|
||
#### write_coil_status
|
||
**描述**: Modbus写入线圈量,功能码05
|
||
|
||
```python
|
||
def write_coil_status(ip: str, port: int, slave_id: int, offset: int, value: bool) -> bool
|
||
```
|
||
|
||
**返回值**: True:写入成功,False:写入失败
|
||
|
||
#### write_holding_register
|
||
**描述**: Modbus写入保持寄存器,功能码06
|
||
|
||
```python
|
||
def write_holding_register(ip: str, port: int, slave_id: int, offset: int, data_type: int, value: int) -> bool
|
||
```
|
||
|
||
#### 批量操作函数
|
||
|
||
##### batch_read_coil_status
|
||
**描述**: Modbus批量读取线圈量,功能码01
|
||
|
||
```python
|
||
def batch_read_coil_status(ip: str, port: int, slave_id: int, offset: int, len: int) -> list[bool] | None
|
||
```
|
||
|
||
**参数**: 增加len参数(Modbus地址数量)
|
||
|
||
**返回值**: 成功返回布尔值数组,失败返回None
|
||
|
||
##### batch_read_holding_registers
|
||
**描述**: Modbus批量读取保持寄存器,功能码03
|
||
|
||
```python
|
||
def batch_read_holding_registers(ip: str, port: int, slave_id: int, offset: int, len: int) -> list[int] | None
|
||
```
|
||
|
||
##### batch_write_coil_status
|
||
**描述**: Modbus批量写入线圈量,功能码0f
|
||
|
||
```python
|
||
def batch_write_coil_status(ip: str, port: int, slave_id: int, offset: int, value: list[bool]) -> bool
|
||
```
|
||
|
||
#### 通用操作函数
|
||
|
||
##### read_single_modbus_value
|
||
**描述**: 通用读取单个地址
|
||
|
||
```python
|
||
def read_single_modbus_value(ip: str, port: int, slave_id: int, type_str: str, offset: int) -> int | None
|
||
```
|
||
|
||
**参数**: type_str可选择'0x','1x','3x','4x'
|
||
|
||
##### read_single_modbus_value_by_instance_name
|
||
**描述**: 通过实例名称读取单个地址
|
||
|
||
```python
|
||
def read_single_modbus_value_by_instance_name(name: str, offset: int) -> int | None
|
||
```
|
||
|
||
**参数**:
|
||
- `name`: str类型,配置的唯一实例名称
|
||
- `offset`: int类型,Modbus地址
|
||
|
||
---
|
||
|
||
### OPC UA协议
|
||
|
||
#### read_opc_value
|
||
**描述**: 读取OPC server中的某个地址位的值
|
||
|
||
```python
|
||
def read_opc_value(address: str | int) -> any
|
||
def read_opc_value(namespace_index: int, address: str | int) -> any
|
||
```
|
||
|
||
**参数**:
|
||
- `address`: str类型,读取的地址位
|
||
- `namespace_index`: int类型,命名空间索引(可选)
|
||
|
||
**返回值**: 读到的值
|
||
|
||
**异常**: 读取失败会抛出RuntimeError异常
|
||
|
||
#### read_opc_value_by_subscription
|
||
**描述**: 通过订阅方式读取OPC server中的值
|
||
|
||
```python
|
||
def read_opc_value_by_subscription(namespace_index: int, address: str) -> any
|
||
```
|
||
|
||
#### write_opc_value
|
||
**描述**: 向OPC server中的某个地址位写入值
|
||
|
||
```python
|
||
def write_opc_value(address: str | int, value: any) -> bool
|
||
def write_opc_value(namespace_index: int, address: str | int, value: any) -> bool
|
||
```
|
||
|
||
**返回值**: 成功返回True,失败返回False
|
||
|
||
---
|
||
|
||
### S7协议
|
||
|
||
#### 数据类型读取函数
|
||
|
||
##### read_s7_int
|
||
**描述**: S7读取Int
|
||
|
||
```python
|
||
def read_s7_int(plc_type: str, ip: str, block_and_offset: str) -> Optional[int]
|
||
```
|
||
|
||
**参数**:
|
||
- `plc_type`: str类型,PLC类型,可选值:S1200/S300/S400/S1500/S200Smart/S200
|
||
- `ip`: str类型,PLC IP
|
||
- `block_and_offset`: str类型,读取的地址
|
||
|
||
**支持的地址类型**:
|
||
| 地址名称 | 地址代号 | 示例 |
|
||
|---------|---------|------|
|
||
| 中间寄存器 | M | M100,M200 |
|
||
| 输入寄存器 | I | I100,I200 |
|
||
| 输出寄存器 | Q | Q100,Q200 |
|
||
| DB块寄存器 | DB | DB1.100,DB1.200.7 |
|
||
| V寄存器 | V | V100,V200 |
|
||
|
||
##### read_s7_dint
|
||
**描述**: S7读取DInt
|
||
|
||
```python
|
||
def read_s7_dint(plc_type: str, ip: str, block_and_offset: str) -> Optional[int]
|
||
```
|
||
|
||
##### read_s7_word
|
||
**描述**: S7读取Word
|
||
|
||
```python
|
||
def read_s7_word(plc_type: str, ip: str, block_and_offset: str) -> Optional[int]
|
||
```
|
||
|
||
##### read_s7_dword
|
||
**描述**: S7读取DWord
|
||
|
||
```python
|
||
def read_s7_dword(plc_type: str, ip: str, block_and_offset: str) -> Optional[int]
|
||
```
|
||
|
||
##### read_s7_string
|
||
**描述**: S7读取String
|
||
|
||
```python
|
||
def read_s7_string(plc_type: str, ip: str, block_and_offset: str) -> Optional[str]
|
||
```
|
||
|
||
##### read_s7_boolean
|
||
**描述**: S7读取Bool
|
||
|
||
```python
|
||
def read_s7_boolean(plc_type: str, ip: str, block_and_offset: str) -> Optional[bool]
|
||
```
|
||
|
||
#### 数据类型写入函数
|
||
|
||
##### write_s7_int
|
||
**描述**: S7写入Int
|
||
|
||
```python
|
||
def write_s7_int(plc_type: str, ip: str, block_and_offset: str, value: int) -> bool
|
||
```
|
||
|
||
##### write_s7_dint
|
||
**描述**: S7写入DInt
|
||
|
||
```python
|
||
def write_s7_dint(plc_type: str, ip: str, block_and_offset: str, value: int) -> bool
|
||
```
|
||
|
||
##### write_s7_word
|
||
**描述**: S7写入Word
|
||
|
||
```python
|
||
def write_s7_word(plc_type: str, ip: str, block_and_offset: str, value: int) -> bool
|
||
```
|
||
|
||
##### write_s7_dword
|
||
**描述**: S7写入DWord
|
||
|
||
```python
|
||
def write_s7_dword(plc_type: str, ip: str, block_and_offset: str, value: int) -> bool
|
||
```
|
||
|
||
##### write_s7_string
|
||
**描述**: S7写入String
|
||
|
||
```python
|
||
def write_s7_string(plc_type: str, ip: str, block_and_offset: str, value: str) -> bool
|
||
```
|
||
|
||
##### write_s7_boolean
|
||
**描述**: S7写入Bool
|
||
|
||
```python
|
||
def write_s7_boolean(plc_type: str, ip: str, block_and_offset: str, value: bool) -> bool
|
||
```
|
||
|
||
#### 通用读写函数
|
||
|
||
##### read_s7
|
||
**描述**: S7通用读取
|
||
|
||
```python
|
||
def read_s7(plc_type: str, ip: str, slot: int, rack: int, data_type: str, block_and_offset: str) -> Any
|
||
```
|
||
|
||
**参数**:
|
||
- `slot`: CPU模块的插槽号
|
||
- `rack`: 中央机架
|
||
- `data_type`: 在Int、DInt、Word、DWord、String、Bool中可选
|
||
|
||
##### write_s7
|
||
**描述**: S7通用写入
|
||
|
||
```python
|
||
def write_s7(plc_type: str, ip: str, slot: int, rack: int, data_type: str, block_and_offset: str, value: Any) -> bool
|
||
```
|
||
|
||
---
|
||
|
||
### Websocket协议
|
||
|
||
#### send_msg_to_wsc_by_client_ip
|
||
**描述**: 根据IP向客户端发送消息
|
||
|
||
```python
|
||
def send_msg_to_wsc_by_client_ip(msg: str, ip: str) -> None
|
||
```
|
||
|
||
**参数**:
|
||
- `msg`: 字符串类型,表示要发送的消息
|
||
- `ip`: 字符串类型,表示接收消息的客户端IP
|
||
|
||
#### send_msg_to_wsc_by_client_name
|
||
**描述**: 根据客户端名称向客户端发送消息
|
||
|
||
```python
|
||
def send_msg_to_wsc_by_client_name(msg: str, client_name: str) -> None
|
||
```
|
||
|
||
**参数**:
|
||
- `msg`: 字符串类型,表示要发送的消息
|
||
- `client_name`: 字符串类型,表示接收消息的客户端名称
|
||
|
||
#### get_websocket_client_ip
|
||
**描述**: 获取所有WebSocket客户端的IP
|
||
|
||
```python
|
||
def get_websocket_client_ip() -> list[str]
|
||
```
|
||
|
||
**返回值**: 返回一个字符串列表,包含所有客户端的IP
|
||
|
||
#### get_websocket_client_name
|
||
**描述**: 获取所有WebSocket客户端名称
|
||
|
||
```python
|
||
def get_websocket_client_name() -> list[str]
|
||
```
|
||
|
||
**返回值**: 返回一个字符串列表,包含所有客户端名称
|
||
|
||
---
|
||
|
||
## 任务管理
|
||
|
||
### check_task_param
|
||
**描述**: 校验输入参数中的task_id和task_label字段对应的数据是否在数据库中存在
|
||
|
||
```python
|
||
async def check_task_param(param: str) -> bool
|
||
```
|
||
|
||
**参数**: param是JSON字符串,包含task_id和task_label字段
|
||
|
||
**返回值**: True:任务数据存在,False:不存在
|
||
|
||
### create_wind_task
|
||
**描述**: 异步创建并运行一个任务
|
||
|
||
```python
|
||
async def create_wind_task(param: str) -> str
|
||
```
|
||
|
||
**参数**: param是JSON字符串,包含:
|
||
- task_id: 任务类型id
|
||
- task_label: 任务名称
|
||
- task_record_id: 任务实例id
|
||
- input_params: 任务参数(JSON字符串)
|
||
|
||
**返回值**: JSON字符串,包含code(200表示成功,-1表示失败)和msg字段
|
||
|
||
### get_task_record_by_id
|
||
**描述**: 根据任务实例ID查询任务实例
|
||
|
||
```python
|
||
async def get_task_record_by_id(task_record_id: str) -> str
|
||
```
|
||
|
||
**参数**: task_record_id,任务实例的唯一ID
|
||
|
||
**返回值**: 存在返回JSON格式字符串,不存在返回"null"
|
||
|
||
### sync_create_wind_task
|
||
**描述**: 创建并运行一个任务(阻塞方法)
|
||
|
||
```python
|
||
async def sync_create_wind_task(task_param: str) -> str
|
||
```
|
||
|
||
**返回值**: "9013":任务正常结束,"9014":任务异常结束
|
||
|
||
### terminate_tasks
|
||
**描述**: 终止任务
|
||
|
||
```python
|
||
async def terminate_tasks(param: str) -> None
|
||
```
|
||
|
||
**参数**: param是JSON数组字符串,包含要终止的任务记录ID列表
|
||
|
||
### mark_complete
|
||
**描述**: 任务封口
|
||
|
||
```python
|
||
async def mark_complete(task_id: str, auto_get_token: bool = True) -> Dict[str, Any]
|
||
```
|
||
|
||
**返回值**: 字典类型,包含封口结果信息
|
||
|
||
---
|
||
|
||
## 库位管理
|
||
|
||
### is_point_exist
|
||
**描述**: 检查站点是否存在
|
||
|
||
```python
|
||
async def is_point_exist(point_name: str) -> bool
|
||
```
|
||
|
||
### check_site_existed_by_site_id
|
||
**描述**: 检查库位是否存在
|
||
|
||
```python
|
||
async def check_site_existed_by_site_id(site_id: str) -> bool
|
||
```
|
||
|
||
### find_sites_by_condition
|
||
**描述**: 根据条件获取库位
|
||
|
||
```python
|
||
async def find_sites_by_condition(conditions: str, sort: str) -> str
|
||
```
|
||
|
||
**参数**:
|
||
- `conditions`: 查询条件JSON字符串,支持的字段:
|
||
- area: 区域名
|
||
- content: 货物
|
||
- filled: 是否有货
|
||
- group_names: 库区名
|
||
- locked: 是否已锁定
|
||
- site_ids: 库位id列表
|
||
- tags: 库位标签
|
||
- `sort`: 排序方式,"ASC"顺序排序,"DESC"倒序排序
|
||
|
||
**返回值**: 库位列表JSON字符串
|
||
|
||
**使用示例**:
|
||
```python
|
||
# 查询库位id为E1-1且有货的库位
|
||
condition = {
|
||
"site_ids": ["E1-1"],
|
||
"filled": True
|
||
}
|
||
site = await find_sites_by_condition(json.dumps(condition), "ASC")
|
||
```
|
||
|
||
### update_sites_by_condition
|
||
**描述**: 根据条件更新库位
|
||
|
||
```python
|
||
async def update_sites_by_condition(conditions: str, values: str) -> int
|
||
```
|
||
|
||
**参数**:
|
||
- `conditions`: 更新条件JSON字符串
|
||
- `values`: 修改的字段JSON字符串
|
||
|
||
**返回值**: 更新成功的数据库记录行数
|
||
|
||
**使用示例**:
|
||
```python
|
||
# 对库位E1-1进行加锁
|
||
condition = {"site_ids": ["E1-1"], "locked": False}
|
||
value = {"locked": True, "locked_by": "task123"}
|
||
result = await update_sites_by_condition(json.dumps(condition), json.dumps(value))
|
||
```
|
||
|
||
### find_available_sites_by_condition
|
||
**描述**: 根据条件获取有效库位(未禁用且同步成功的库位)
|
||
|
||
```python
|
||
async def find_available_sites_by_condition(conditions: str, sort: str) -> str
|
||
```
|
||
|
||
### update_site_ext_field_by_id_and_ext_field_name
|
||
**描述**: 根据条件更新库位扩展字段值
|
||
|
||
```python
|
||
async def update_site_ext_field_by_id_and_ext_field_name(conditions: str) -> None
|
||
```
|
||
|
||
---
|
||
|
||
## 机器人管理
|
||
|
||
### is_robot_exist
|
||
**描述**: 校验机器人是否存在
|
||
|
||
```python
|
||
async def is_robot_exist(robot_name: str) -> bool
|
||
```
|
||
|
||
### get_lite_robots_status
|
||
**描述**: 获取机器人基本信息
|
||
|
||
```python
|
||
async def get_lite_robots_status() -> str
|
||
```
|
||
|
||
**返回值**: 包含所有机器人详细信息的JSON数组字符串
|
||
|
||
### get_lite_robots_status_by_id
|
||
**描述**: 根据ID获取机器人基本信息
|
||
|
||
```python
|
||
async def get_lite_robots_status_by_id(agv_id: str) -> str
|
||
```
|
||
|
||
**参数**: agv_id,机器人ID或名称
|
||
|
||
**返回值**: 机器人信息JSON字符串,未找到返回空对象{}
|
||
|
||
### get_vehicle_station
|
||
**描述**: 根据ID获取机器人位置
|
||
|
||
```python
|
||
async def get_vehicle_station(agv_id: str) -> str
|
||
```
|
||
|
||
**返回值**: 包含last_station和station字段的JSON字符串
|
||
|
||
### query_charge_param
|
||
**描述**: 查询所有机器人充电阈值
|
||
|
||
```python
|
||
async def query_charge_param() -> Optional[str]
|
||
```
|
||
|
||
**返回值**: 包含机器人充电参数的JSON数组字符串
|
||
|
||
### modify_charge_param
|
||
**描述**: 修改机器人充电阈值
|
||
|
||
```python
|
||
async def modify_charge_param(param: str) -> bool
|
||
```
|
||
|
||
**参数**: param,包含机器人ID和充电参数的JSON字符串
|
||
|
||
**支持的参数字段**:
|
||
- exchange_power: 换货电量阈值
|
||
- task_power: 任务电量阈值
|
||
- charge_power: 充电电量阈值
|
||
- min_power: 最小电量
|
||
- max_power: 最大电量
|
||
|
||
---
|
||
|
||
## 缓存数据管理
|
||
|
||
### get_cache_param
|
||
**描述**: 获取缓存数据
|
||
|
||
```python
|
||
async def get_cache_param(key: str) -> str | None
|
||
```
|
||
|
||
**参数**: key,缓存键
|
||
|
||
**返回值**: JSON格式字符串,不存在返回None
|
||
|
||
### put_cache_param
|
||
**描述**: 缓存数据
|
||
|
||
```python
|
||
async def put_cache_param(key: str, value: str) -> None
|
||
```
|
||
|
||
**参数**:
|
||
- `key`: 缓存键
|
||
- `value`: 缓存值,如果要缓存对象需要先序列化为JSON字符串
|
||
|
||
### clear_cache_param
|
||
**描述**: 删除缓存数据
|
||
|
||
```python
|
||
async def clear_cache_param(key: str) -> None
|
||
```
|
||
|
||
### get_all_cache_params
|
||
**描述**: 获取所有的缓存数据
|
||
|
||
```python
|
||
async def get_all_cache_params() -> str
|
||
```
|
||
|
||
**返回值**: JSON格式字符串,不存在返回空字符串
|
||
|
||
---
|
||
|
||
## 系统工具
|
||
|
||
### create_uuid
|
||
**描述**: 创建唯一的ID编号
|
||
|
||
```python
|
||
def create_uuid() -> str
|
||
```
|
||
|
||
**返回值**: 表示一个唯一ID编号的字符串
|
||
|
||
### json_to_xml
|
||
**描述**: 将JSON字符串转化为XML字符串
|
||
|
||
```python
|
||
def json_to_xml(param: str) -> str
|
||
```
|
||
|
||
### md5_encode
|
||
**描述**: MD5字符串加密
|
||
|
||
```python
|
||
def md5_encode(param: str) -> str
|
||
```
|
||
|
||
**返回值**: 32位小写字符串
|
||
|
||
### base64_encode
|
||
**描述**: Base64字符串重编码
|
||
|
||
```python
|
||
def base64_encode(param: str) -> str
|
||
```
|
||
|
||
**返回值**: UrlBase64重编码后的字符串
|
||
|
||
### trans_to_page_obj
|
||
**描述**: 转换成分页对象
|
||
|
||
```python
|
||
def trans_to_page_obj(total_count: int, current_page: int, page_size: int, total_page: int, page_list: str) -> str
|
||
```
|
||
|
||
**参数**:
|
||
- `total_count`: 分页数据的总条数
|
||
- `current_page`: 当前是第几页
|
||
- `page_size`: 每页显示的数量
|
||
- `total_page`: 总页数
|
||
- `page_list`: 当前页的数据
|
||
|
||
### get_settings_config_value
|
||
**描述**: 获取settings.py的配置
|
||
|
||
```python
|
||
def get_settings_config_value(key: str) -> str
|
||
```
|
||
|
||
**参数**: key,settings.py中所要获取配置的字段名
|
||
|
||
**返回值**: JSON字符串
|
||
|
||
---
|
||
|
||
## 数据库操作
|
||
|
||
### jdbc_execute_sql
|
||
**描述**: 执行SQL语句
|
||
|
||
```python
|
||
def jdbc_execute_sql(sql: str) -> bool
|
||
```
|
||
|
||
**参数**: sql,创建表的SQL语句
|
||
|
||
**返回值**: True:SQL命令执行成功,False:执行失败
|
||
|
||
### jdbc_query
|
||
**描述**: 使用SQL查询数据
|
||
|
||
```python
|
||
def jdbc_query(sql: str) -> str
|
||
```
|
||
|
||
**参数**: sql,SQL查询语句
|
||
|
||
**返回值**: JSON格式的查询结果字符串
|
||
|
||
### jdbc_insert_or_update
|
||
**描述**: 更新数据
|
||
|
||
```python
|
||
def jdbc_insert_or_update(sql: str, *sql_params: Any) -> int
|
||
```
|
||
|
||
**参数**:
|
||
- `sql`: SQL语句字符串
|
||
- `sql_params`: 可动态扩展的参数
|
||
|
||
**返回值**: 0表示更新失败,大于0的数字表示更新的记录数目
|
||
|
||
**使用示例**:
|
||
```python
|
||
sql = "update employee set age = 25 where name = ? and id = ?"
|
||
jdbc_insert_or_update(sql, "bob", 123)
|
||
```
|
||
|
||
### jdbc_query_count
|
||
**描述**: 查询数据数量
|
||
|
||
```python
|
||
def jdbc_query_count(sql: str) -> Optional[int]
|
||
```
|
||
|
||
**参数**: sql,SQL语句字符串(只能使用select count语句)
|
||
|
||
**返回值**: None表示查询失败,其他数字表示查询到的记录数目
|
||
|
||
---
|
||
|
||
## 文件操作
|
||
|
||
### read_file_to_string
|
||
**描述**: 根据文件名读取脚本目录下的文件内容
|
||
|
||
```python
|
||
def read_file_to_string(file_name: str) -> Optional[str]
|
||
```
|
||
|
||
**参数**: file_name,目标文件的名称(带后缀,例如a.txt)
|
||
|
||
**返回值**: 成功返回文件内容字符串,失败返回None
|
||
|
||
---
|
||
|
||
## 日志相关
|
||
|
||
### get_logger
|
||
**描述**: 获取日志打印对象
|
||
|
||
```python
|
||
def get_logger() -> Logger
|
||
```
|
||
|
||
**返回值**: 日志对象,包含info、debug、warn、error方法
|
||
|
||
**使用示例**:
|
||
```python
|
||
get_logger().info("hello world")
|
||
get_logger().error("there is an error.", Exception("错误详情"))
|
||
```
|
||
|
||
### script_log
|
||
**描述**: 在脚本页面下打印日志
|
||
|
||
```python
|
||
def script_log(level: str, function_name: str, content: any) -> None
|
||
```
|
||
|
||
**参数**:
|
||
- `level`: 日志等级,可选"INFO"、"ERROR"
|
||
- `function_name`: 函数签名,用于快速定位信息
|
||
- `content`: 日志信息
|
||
|
||
---
|
||
|
||
## 注册方法
|
||
|
||
**注意:以下方法需要在boot()函数中调用**
|
||
|
||
### define_scheduled_functions
|
||
**描述**: 定时执行脚本方法
|
||
|
||
```python
|
||
def define_scheduled_functions(is_parallel: bool, delay: int, period: int, function_name: str, args: list) -> None
|
||
```
|
||
|
||
**参数**:
|
||
- `is_parallel`: 是否并行
|
||
- `delay`: 启动延迟执行的时间,单位毫秒
|
||
- `period`: 脚本方法的周期,单位毫秒
|
||
- `function_name`: 周期执行的方法名
|
||
- `args`: 周期执行的方法的参数
|
||
|
||
### register_button
|
||
**描述**: 向RDS注册管理后台可见的按钮
|
||
|
||
```python
|
||
def register_button(label: str, remark: str, script_function: str, level: str, type: int = 0) -> None
|
||
```
|
||
|
||
**参数**:
|
||
- `label`: 按钮名
|
||
- `remark`: 按钮备注
|
||
- `script_function`: 点击按钮触发的方法名(注意该方法不能带参数)
|
||
- `level`: 按钮等级,用颜色区分(blue:蓝色,yellow:黄色,red:红色)
|
||
- `type`: 0:普通按钮,1:导出按钮
|
||
|
||
### register_handler
|
||
**描述**: 在脚本中注册接口方法
|
||
|
||
```python
|
||
def register_handler(method: str, path: str, callback: str, auth: bool) -> None
|
||
```
|
||
|
||
**参数**:
|
||
- `method`: HTTP请求方式,支持POST、GET
|
||
- `path`: 接口的URL路径
|
||
- `callback`: 处理接口的脚本方法名
|
||
- `auth`: 调用此接口是否需要登录
|
||
|
||
---
|
||
|
||
## 多线程及时间
|
||
|
||
### sleep
|
||
**描述**: 休眠指定时间
|
||
|
||
```python
|
||
async def sleep(ms: int) -> None
|
||
```
|
||
|
||
**参数**: ms,休眠的时间,单位毫秒
|
||
|
||
**使用示例**:
|
||
```python
|
||
# 异步休眠1秒
|
||
await sleep(1000)
|
||
```
|
||
|
||
### current_time_millis
|
||
**描述**: 获取当前系统时间戳
|
||
|
||
```python
|
||
def current_time_millis() -> int
|
||
```
|
||
|
||
**返回值**: 当前系统的毫秒时间戳
|
||
|
||
### now_date
|
||
**描述**: 获取当前时间
|
||
|
||
```python
|
||
def now_date() -> str
|
||
```
|
||
|
||
**返回值**: 按照yyyy-MM-dd HH:mm:ss格式的字符串
|
||
|
||
### time_millis_format
|
||
**描述**: 将时间戳转为日期格式
|
||
|
||
```python
|
||
def time_millis_format(time: int) -> str
|
||
```
|
||
|
||
**参数**: time,毫秒时间戳
|
||
|
||
**返回值**: 按照yyyy-MM-dd HH:mm:ss格式的字符串
|
||
|
||
---
|
||
|
||
## 手持端相关
|
||
|
||
### 通知功能
|
||
|
||
#### notice_operator
|
||
**描述**: 通知手持端(工位/岗位)
|
||
|
||
```javascript
|
||
function noticeOperator(workTypes: string, workStations: string, content: string, needConfirm: boolean, keepTime: number): void
|
||
```
|
||
|
||
**参数**:
|
||
- `workTypes`: 要通知的岗位,多岗位间逗号分隔
|
||
- `workStations`: 要通知的工位,多工位间逗号分隔
|
||
- `content`: 通知的内容
|
||
- `needConfirm`: 是否需要手持端用户点击确认后通知弹框才会消失
|
||
- `keepTime`: 通知弹框在手持端的保持时间,单位秒
|
||
|
||
#### notice_operator_by_user
|
||
**描述**: 通知手持端用户
|
||
|
||
```javascript
|
||
function noticeOperatorByUser(userNames: string, content: string, needConfirm: boolean, keepTime: number): void
|
||
```
|
||
|
||
### 界面控制
|
||
|
||
#### set_pad_label_by_menu_id
|
||
**描述**: 通过menuId修改手持端按钮的label
|
||
|
||
```javascript
|
||
function setPadLabelByMenuId(menuId: String, label: String): void
|
||
```
|
||
|
||
#### set_pad_background_by_menu_id
|
||
**描述**: 通过menuId修改手持端按钮的背景色
|
||
|
||
```javascript
|
||
function setPadBackgroundByMenuId(menuId: String, background: String): void
|
||
```
|
||
|
||
#### set_pad_disable_by_menu_id
|
||
**描述**: 通过menuId设置手持端按钮是否禁用
|
||
|
||
```javascript
|
||
function setPadDisableByMenuId(menuId: String, disable: boolean): void
|
||
```
|
||
|
||
---
|
||
|
||
## 总结
|
||
|
||
本文档涵盖了VWED在线脚本系统中所有可用的内置函数,按功能模块进行了详细分类。开发者可以根据实际需求选择合适的函数来实现业务逻辑。
|
||
|
||
### 主要特性:
|
||
1. **协议通信**:支持多种工业协议(Modbus、S7、OPC-UA、MQTT等)
|
||
2. **任务管理**:完整的任务生命周期管理
|
||
3. **库位管理**:灵活的仓储库位操作
|
||
4. **机器人管理**:AMR机器人状态监控和控制
|
||
5. **系统工具**:丰富的系统级工具函数
|
||
6. **数据库操作**:直接的SQL查询和操作能力
|
||
|
||
### 使用建议:
|
||
- 异步函数需要使用await关键字调用
|
||
- 注册相关的函数必须在boot()函数中调用
|
||
- 错误处理要根据各函数的异常说明进行相应处理
|
||
- 建议在使用前先了解相关协议和系统的基础知识 |