TwinCAT 3 Tc2_Utilities库核心内容
功能块(3.1-3.82) 和函数(4.1-4.72) ,聚焦TwinCAT系统控制、数据转换、文件/内存操作、网络配置等核心能力,适配TwinCAT v3.1.0及以上版本,支持PC/CX(x86/x64/ARM)平台
gongkongbxs整理
3. 功能块(3.1-3.82)
功能块按应用场景分类,通用输出包含(运行状态)、
BUSY(错误状态)、
ERR(错误码),核心用途覆盖系统、数据、文件、网络等多场景。
ERRID
3.1 数据转换类功能块
聚焦数据格式转换与时间解码,适配基础数据处理场景:
| 功能块名称 | 核心用途 | 关键输入 | 关键输出 |
|---|---|---|---|
| BCD_TO_DEC(3.1) | BCD码转十进制,含数值校验 | BIN(BCD字节)、START(触发) | DOUT(十进制结果) |
| DEC_TO_BCD(3.4) | 十进制转BCD码,含数值校验 | DIN(十进制字节)、START(触发) | BOUT(BCD结果) |
| DCF77_TIME(3.2) | 解码DCF77无线电时钟信号(已被EX版本替代) | DCF_PULSE(信号)、RUN(启动) | CDT(日期时间)、READY(有效标识) |
| DCF77_TIME_EX(3.3) | 增强型DCF77解码,含时区/夏令时识别 | DCF_PULSE(信号)、RUN(启动)、TLP(脉冲阈值) | CDT(日期时间)、DOW(星期)、TZI(时区) |
3.2 系统配置与管理类功能块
用于TwinCAT系统、路由、注册表、时区等配置:
| 功能块名称 | 核心用途 | 关键特性 |
|---|---|---|
| FB_AddRouteEntry(3.6) | 添加AMS路由器连接 | 支持本地/远程系统,输入目标NetID和路由参数 |
| FB_RemoveRouteEntry(3.51) | 删除AMS路由器连接 | 按连接名称删除,支持本地/远程系统 |
| FB_RegQueryValue(3.49) | 读取Windows注册表值 | 访问HKEY_LOCAL_MACHINE分支,支持各类数据类型 |
| FB_RegSetValue(3.50) | 写入Windows注册表值 | 自动适配64位系统WOW6432Node路径 |
| FB_GetTimeZoneInformation(3.33) | 读取操作系统时区设置 | 输出时区结构和夏令时信息 |
| FB_SetTimeZoneInformation(3.53) | 设置操作系统时区 | 输入时区结构,支持自定义时区参数 |
3.3 文件与内存操作类功能块
处理文件读写、CSV解析、内存缓冲区管理:
| 功能块名称 | 核心用途 | 关键特性 |
|---|---|---|
| FB_CSVMemBufferReader(3.11) | 解析缓冲区中CSV格式数据 | 按CRLF分隔数据集,支持字符串/字节流输出 |
| FB_CSVMemBufferWriter(3.12) | 生成CSV格式数据到缓冲区 | 自动添加字段分隔符,支持字符串/二进制数据 |
| FB_FileRingBuffer(3.17) | 文件环形缓冲区(FIFO) | 支持数据覆盖/溢出报错,读写老数据优先 |
| FB_MemRingBuffer(3.46) | 内存环形缓冲区(FIFO) | 动态存储不同长度数据集,支持复位/查询计数 |
| FB_MemBufferMerge(3.44) | 合并多个小数据段为大数据段 | 输入目标缓冲区和多个数据段,输出合并结果 |
| FB_MemBufferSplit(3.45) | 拆分大数据段为多个小数据段 | 按指定长度拆分,输出分段结果和结束标识 |
3.4 授权与许可证管理类功能块
用于许可证状态查询、加密狗操作:
| 功能块名称 | 核心用途 | 关键输入/输出 |
|---|---|---|
| FB_CheckLicense(3.10) | 查询TwinCAT 3许可证状态 | 输入许可证GUID,输出许可证有效性数据 |
| FB_GetLicenses(3.28) | 读取有效/无效TwinCAT许可证 | 输出许可证列表及数量统计 |
| FB_GetLicensesEx(3.29) | 扩展许可证查询(含OEM/演示许可证) | 区分有效/挂起/演示/OEM/失效许可证 |
| FB_LicFileCopyToDongle(3.37) | 从硬盘复制文件到许可证加密狗 | 支持USB/EL6070加密狗,需访问密码 |
| FB_LicFileRead(3.41) | 从加密狗读取文件到缓冲区 | 输入文件名和缓冲区地址,输出读取字节数 |
3.5 PLC与TwinCAT系统控制类功能块
控制PLC运行、TwinCAT状态监控与配置:
| 功能块名称 | 核心用途 | 关键输入/输出 |
|---|---|---|
| PLC_Start/PLC_Stop/PLC_Reset(3.71-3.73) | PLC运行/停止/复位 | 输入目标NetID和端口,控制PLC runtime状态 |
| TC_Config(3.77) | TwinCAT系统切换到CONFIG模式 | 支持本地/远程系统,运行中系统先停后切 |
| TC_CpuUsage(3.78) | 查询TwinCAT系统CPU使用率 | 输出当前CPU占用百分比(%) |
| TC_SysLatency(3.81) | 查询TwinCAT系统延迟时间 | 输出当前延迟和最大延迟(单位:μs) |
| WritePersistentData(3.82) | 保存PLC持久化变量到文件 | 输入PLC端口,将变量值写入.bootdata文件 |
3.6 网络与主机信息类功能块
查询网络适配器、主机名、IP等网络信息:
| 功能块名称 | 核心用途 | 关键输入/输出 |
|---|---|---|
| FB_GetAdaptersInfo(3.21) | 读取网络适配器信息 | 输出适配器IP、MAC地址等属性列表 |
| FB_GetHostName(3.26) | 读取本地/远程主机名 | 输入目标NetID,输出主机名字符串 |
| FB_GetHostAddrByName(3.25) | 按主机名查询IPv4地址 | 输入主机名,输出IP字符串和字节数组 |
| GetRemotePCInfo(3.59) | 读取TwinCAT路由器配置的远程PC信息 | 输出远程PC的NetID和名称列表 |
3.7 时间同步与时钟类功能块
实现系统时间、RTC时钟的同步与管理:
| 功能块名称 | 核心用途 | 关键特性 |
|---|---|---|
| FB_LocalSystemTime(3.43) | 同步Windows系统时间到PLC | 支持周期性同步,输出时区和本地时间 |
| RTC/RTC_EX/RTC_EX2(3.74-3.76) | 软件实时时钟 | 基础版(秒级)、增强版(毫秒级)、高级版(微秒级) |
| NT_GetTime(3.61) | 读取Windows本地系统时间 | 输出年/月/日/时/分/秒/毫秒结构化数据 |
| NT_SetLocalTime(3.63) | 设置Windows本地系统时间 | 输入结构化时间数据,同步系统时钟 |
3.8 其他功能块
涵盖PID控制、性能分析、系统操作等:
FB_BasicPID(3.9):简单PID控制器,输入设定值/实际值/参数(Kp/Tn/Tv/Td),输出控制量。Profiler(3.73):测量PLC代码执行时间,输出单次/最小/最大/平均执行时间(μs)。FB_ScopeServerControl(3.52):控制Scope Server数据记录,支持启动/停止/保存配置。NT_Shutdown/NT_Reboot(3.65-3.62):Windows系统关机/重启,支持延迟执行。
4. 函数(4.1-4.72)
函数按功能分类,聚焦数据转换、字符串操作、字节序处理等基础能力,无复杂状态管理,直接输入输出数据。
4.1 时间函数(4.1.1-4.1.18)
处理日期时间格式转换与时间计算:
| 函数名 | 核心用途 | 输入/输出 |
|---|---|---|
| DT_TO_FILETIME(4.1.1) | DATE_AND_TIME转FILETIME格式 | 输入:DT → 输出:T_FILETIME |
| FILETIME_TO_DT(4.1.11) | FILETIME转DATE_AND_TIME格式 | 输入:T_FILETIME → 输出:DT |
| F_GetDayOfWeek(4.1.4) | 计算指定日期的星期(1=周一~7=周日) | 输入:DT → 输出:星期数(WORD) |
| F_GetWeekOfTheYear(4.1.8) | 计算指定日期的年度周数(ISO 8601) | 输入:DT → 输出:周数(WORD) |
| F_YearIsLeapYear(4.1.10) | 判断是否为闰年 | 输入:年份(WORD) → 输出:BOOL(是/否) |
4.2 扩展字符串函数(4.2.1-4.2.28)
支持字符串拼接、修改、编码转换等增强操作:
| 函数名 | 核心用途 | 关键特性 |
|---|---|---|
| CONCAT2(4.2.2) | 拼接两个字符串,支持长度校验 | 避免溢出,超长时截断并返回状态 |
| FIND2(4.2.5) | 在字符串中查找子串,支持重复匹配 | 返回首次匹配位置,未找到返回0 |
| FindAndReplace(4.2.8) | 查找并替换字符串中指定子串 | 支持多次替换,返回替换次数 |
| STRING_TO_UTF8(4.2.16) | 字符串转UTF-8编码 | 输入字符串指针,输出UTF-8字节流 |
| UTF8_TO_STRING(4.2.19) | UTF-8编码转字符串 | 跳过未知字符,超长时截断 |
| WSTRING_TO_STRING2(4.2.26) | 宽字符串转普通字符串 | 不支持字符自动跳过,返回转换状态 |
4.3 字节序转换函数(4.3.2-4.3.11)
实现主机与网络字节序互转(适配网络通信):
| 函数名 | 核心用途 | 数据长度 |
|---|---|---|
| HOST_TO_BE16/BE32/BE64(4.3.2-4.3.4) | 主机字节序转网络字节序 | 16位/32位/64位( legacy类型) |
| HOST_TO_BE64EX(4.3.5) | 主机字节序转网络字节序 | 64位(原生LWORD类型) |
| BE16_TO_HOST/BE32_TO_HOST(4.3.7-4.3.8) | 网络字节序转主机字节序 | 16位/32位 |
| BE64_TO_HOSTEX(4.3.10) | 网络字节序转主机字节序 | 64位(原生LWORD类型) |
4.4 浮点与复数函数(4.4.1-4.5.2)
处理浮点/复数与其他类型转换、有效性检测:
| 函数名 | 核心用途 | 输入/输出 |
|---|---|---|
| BOOL_TO_FLOAT/FLOAT_TO_BOOL(4.4.1/4.4.3) | 布尔值与浮点值互转 | 布尔→浮点(1.0/0.0),浮点非0→TRUE |
| LrealIsFinite(4.4.16) | 检测LREAL是否为有限值 | 输入:LREAL → 输出:BOOL(有限/无限) |
| LrealIsNaN(4.4.17) | 检测LREAL是否为无效值(NaN) | 输入:LREAL → 输出:BOOL(是/否) |
| LcomplexAbs(4.5.2) | 计算复数的绝对值 | 输入:LCOMPLEX → 输出:LREAL(绝对值) |
| LcomplexIsNaN(4.5.1) | 检测复数是否为无效值(NaN) | 输入:LCOMPLEX → 输出:BOOL(是/否) |
4.5 指针转换函数(4.6.1-4.6.26)
读取各类指针变量的实际内容:
| 函数名 | 核心用途 | 输入/输出 |
|---|---|---|
| PBOOL_TO_BOOL(4.6.1) | 读取BOOL指针指向的内容 | 输入:POINTER TO BOOL → 输出:BOOL |
| PBYTE_TO_BYTE(4.6.2) | 读取BYTE指针指向的内容 | 输入:POINTER TO BYTE → 输出:BYTE |
| PDT_TO_DT(4.6.5) | 读取DATE_AND_TIME指针指向的内容 | 输入:POINTER TO DT → 输出:DT |
| PSTRING_TO_STRING(4.6.16) | 读取STRING指针指向的内容 | 输入:POINTER TO STRING → 输出:STRING |
4.6 其他函数(4.7.1-4.72)
涵盖校验和、GUID转换、数据与字符串互转等:
| 函数名 | 核心用途 | 关键特性 |
|---|---|---|
| F_CheckSum16(4.30) | 计算16位校验和 | 输入数据缓冲区,输出校验和结果 |
| DATA_TO_HEXSTR(4.21) | 二进制数据转十六进制字符串 | 支持指定长度,输出格式化字符串 |
| HEXSTR_TO_DATA(4.45) | 十六进制字符串转二进制数据 | 输入字符串,输出数据缓冲区 |
| GUID_TO_STRING(4.41) | GUID结构转字符串 | 输出标准格式GUID字符串(含连字符) |
| STRING_TO_GUID(4.62) | 字符串转GUID结构 | 支持标准格式字符串解析 |
| DEG_TO_RAD/RAD_TO_DEG(4.22/4.58) | 角度与弧度互转 | 输入角度/弧度值,输出对应转换结果 |
