.pyc
文件,这个文件是可以被反编译回近似的源代码的。通过使用 Cython 将 Python 源代码编译成 C 语言,然后再生成本地二进制文件(.pyd)。然后正常使用 cx_Freeze 打包,这样做可以极大地提高代码的保护级别,防止被轻易逆向。
需要安装 Cython 和 Numpy,在终端或命令行中运行:
pip install Cython numpy
Cython 将 Python 代码转换成 C 代码,但最终需要一个 C 编译器来将 C 代码编译成机器码。这是最关键的一步。
对于 Windows 用户:
对于 macOS 用户:
打开终端并运行 xcode-select --install
。这会安装苹果的命令行开发者工具,其中包含了 Clang 编译器。
对于 Linux 用户 (例如 Ubuntu/Debian):
打开终端并运行 sudo apt update && sudo apt install build-essential
。
如果项目目录结构如下:
/my_project
|-- main.py # 你的主程序文件
|-- /src # 你的其他模块目录
| |-- func1.py
| |-- func2.py
|-- setup.py # cx_Freeze 的配置文件
根据以上目录结构,下面是一个配置文件示例:
from cx_Freeze import setup, Executable
import sys, os, io
# =============================================================================
# Cython 自动化编译集成
# =============================================================================
try:
from Cython.Build import cythonize
from setuptools import Extension
import numpy
except ImportError:
print("\n[错误] 缺少必要的库。请先安装 Cython 和 Numpy:")
print("pip install Cython numpy")
sys.exit(1)
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') # 修复非中文系统打包时报错
# 增加递归调用深度限制
sys.setrecursionlimit(1500)
# 定义相关路径
ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
ENTRY_POINT = "main.py"
# 检查是否为打包命令
build_commands = {"build", "bdist_msi", "bdist_dmg", "bdist_mac"}
is_building = any(cmd in sys.argv for cmd in build_commands)
# --- Cython 编译配置 ---
# 此函数会自动查找 src 目录下的所有 .py 文件并准备将它们编译
def find_extensions_to_compile(dir_path="src"):
"""Find all .py files to be compiled by Cython."""
extensions = []
# 添加 numpy 的头文件路径,这对于编译依赖 numpy/scipy 的代码至关重要
numpy_include = numpy.get_include()
for root, dirs, files in os.walk(dir_path):
for file in files:
# 我们只编译 .py 文件,但跳过 __init__.py 文件
if file.endswith(".py") and file != "__init__.py":
path = os.path.join(root, file)
# 检查文件是否包含 numba 相关代码
try:
with open(path, 'r', encoding='utf-8') as f:
content = f.read()
# 检查是否包含 numba 关键字
numba_keywords = ['from numba import', 'import numba', '@jit', '@njit', 'numba.jit', 'numba.njit']
has_numba = any(keyword in content for keyword in numba_keywords)
if has_numba:
print(f"--- 跳过包含 Numba 的文件: {path}")
continue
except Exception as e:
print(f"--- 警告:无法读取文件 {path}: {e}")
continue
# 将文件路径转换为模块路径,例如 "src/library/function.py" -> "src.library.function"
module_path = path.replace(os.sep, '.')[:-3]
extensions.append(
Extension(
name=module_path,
sources=[path],
include_dirs=[numpy_include] # 包含 numpy 头文件
)
)
print(f"--- 找到 {len(extensions)} 个模块准备通过 Cython 编译...")
return extensions
# 仅在执行打包命令时才准备编译列表
extensions = []
if is_building:
# 1. 编译 src 目录下的所有模块(自动排除包含 numba 的文件)
extensions.extend(find_extensions_to_compile("src"))
# =============================================================================
# cx_Freeze 配置
# =============================================================================
# 安装依赖
build_exe_options = {
"packages": [
],
"excludes": ["email"] + [ext.name for ext in extensions], # 排除 Cython 编译的模块
"include_files": [
],
"includes": [],
# 性能优化选项
"optimize": 2, # 使用Python优化
"include_msvcr": False, # 不包含MSVC运行库
}
# 基础设置
base = "Win32GUI" if sys.platform == "win32" else None
directory_table = [
# ...
]
shortcut_table = [
(
# ...
),
(
# ...
),
]
msi_data = {"Directory": directory_table, "Shortcut": shortcut_table}
bdist_msi_options = {
# ...
}
executables = [
Executable(
"main.py", # 入口文件 依然调用 py 程序,cx_Freeze 会自动识别并使用加密后的文件
# ...
)
]
# =============================================================================
# 清理函数
# =============================================================================
def cleanup_generated_files():
"""查找并删除由 Cython 生成的所有 .c 文件。"""
print("\n--- 正在运行清理程序:删除生成的 C 文件... ---")
for root, dirs, files in os.walk(ROOT_DIR):
# 避免进入不相关的目录
if 'myenv' in root or '.git' in root or 'build' in root or 'dist' in root:
continue
for file in files:
if file.endswith('.c'):
file_path = os.path.join(root, file)
try:
os.remove(file_path)
print(f"--- 已删除: {file_path}")
except OSError as e:
print(f"--- 删除失败 {file_path}: {e}")
# =============================================================================
# 执行打包
# =============================================================================
try:
setup(
# ...
# 关键步骤:将找到的 .py 文件交给 Cythonize 进行编译
ext_modules=cythonize(
extensions,
compiler_directives={'language_level': "3"}, # 使用 Python 3 语法
quiet=True # 减少不必要的编译输出
) if is_building else [],
# ...
)
finally:
# 只有在执行打包命令时才运行清理
if is_building:
cleanup_generated_files()
运行打包命令打包即可,如:
python setup.py bdist_msi
安装完成后,进入安装路径的 Lib/site-packages 文件夹,会看到加密后的 .pyd
程序文件。.pyd
文件是 Windows 上的二进制动态链接库,本质上和 .dll 文件一样。如果加密失败:会在这里看到 .pyc
文件或者甚至原始的 .py
文件。
Python 包管理约定:
cx_Freeze 的处理逻辑:
模块导入机制:
由于加密后的文件路径发生了变化,打包后访问加密后文件中的内容会报错,所以主程序在索引时需要特殊处理加密打包后的路径问题,主程序中使用下面函数可以自适应:
# 路径修正代码
def fix_module_paths():
"""修正打包后的模块搜索路径"""
if getattr(sys, 'frozen', False): # 检查是否为打包后的可执行文件
# 获取可执行文件所在目录
base_dir = os.path.dirname(sys.executable)
# 可能的src模块路径
possible_src_paths = [
os.path.join(base_dir, 'lib', 'site-packages'), # Cython编译后的位置
os.path.join(base_dir, 'lib'), # 标准位置
base_dir, # 根目录
]
# 将可能的路径添加到sys.path的开头
for path in possible_src_paths:
if os.path.exists(path) and path not in sys.path:
sys.path.insert(0, path)
print(f"Added to Python path: {path}")
# 特别检查src目录
src_path = os.path.join(base_dir, 'lib', 'site-packages', 'src')
if os.path.exists(src_path):
parent_dir = os.path.dirname(src_path)
if parent_dir not in sys.path:
sys.path.insert(0, parent_dir)
print(f"Added src parent directory to Python path: {parent_dir}")
# 执行路径修正
fix_module_paths()
以上函数中,会将 src
文件夹下的函数库进行正确的索引。
Numba 不兼容 Cython 编译后的函数。Numba 装饰器(如 @jit, @njit)期望装饰的是普通的 Python 函数,但 Cython 编译后生成的是 cython_function_or_method 类型,导致 Numba 无法识别。
需要将包含 numba 的文件排除出编译列表。具体可见 setup.py 函数。
]]>GitHub 主页:https://github.com/AsyncFuncAI/deepwiki-open
使用方法很简单,clone 仓库代码,配置环境变量,启动前端和后端服务即可。
git clone https://github.com/AsyncFuncAI/deepwiki-open.git
cd deepwiki-open
需要提前准备 openai 和 google ai 的 api key。
Google AI api:https://makersuite.google.com/app/apikey
openai api:https://platform.openai.com/api-keys
根目录新建 .env
文件,配置环境变量:
GOOGLE_API_KEY=XXXXXXXXXXXXXXXXXXX
OPENAI_API_KEY=XXXXXXXXXXXXXXXXXXX
OPENROUTER_API_KEY=XXXXXXXXXXXXXXX
OPENROUTER_API_KEY 是可选项,其他两个是必须项。
注意,我测试发现免费帐户的 openai api 在生成少数几个 wiki 后就会报错超出最大请求次数 error。而且项目必须使用 OpenAI-Compatible Embedding Models,解决方法是给 openai 充值或者使用 Alibaba Qwen 的 openai 兼容 api。
alibaba qwen api:https://bailian.console.alibabacloud.com/?tab=app#/api-key
如果使用其他 OpenAI-Compatible Embedding Models 需要将环境变量的 OPENAI_API_KEY 改为此第三方的 api key,然后在环境变量指定 OPENAI_BASE_URL:
OPENAI_BASE_URL=https://dashscope-intl.aliyuncs.com/compatible-mode/v1 #示例中是 alibaba cloud 的 base url 地址
然后修改 api/config/embedder.json
为:
{
"embedder": {
"client_class": "OpenAIClient",
"initialize_kwargs": {
"api_key": "${OPENAI_API_KEY}",
"base_url": "${OPENAI_BASE_URL}"
},
"batch_size": 10,
"model_kwargs": {
"model": "text-embedding-v3",
"dimensions": 512,
"encoding_format": "float"
}
},
"embedder_ollama": {
"client_class": "OllamaClient",
"model_kwargs": {
"model": "nomic-embed-text"
}
},
"retriever": {
"top_k": 20
},
"text_splitter": {
"split_by": "word",
"chunk_size": 350,
"chunk_overlap": 100
}
}
安装环境并启动后端,提前建立一个虚拟环境:
python -m venv .venv
.venv\Scripts\activate
pip install -r api/requirements.txt
python -m api.main
安装环境并启动前端:
npm install
npm run dev
然后打开浏览器访问:http://localhost:3000,即可按照提示操作。
]]>1. 使用 Python 内置的 HTTP 服务器 (通常最快,无需额外安装)
如果你的电脑上安装了 Python 3 (现在大多数操作系统都自带或容易安装),这是最快的方法之一,因为它不需要安装任何额外的库。
步骤:
cd
命令导航到你的网站文件所在的根目录(也就是包含 index.html
文件的那个文件夹)。运行以下命令:
python -m http.server
如果你使用的是较旧的 Python 2 版本 (尽量避免使用),命令是:
python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
的信息。http://localhost:8000
或者 http://127.0.0.1:8000
。index.html
,它会列出目录中的文件。Ctrl + C
。指定端口: 如果 8000 端口被占用,你可以指定其他端口:
python -m http.server 8080
2. 使用 Node.js 的 http-server
或 live-server
(功能更强,需要 Node.js)
如果你安装了 Node.js 和 npm (Node Package Manager),可以使用一些非常方便的包。
a) http-server
(基础服务器)
首次安装 (全局安装,只需一次):
npm install -g http-server
启动服务器:
cd
到你的网站根目录。运行:
http-server
http://127.0.0.1:8080
。Ctrl + C
停止。b) live-server
(带自动刷新功能)
live-server
会在你修改并保存文件后自动刷新浏览器,非常适合开发调试。
首次安装 (全局安装,只需一次):
npm install -g live-server
启动服务器:
cd
到你的网站根目录。运行:
live-server
http://127.0.0.1:8080
或类似地址)。当你修改并保存 HTML/CSS/JS 文件时,浏览器会自动刷新。Ctrl + C
停止。live-server
的自动刷新),Node.js 在 Web 开发中很常用。3. 使用 VS Code 扩展 "Live Server" (集成在编辑器中,非常方便)
如果你使用 Visual Studio Code 编辑器,这是最方便的方法之一。
步骤:
index.html
文件上右键单击,选择 "Open with Live Server"。4. 使用 PHP 内置服务器 (如果已安装 PHP)
如果你的系统碰巧安装了 PHP (通常用于后端开发,但也可用于快速启动静态服务器)。
步骤:
cd
到你的网站根目录。运行:
php -S localhost:8000
8000
替换为其他端口号。http://localhost:8000
。Ctrl + C
停止。哪个最快?
python -m http.server
通常是最快的,因为它很可能已经安装好了。live-server
或 http-server
也非常快,并且 live-server
提供了非常有用的自动刷新功能。选择哪种取决于你电脑上已有的环境和你个人的偏好。对于纯粹的“快速启动一个能看本地网页的服务器”,Python 的内置服务器通常拔得头筹。
]]>Honkit 是一个现代化的静态书籍生成工具,它是基于旧版 GitBook 开发的,支持 Markdown 文件的编写和多种输出格式,如 HTML 和 PDF。
创建项目目录:
mkdir my-honkit-project
cd my-honkit-project
初始化 Honkit 项目:
npx honkit init
这会生成以下两个文件:
README.md
:书籍的主页面。SUMMARY.md
:目录结构的定义。安装 Honkit:
npm install honkit --save-dev
在项目目录中运行以下命令启动本地预览:
npx honkit serve
默认情况下,书籍会在 http://localhost:4000 上运行。
当书籍准备好后,运行以下命令生成静态 HTML 文件:
npx honkit build
生成的文件会存储在 _book
目录中。
Honkit 支持将书籍生成 PDF 文件,但需要预先安装 Calibre 电子书管理软件。
下载 Calibre:
确保 Calibre 路径正确:
检查环境变量:
PATH
中。PATH
环境变量中。例如,Windows 系统下,路径可能为:
C:\Program Files\Calibre2
Linux 和 macOS 用户可通过以下命令验证:
which ebook-convert
如果返回路径为空,说明需要手动添加。
运行以下命令生成 PDF 文件:
npx honkit pdf . output.pdf
.
表示当前目录。output.pdf
是生成的 PDF 文件名。my-honkit-book
)。将本地项目与远程仓库关联:
git init
git remote add origin https://github.com/<username>/my-honkit-book.git
git add .
git commit -m "Initial commit"
git branch -M main
git push -u origin main
创建 GitHub Actions 配置文件:
在项目的根目录下创建 .github/workflows/deploy.yml
文件,内容如下:
name: Deploy Honkit to GitHub Pages
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install Dependencies
run: npm install
- name: Build Honkit
run: npx honkit build
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./_book
提交配置文件:
提交并推送配置文件到 GitHub:
git add .github/workflows/deploy.yml
git commit -m "Add GitHub Actions for deployment"
git push origin main
启用 GitHub Pages:
gh-pages
分支(如果没有需要手动新建此分支),点击保存。www.example.com
)。CNAME
文件。登录您的域名注册商控制台,添加以下 DNS 记录:
绑定子域名(例如 www.example.com
):
添加 CNAME 记录:
www CNAME <username>.github.io
注意:将 <username>
替换为您的 GitHub 用户名。
当每次推送代码后,自定义域名设置消失,通常是由于 CNAME
文件被覆盖或删除。GitHub Pages 需要根目录的 CNAME
文件来保存自定义域名信息。如果该文件丢失或被覆盖,GitHub 就无法识别您的自定义域名。
手动将 CNAME
文件添加到源码目录
创建 CNAME
文件:
在项目根目录(如 main
分支)下创建一个 CNAME
文件,并在文件中输入您的自定义域名,例如:
www.example.com
提交更改:
提交并推送 CNAME
文件到远程仓库:
git add CNAME
git commit -m "Add CNAME file"
git push origin main
CNAME
文件会自动被包含在 gh-pages
分支中,不会被覆盖。检查 CNAME
文件:
gh-pages
分支,确认根目录下有 CNAME
文件。文件内容应为您的自定义域名,例如:
www.example.com
检查 GitHub Pages 设置:
npx honkit pdf
报错 Command failed: ebook-convert not found
原因:
Calibre 未正确安装,或 ebook-convert
工具未添加到系统的 PATH
环境变量中。
解决方法:
确保 Calibre 已安装,并重新确认安装路径:
C:\Program Files\Calibre2
。which ebook-convert
检查路径。手动将 Calibre 的安装路径添加到系统环境变量中:
Windows:
PATH
。C:\Program Files\Calibre2
。Linux/macOS:
编辑 ~/.bashrc
或 ~/.zshrc
文件,添加以下内容:
export PATH="/path/to/calibre:$PATH"
替换 /path/to/calibre
为 Calibre 的实际路径。
source ~/.bashrc
或 source ~/.zshrc
使更改生效。npx honkit pdf
。Permission denied
原因:
GitHub Actions 无法向 gh-pages
分支推送更改,通常是因为缺少权限。
解决方法:
确保 GitHub 仓库的 Settings > Actions > General 中已启用 Read and write permissions:
确认 GitHub Actions 配置文件中使用的是 github_token
:
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
原因:
DNS 记录配置错误或未生效。
解决方法:
登录域名管理平台,检查 DNS 配置:
CNAME
文件,内容是否正确(应与自定义域名一致)。验证 DNS 配置是否正确:
启用 HTTPS:
原因:
SUMMARY.md
的目录结构未正确链接。解决方法:
检查 SUMMARY.md
中的链接是否与文件路径一致:
* [章节标题](path/to/file.md)
清理并重新构建书籍:
npx honkit build
原因:
未指定自定义样式文件或样式文件路径错误。
解决方法:
custom.css
),自定义 PDF 的排版样式。使用以下命令生成 PDF 并指定样式文件:
npx honkit pdf --css custom.css . output.pdf
如果您遇到未列出的问题或有其他疑问,请参考以下支持途径:
完成这些步骤后,您可以成功使用 Honkit 创建、部署和管理文档,解决常见问题,并生成符合您需求的 HTML 和 PDF 文档!
]]>Python 3.3 及以上版本自带 venv 模块,可以直接使用。
在你的项目目录下,运行以下命令来创建一个虚拟环境,这将在项目目录下创建一个名为 myenv 的文件夹,其中包含虚拟环境的所有文件:
python -m venv myenv
Windows:
myenv\Scripts\activate
macOS 和 Linux:
source myenv/bin/activate
在虚拟环境中,你可以使用 pip 来安装项目所需的库:
pip install requests
安装的库将只会影响当前虚拟环境,而不会影响系统的 Python 环境或其他项目。
为了确保你的项目依赖可以在其他环境中重现,你可以使用以下命令将当前环境的依赖写入 requirements.txt 文件:
pip freeze > requirements.txt
requirements.txt 文件将包含所有当前环境中的安装包及其版本信息。
在新的环境中,你可以使用 requirements.txt 文件来安装所需的所有依赖:
pip install -r requirements.txt
当你完成工作时,可以通过以下命令退出虚拟环境:
deactivate
使用虚拟环境进行Python开发可以有效地隔离项目依赖,避免版本冲突。通过创建和激活虚拟环境、安装依赖、冻结依赖并在新环境中重新安装依赖,可以确保你的项目在不同环境中具有一致的运行表现。
]]>下面举一个例子说明:
{attribute 'qualified_only'} // 必须先写类型名称再写属性名称 (例如 eColor.Red)
// {attribute 'strict'} //取消 'strict' 以允许转换 UDINT 数据类型
{attribute 'to_string'} // 运行字符串转换 (例如 TO_STRING(eColor.Red) = 'Red')
TYPE eColor :
(
Red := 16#FFFF0000,
Green := 16#FF00FF00,
Blue := 16#FF0000FF
Yellow := 16#FFFFFF00,
) UDINT; // 声明 UDINT 作为 int 整形类型
END_TYPE
// 定义一些变量
ColorVar1 : eColor;
ColorVar2 : eColor;
ColorName : STRING;
ColorValue : UDINT;
ColorVar1 := eColor.Green; // ColorVar1 = 16#FF00FF00
ColorName := TO_STRING(ColorVar1); // ColorName = 'Green';
ColorValue := TO_UDINT(ColorVar1); // ColorValue = 16#FF00FF00
ColorVar2 := 16#FF00FF00; // ColorVar2.Green
ColorName := TO_STRING(ColorVar2); // ColorName = 'Green';
ColorValue := TO_UDINT(ColorVar2); // ColorValue = 16#FF00FF00
ColorVar1 := ColorVar2 OR eColor.Red; // 按位相与得到 Yellow=16#FFFFFF00
ColorName := TO_STRING(ColorVar1); // ColorName = 'Yellow';
ColorValue := TO_UDINT(ColorVar1); // ColorValue = 16#FFFFFF00
以上示例列举了常用的 enum 类型可进行的数据交互方式。
eColor.Green
可以获取enum类型属性的值,并可以赋值给其他对应 enum 实例TO_STRING(ColorVar1)
可以转换获取 enum 实例当前值对应属性名称字符串
下载时出现此报警,原因是 task 任务中对 gou 的排序有问题,放在前面的 pou 中使用了后面 pou 才设定好的数据,需要重新排列 task 任务序列:
mc_power
mc_jog
等控制轴的功能块,一运行就报错 SMC_FB_CALLED_FROM_WRONG_TASK,可能是不同的 pou 放在了多个 task 任务中,循环中内部有了冲突,将所有的 pou 放在同一个 task 中就可以解决问题。
主要步骤为:
首先需要配置工控机啊 BIOS 设置,将一些超线程,电源管理等选项关掉:
关闭BIOS 中激活的所有节能选项
停用可能导致系统管理中断的所有内容
然后就可以安装 RTE,官网下载需要的 runtime 安装包,注意区分 x86 还是 x64 设备。我下载的是 **CODESYS Control RTE SL (×86Windows 实时)。
官网下载地址:http://store.codesys.cn/codesys/store/index.html
在工控机上解压并安装需要的 RTE runtime,基本都是直接下一步即可,期间注意选择带不带 softmotion:
Control RTE 文件路径:C:\Program Files\CODESYS\CODESYS Control RTE3
Control RTE 安装路径:C:\ProgramData\CODESYS\CODESYSControlRTEV3
支持的网卡:
Systems with Windows and CODESYS Control RTE (Real-time SoftPLC):
一般情况下 intel 的千兆网卡都可以安装 CmpEt1000Drv 驱动。
首先进入设备管理器,选择需要更新 codesys 驱动的网卡,右键选择更新驱动:
选择从本地查找驱动程序:
选择从磁盘安装,从 RTE 文件路径找到对应的驱动目录并安装:
右键选择 plc configuration:
在 components manager 中在最后一个空行中填入安装的驱动名称,这里我填的是 CmpEt1000Drv:
确定并重启 plc 即可完成网卡驱动的安装及配置。
在codesys 开发项目中进行以下操作。
以上就是 RTE runtime 版添加 ethercat master 主站的简单方法。
相关系统变量:
sinumerik one 及 840D sl 系统以上参数默认值为 1000,828D 系统默认值为 1000000。
]]>%f
默认小数位数 6 位,但实际只想显示 3 位小数,此时就需要将界面变量的占位符进行设置以满足需求。语法:
% <标记> <最小显示数字个数> <类型>
-
当定义最小显示数字个数时 居左显示,+
显示数据正负号,0
当定义最小显示数字个数时空缺位显示 0d
十进制, b
二进制, o
八进制, x
十六进制示例:
%-5d:最小显示位数5位,且居左对齐显示,例如数据值为123时:`123 `
%+d:显示数据正负号,例如数据值为123时:`+123`
%05d:最小显示位数5位,且空缺位显示0,例如数据值为234时:`00234`
%08b:显示8位数的二进制模式,例如数据值为255时:`11111111`
%04x:显示4位数的十六进制模式,例如数据值为15时:`000f`
语法:
% <标记> <最小显示数字个数> . <精度> f
-
当定义最小显示数字个数时 居左显示,+
显示数据正负号,0
当定义最小显示数字个数时空缺位显示 0%1.6f
示例:
%-12.9f:显示12位数字 9位小数,且居左显示
%+6.3f:显示6位数字3位小数,且显示正负号标记
%06.3f:显示6位数字3位小数,且空缺位补0显示
语法:
%t[ <text> <time in unit> <text> ]
示例:
// 定义一个时间变量并给其赋值
ltTimeSpan : LTIME := LTIME#1D2H3M4S5MS6US7NS;
在一个 label 中定义:
text variable 设置:PLC_PRG.ltTimeSpan
text 占位符设置:Time span: %t[d] d
输出结果:Time span: 1 d
可用的占位符:%t[d]
天,%t[dd]
两位数字的天,%t[H]
小时,%t[HH]
两位数字小时,%t[m]
分钟,%t[mm]
两位数分钟,%t[s]
秒,%t[ss]
两位数秒。
也可以组合起来使用:
TEXT 占位符设置:%t[Value: dd-HH:mm:ss:ms:us:ns]
输出结果:Value: 01-02:03:04:005:006:007
如果不定义 label 的 text variable 属性,则会输出系统当前时间。
语法:
%t[ <date and time unit> ]
和时间类型类似的用法,下面举例说明:
//定义一个 date 类型变量
dateBy : DATE := DATE#2021-02-12;
在一个 label 中定义:
text variable 设置:PLC_PRG.dateBy
text 占位符设置:Date: %t[yyyy-MM-dd dddd]
输出结果:Date: 2/12/2021 Friday
可用占位符:%t[yyyy] 年,%t[yy] 两位数年,%t[y]一位数年,%t[MMMM] 英文月份,%t[MMM]英文简写月份,%t[MM]月份,%t[ddddd] 一周的第几天,%t[dddd]英文周几,%t[dd]一个月的第几天,%t[jjj]一年中的第几天,
如果不定义 label 的 text variable 属性,则会输出系统当前日期。
语法:
%s