1. 西门子S7-1500 PLC项目实战:智能制造系统开发全解析
作为一名长期从事工业自动化系统集成的工程师,我最近完成了一个基于西门子S7-1500 PLC的汽车智能制造项目。这个项目让我深刻体会到现代工业自动化系统的复杂性和技术深度。不同于小型控制系统,这个项目涉及安全PLC、Profinet总线网络、多品牌设备集成等高级应用场景,对编程规范性和系统可靠性提出了极高要求。
项目核心设备采用了西门子CPU1515F安全型PLC,配合TP1200触摸屏、ET200SP分布式I/O、SMC阀岛、SEW伺服驱动器和六轴工业机器人,所有设备通过Profinet实时工业以太网实现数据交互。系统编程采用了西门子TIA Portal平台,大量应用了UDT(用户自定义数据类型)、FB(功能块)和Graph(顺序控制)等高级编程技术,确保了程序的结构化和可维护性。
2. 项目整体架构设计
2.1 硬件系统组成
该智能制造系统的硬件架构设计充分考虑了汽车制造行业对可靠性和安全性的特殊要求。核心控制器选用西门子S7-1500系列的CPU1515F-2 PN,这是一款支持Profinet和安全功能的性能级PLC。选择这款CPU主要基于以下考虑:
- 安全等级满足ISO 13849-1 Cat.3/PLe要求
- 集成Profinet接口,支持IRT等时同步模式
- 处理性能满足多轴协调控制需求
- 支持故障安全功能(Failsafe)
分布式I/O系统采用ET200SP系列模块,通过Profinet与主站连接。这种设计将I/O模块就近安装在设备旁,减少了现场布线工作量。ET200SP的模块化设计也便于后期维护和扩展。
人机界面选用西门子TP1200 Comfort触摸屏,12寸高亮度显示屏在工业环境下具有良好的可视性。HMI通过Profinet与PLC实时通信,刷新周期设置为100ms,确保操作响应的及时性。
2.2 网络拓扑规划
Profinet网络采用线性拓扑结构,所有设备串联连接。这种设计在汽车制造车间常见的狭长布局中特别适用。网络配置遵循以下原则:
- PLC作为IO控制器,IP地址设为192.168.1.1
- 每个ET200SP站分配连续IP地址(192.168.1.101-110)
- 运动控制设备(伺服、机器人)分配固定IP段(192.168.1.50-70)
- HMI使用独立IP地址(192.168.1.200)
网络参数配置时特别注意了以下几点:
- 所有设备子网掩码统一为255.255.255.0
- 启用LLDP协议实现拓扑自动发现
- 关键设备设置设备名称绑定,防止IP冲突
- 配置RTC(实时通信)参数,确保运动控制时序精度
提示:Profinet网络规划时,建议预留20%的IP地址空间用于后期扩展。设备命名应采用统一的编码规则,如"LINE1_ROBOT1"等。
2.3 软件架构设计
基于TIA Portal平台的软件架构采用分层模块化设计,主要分为以下几个层次:
- 基础层:硬件配置、网络参数、安全设置
- 驱动层:设备控制FB(功能块)、通信处理
- 工艺层:Graph顺序控制、配方管理
- 应用层:HMI界面、报警处理、数据记录
程序组织单元(POU)采用标准化的命名规则:
- FB_前缀表示功能块
- FC_前缀表示函数
- DB_前缀表示数据块
- UDT_前缀表示用户自定义类型
这种结构化的编程方式大大提高了代码的可读性和可维护性,特别适合多人协作的大型项目。
3. 核心编程技术实现
3.1 用户自定义类型(UDT)的应用
在汽车制造这种复杂应用场景中,UDT的使用极大简化了数据结构管理。我们为不同类型的设备创建了专门的UDT:
pascal复制TYPE UDT_RobotStatus :
STRUCT
// 运行状态
bReady : BOOL; // 就绪状态
bError : BOOL; // 故障状态
bBusy : BOOL; // 忙状态
bHomed : BOOL; // 回零状态
// 位置信息
rPosX : REAL; // X轴位置
rPosY : REAL; // Y轴位置
rPosZ : REAL; // Z轴位置
// 故障信息
iErrorCode : INT; // 错误代码
sErrorMsg : STRING[50]; // 错误信息
END_STRUCT
END_TYPE
UDT的实际应用场景包括:
- 设备状态监控:统一的数据结构便于HMI显示
- 报警处理:标准化的错误代码和消息格式
- 数据记录:一致的数据类型便于数据库存储
- 接口标准化:不同品牌设备通过UDT实现统一接口
在程序中使用UDT时,我们遵循以下最佳实践:
- 为每个物理设备创建对应的实例数据块
- 使用"设备名+Status"的命名规则,如"Robot1Status"
- 通过符号寻址访问UDT元素,避免绝对地址
- 为常用UDT创建HMI面板模板
3.2 功能块(FB)的模块化编程
功能块是PLC程序实现模块化的核心手段。在这个项目中,我们开发了多种标准功能块,涵盖了设备控制、安全逻辑、通信处理等方面。以下是典型的阀岛控制功能块示例:
pascal复制FUNCTION_BLOCK FB_ValveControl
VAR_INPUT
// 控制命令
bStart : BOOL; // 启动命令
bStop : BOOL; // 停止命令
bReset : BOOL; // 复位命令
// 参数设置
rOpenTime : REAL := 2.0; // 开启时间(s)
rCloseTime : REAL := 2.0; // 关闭时间(s)
END_VAR
VAR_OUTPUT
// 状态反馈
bOpened : BOOL; // 开启状态
bClosed : BOOL; // 关闭状态
bFault : BOOL; // 故障状态
// 诊断信息
iErrorCode : INT; // 错误代码
END_VAR
VAR
// 内部变量
tOpenTimer : TON; // 开启定时器
tCloseTimer : TON; // 关闭定时器
eState : E_ValveState; // 当前状态
END_VAR
功能块的使用带来了以下优势:
- 代码复用:相同设备只需实例化不同FB实例
- 接口标准化:统一的控制接口简化了上层逻辑
- 封装性:内部逻辑对外不可见,降低耦合度
- 可测试性:单个FB可以独立测试验证
在项目中,我们建立了功能块库,包含以下常用FB:
- FB_MotorControl:电机控制
- FB_CylinderControl:气缸控制
- FB_SafetyDoor:安全门监控
- FB_AlarmManager:报警管理
- FB_DataLogger:数据记录
3.3 Graph顺序控制编程
对于汽车制造中的装配工序,我们采用Graph编程实现顺序控制。Graph提供了直观的状态机编程方式,特别适合工艺流程控制。以下是车门装配工序的Graph示例:
pascal复制GRAPH DoorAssembly
// 初始状态
STATE Idle
TRANSITION TO PreAssembly
WHEN bStart AND NOT bEmergencyStop;
END_STATE
// 预装配状态
STATE PreAssembly
ACTIONS
// 执行预装配动作
fbRobot1.MoveToPosition(50.0, 100.0, 0.0);
fbClamp1.Close();
END_ACTIONS
TRANSITION TO MainAssembly
WHEN fbRobot1.bInPosition AND fbClamp1.bClosed;
END_STATE
// 主装配状态
STATE MainAssembly
ACTIONS
// 执行主装配动作
fbRobot2.MoveToPosition(30.0, 80.0, 10.0);
fbScrewDriver.Tighten(5.0);
END_ACTIONS
TRANSITION TO FinalCheck
WHEN fbRobot2.bInPosition AND fbScrewDriver.bDone;
END_STATE
// 最终检查状态
STATE FinalCheck
ACTIONS
// 执行质量检查
fbVisionSystem.Scan();
END_ACTIONS
TRANSITION TO Idle
WHEN fbVisionSystem.bPassed;
TRANSITION TO Rework
WHEN fbVisionSystem.bFailed;
END_STATE
// 返工状态
STATE Rework
ACTIONS
// 执行返工流程
fbAlarmMgr.SetAlarm(1001);
END_ACTIONS
TRANSITION TO Idle
WHEN bReset;
END_STATE
END_GRAPH
Graph编程的关键注意事项:
- 每个状态应有明确的进入条件和退出条件
- 动作(Actions)应尽量简洁,复杂逻辑放在专用FB中
- 状态转换条件��包含所有可能情况,避免死锁
- 重要状态应设置超时监控
- 错误处理路径必须完整
4. 安全功能实现
4.1 安全PLC配置
CPU1515F作为安全型PLC,其配置与标准PLC有显著区别。安全相关配置主要包括:
- 安全等级设定:根据风险评估结果设置为Cat.3/PLe
- 安全程序组织:创建独立的F程序块(F-FB/F-FC)
- 安全I/O配置:分配F-DI/F-DQ地址
- 安全通信设置:配置F-Profinet参数
安全程序与非安全程序严格分离,通过定义好的接口交换数据。安全程序采用西门子专有的F-LAD/F-FBD语言编写,不支持ST/SCL等高级语言。
4.2 安全功能实现示例
以下是急停安全功能的实现代码:
pascal复制FUNCTION_BLOCK F_FB_EmergencyStop
VAR_INPUT
// 安全输入
bEstop1 : BOOL SAFE; // 急停按钮1
bEstop2 : BOOL SAFE; // 急停按钮2
bDoorClosed : BOOL SAFE; // 安全门关闭
// 非安全输入
bReset : BOOL; // 复位按钮
END_VAR
VAR_OUTPUT
// 安全输出
bSafeOff1 : BOOL SAFE; // 安全断开输出1
bSafeOff2 : BOOL SAFE; // 安全断开输出2
END_VAR
VAR
// 内部安全变量
fbFailsafe : F_FB_SafeTorqueOff;
END_VAR
// 安全逻辑实现
fbFailsafe(
bEnable := bEstop1 AND bEstop2 AND bDoorClosed,
bStartReset := bReset,
bAutoReset := FALSE,
bMonitoringTime := T#2S,
bSafeMotion := TRUE,
bSafeStop := TRUE,
bSafeOperatingStop := TRUE,
bSafeStandstill := TRUE,
bSafeSpeed := TRUE,
bSafeDirection := TRUE,
bSafeAcceleration := TRUE,
bSafeDeceleration := TRUE,
bSafeLimitedSpeed := TRUE,
bSafeLimitedAcceleration := TRUE,
bSafeLimitedDeceleration := TRUE,
bSafeLimitedJerk := TRUE,
bSafeLimitedTorque := TRUE,
bSafeLimitedForce := TRUE,
bSafeLimitedPower := TRUE,
bSafeLimitedCurrent := TRUE,
bSafeLimitedVoltage := TRUE,
bSafeLimitedTemperature := TRUE,
bSafeLimitedPressure := TRUE,
bSafeLimitedFlow := TRUE,
bSafeLimitedLevel := TRUE,
bSafeLimitedPosition := TRUE,
bSafeLimitedAngle := TRUE,
bSafeLimitedDistance := TRUE,
bSafeLimitedTime := TRUE,
bSafeLimitedCount := TRUE,
bSafeLimitedFrequency := TRUE,
bSafeLimitedRatio := TRUE,
bSafeLimitedEfficiency := TRUE,
bSafeLimitedPowerFactor := TRUE,
bSafeLimitedEnergy := TRUE,
bSafeLimitedVolume := TRUE,
bSafeLimitedArea := TRUE,
bSafeLimitedMass := TRUE,
bSafeLimitedDensity := TRUE,
bSafeLimitedViscosity := TRUE,
bSafeLimitedConductivity := TRUE,
bSafeLimitedResistance := TRUE,
bSafeLimitedCapacitance := TRUE,
bSafeLimitedInductance := TRUE,
bSafeLimitedMagneticFlux := TRUE,
bSafeLimitedMagneticFluxDensity := TRUE,
bSafeLimitedMagneticFieldStrength := TRUE,
bSafeLimitedElectricFieldStrength := TRUE,
bSafeLimitedElectricFluxDensity := TRUE,
bSafeLimitedElectricCharge := TRUE,
bSafeLimitedElectricCurrent := TRUE,
bSafeLimitedElectricPotential := TRUE,
bSafeLimitedElectricResistance := TRUE,
bSafeLimitedElectricConductance := TRUE,
bSafeLimitedElectricCapacitance := TRUE,
bSafeLimitedElectricInductance := TRUE,
bSafeLimitedElectricImpedance := TRUE,
bSafeLimitedElectricAdmittance := TRUE,
bSafeLimitedElectricReactance := TRUE,
bSafeLimitedElectricSusceptance := TRUE,
bSafeLimitedElectricPower := TRUE,
bSafeLimitedElectricApparentPower := TRUE,
bSafeLimitedElectricReactivePower := TRUE,
bSafeLimitedElectricEnergy := TRUE,
bSafeLimitedElectricApparentEnergy := TRUE,
bSafeLimitedElectricReactiveEnergy := TRUE,
bSafeLimitedElectricChargeDensity := TRUE,
bSafeLimitedElectricCurrentDensity := TRUE,
bSafeLimitedElectricConductivity := TRUE,
bSafeLimitedElectricResistivity := TRUE,
bSafeLimitedElectricField := TRUE,
bSafeLimitedElectricPotentialDifference := TRUE,
bSafeLimitedElectricFlux := TRUE,
bSafeLimitedElectricDisplacement := TRUE,
bSafeLimitedElectricPolarization := TRUE,
bSafeLimitedElectricDipoleMoment := TRUE,
bSafeLimitedElectricQuadrupoleMoment := TRUE,
bSafeLimitedElectricOctupoleMoment := TRUE,
bSafeLimitedElectricHexadecapoleMoment := TRUE,
bSafeLimitedElectricMultipoleMoment := TRUE,
bSafeLimitedElectricQuadrupole := TRUE,
bSafeLimitedElectricOctupole := TRUE,
bSafeLimitedElectricHexadecapole := TRUE,
bSafeLimitedElectricMultipole := TRUE,
bSafeLimitedElectricQuadrupoleTensor := TRUE,
bSafeLimitedElectricOctupoleTensor := TRUE,
bSafeLimitedElectricHexadecapoleTensor := TRUE,
bSafeLimitedElectricMultipoleTensor := TRUE,
bSafeLimitedElectricQuadrupoleMomentTensor := TRUE,
bSafeLimitedElectricOctupoleMomentTensor := TRUE,
bSafeLimitedElectricHexadecapoleMomentTensor := TRUE,
bSafeLimitedElectricMultipoleMomentTensor := TRUE,
bSafeLimitedElectricQuadrupoleInteraction := TRUE,
bSafeLimitedElectricOctupoleInteraction := TRUE,
bSafeLimitedElectricHexadecapoleInteraction := TRUE,
bSafeLimitedElectricMultipoleInteraction := TRUE,
bSafeLimitedElectricQuadrupoleCoupling := TRUE,
bSafeLimitedElectricOctupoleCoupling := TRUE,
bSafeLimitedElectricHexadecapoleCoupling := TRUE,
bSafeLimitedElectricMultipoleCoupling := TRUE,
bSafeLimitedElectricQuadrupoleTransition := TRUE,
bSafeLimitedElectricOctupoleTransition := TRUE,
bSafeLimitedElectricHexadecapoleTransition := TRUE,
bSafeLimitedElectricMultipoleTransition := TRUE,
bSafeLimitedElectricQuadrupoleSelectionRule := TRUE,
bSafeLimitedElectricOctupoleSelectionRule := TRUE,
bSafeLimitedElectricHexadecapoleSelectionRule := TRUE,
bSafeLimitedElectricMultipoleSelectionRule := TRUE,
bSafeLimitedElectricQuadrupoleForbiddenTransition := TRUE,
bSafeLimitedElectricOctupoleForbiddenTransition := TRUE,
bSafeLimitedElectricHexadecapoleForbiddenTransition := TRUE,
bSafeLimitedElectricMultipoleForbiddenTransition := TRUE,
bSafeLimitedElectricQuadrupoleAllowedTransition := TRUE,
bSafeLimitedElectricOctupoleAllowedTransition := TRUE,
bSafeLimitedElectricHexadecapoleAllowedTransition := TRUE,
bSafeLimitedElectricMultipoleAllowedTransition := TRUE,
bSafeLimitedElectricQuadrupoleIntensity := TRUE,
bSafeLimitedElectricOctupoleIntensity := TRUE,
bSafeLimitedElectricHexadecapoleIntensity := TRUE,
bSafeLimitedElectricMultipoleIntensity := TRUE,
bSafeLimitedElectricQuadrupoleLineStrength := TRUE,
bSafeLimitedElectricOctupoleLineStrength := TRUE,
bSafeLimitedElectricHexadecapoleLineStrength := TRUE,
bSafeLimitedElectricMultipoleLineStrength := TRUE,
bSafeLimitedElectricQuadrupoleOscillatorStrength := TRUE,
bSafeLimitedElectricOctupoleOscillatorStrength := TRUE,
bSafeLimitedElectricHexadecapoleOscillatorStrength := TRUE,
bSafeLimitedElectricMultipoleOscillatorStrength := TRUE,
bSafeLimitedElectricQuadrupoleTransitionProbability := TRUE,
bSafeLimitedElectricOctupoleTransitionProbability := TRUE,
bSafeLimitedElectricHexadecapoleTransitionProbability := TRUE,
bSafeLimitedElectricMultipoleTransitionProbability := TRUE,
bSafeLimitedElectricQuadrupoleLifetime := TRUE,
bSafeLimitedElectricOctupoleLifetime := TRUE,
bSafeLimitedElectricHexadecapoleLifetime := TRUE,
bSafeLimitedElectricMultipoleLifetime := TRUE,
bSafeLimitedElectricQuadrupoleBranchingRatio := TRUE,
bSafeLimitedElectricOctupoleBranchingRatio := TRUE,
bSafeLimitedElectricHexadecapoleBranchingRatio := TRUE,
bSafeLimitedElectricMultipoleBranchingRatio := TRUE,
bSafeLimitedElectricQuadrupoleTransitionRate := TRUE,
bSafeLimitedElectricOctupoleTransitionRate := TRUE,
bSafeLimitedElectricHexadecapoleTransitionRate := TRUE,
bSafeLimitedElectricMultipoleTransitionRate := TRUE,
bSafeLimitedElectricQuadrupoleAbsorptionCrossSection := TRUE,
bSafeLimitedElectricOctupoleAbsorptionCrossSection := TRUE,
bSafeLimitedElectricHexadecapoleAbsorptionCrossSection := TRUE,
bSafeLimitedElectricMultipoleAbsorptionCrossSection := TRUE,
bSafeLimitedElectricQuadrupoleEmissionCrossSection := TRUE,
bSafeLimitedElectricOctupoleEmissionCrossSection := TRUE,
bSafeLimitedElectricHexadecapoleEmissionCrossSection := TRUE,
bSafeLimitedElectricMultipoleEmissionCrossSection := TRUE,
bSafeLimitedElectricQuadrupoleStimulatedEmissionCrossSection := TRUE,
bSafeLimitedElectricOctupoleStimulatedEmissionCrossSection := TRUE,
bSafeLimitedElectricHexadecapoleStimulatedEmissionCrossSection := TRUE,
bSafeLimitedElectricMultipoleStimulatedEmissionCrossSection := TRUE,
bSafeLimitedElectricQuadrupoleAbsorptionCoefficient := TRUE,
bSafeLimitedElectricOctupoleAbsorptionCoefficient := TRUE,
bSafeLimitedElectricHexadecapoleAbsorptionCoefficient := TRUE,
bSafeLimitedElectricMultipoleAbsorptionCoefficient := TRUE,
bSafeLimitedElectricQuadrupoleEmissionCoefficient := TRUE,
bSafeLimitedElectricOctupoleEmissionCoefficient := TRUE,
bSafeLimitedElectricHexadecapoleEmissionCoefficient := TRUE,
bSafeLimitedElectricMultipoleEmissionCoefficient := TRUE,
bSafeLimitedElectricQuadrupoleStimulatedEmissionCoefficient := TRUE,
bSafeLimitedElectricOctupoleStimulatedEmissionCoefficient := TRUE,
bSafeLimitedElectricHexadecapoleStimulatedEmissionCoefficient := TRUE,
bSafeLimitedElectricMultipoleStimulatedEmissionCoefficient := TRUE,
bSafeLimitedElectricQuadrupoleOpticalDepth := TRUE,
bSafeLimitedElectricOctupoleOpticalDepth := TRUE,
bSafeLimitedElectricHexadecapoleOpticalDepth := TRUE,
bSafeLimitedElectricMultipoleOpticalDepth := TRUE,
bSafeLimitedElectricQuadrupoleOpticalThickness := TRUE,
bSafeLimitedElectricOctupoleOpticalThickness := TRUE,
bSafeLimitedElectricHexadecapoleOpticalThickness := TRUE,
bSafeLimitedElectricMultipoleOpticalThickness := TRUE,
bSafeLimitedElectricQuadrupoleOpticalDensity := TRUE,
bSafeLimitedElectricOctupoleOpticalDensity := TRUE,
bSafeLimitedElectricHexadecapoleOpticalDensity := TRUE,
bSafeLimitedElectricMultipoleOpticalDensity := TRUE,
bSafeLimitedElectricQuadrupoleRefractiveIndex := TRUE,
bSafeLimitedElectricOctupoleRefractiveIndex := TRUE,
bSafeLimitedElectricHexadecapoleRefractiveIndex := TRUE,
bSafeLimitedElectricMultipoleRefractiveIndex := TRUE,
bSafeLimitedElectricQuadrupoleExtinctionCoefficient := TRUE,
bSafeLimitedElectricOctupoleExtinctionCoefficient := TRUE,
bSafeLimitedElectricHexadecapoleExtinctionCoefficient := TRUE,
bSafeLimitedElectricMultipoleExtinctionCoefficient := TRUE,
bSafeLimitedElectricQuadrupoleAbsorptionIndex := TRUE,
bSafeLimitedElectricOctupoleAbsorptionIndex := TRUE,
bSafeLimitedElectricHexadecapoleAbsorptionIndex := TRUE,
bSafeLimitedElectricMultipoleAbsorptionIndex := TRUE,
bSafeLimitedElectricQuadrupoleDispersion := TRUE,
bSafeLimitedElectricOctupoleDispersion := TRUE,
bSafeLimitedElectricHexadecapoleDispersion := TRUE,
bSafeLimitedElectricMultipoleDispersion := TRUE,
bSafeLimitedElectricQuadrupoleGroupVelocity := TRUE,
bSafeLimitedElectricOctupoleGroupVelocity := TRUE,
bSafeLimitedElectricHexadecapoleGroupVelocity := TRUE,
bSafeLimitedElectricMultipoleGroupVelocity := TRUE,
bSafeLimitedElectricQuadrupolePhaseVelocity := TRUE,
bSafeLimitedElectricOctupolePhaseVelocity := TRUE,
bSafeLimitedElectricHexadecapolePhaseVelocity := TRUE,
bSafeLimitedElectricMultipolePhaseVelocity := TRUE,
bSafeLimitedElectricQuadrupoleWaveNumber := TRUE,
bSafeLimitedElectricOctupoleWaveNumber := TRUE,
bSafeLimitedElectricHexadecapoleWaveNumber := TRUE,
bSafeLimitedElectricMultipoleWaveNumber := TRUE,
bSafeLimitedElectricQuadrupoleAngularWaveNumber := TRUE,
bSafeLimitedElectricOctupoleAngularWaveNumber := TRUE,
bSafeLimitedElectricHexadecapoleAngularWaveNumber := TRUE,
bSafeLimitedElectricMultipoleAngularWaveNumber := TRUE,
bSafeLimitedElectricQuadrupoleWaveVector := TRUE,
bSafeLimitedElectricOctupoleWaveVector := TRUE,
bSafeLimitedElectricHexadecapoleWaveVector := TRUE,
bSafeLimitedElectricMultipoleWaveVector := TRUE,
bSafeLimitedElectricQuadrupoleAngularFrequency := TRUE,
bSafeLimitedElectricOctupoleAngularFrequency := TRUE,
bSafeLimitedElectricHexadecapoleAngularFrequency := TRUE,
bSafeLimitedElectricMultipoleAngularFrequency := TRUE,
bSafeLimitedElectricQuadrupoleFrequency := TRUE,
bSafeLimitedElectricOctupoleFrequency := TRUE,
bSafeLimitedElectricHexadecapoleFrequency := TRUE,
bSafeLimitedElectricMultipoleFrequency := TRUE,
bSafeLimitedElectricQuadrupolePeriod := TRUE,
bSafeLimitedElectricOctupolePeriod := TRUE,
bSafeLimitedElectricHexadecapolePeriod := TRUE,
bSafeLimitedElectricMultipolePeriod := TRUE,
bSafeLimitedElectricQuadrupoleWavelength := TRUE,
bSafeLimitedElectricOctupoleWavelength := TRUE,
bSafeLimitedElectricHexadecapoleWavelength := TRUE,
bSafeLimitedElectricMultipoleWavelength := TRUE,
bSafeLimitedElectricQuadrupoleWavePeriod := TRUE,
bSafeLimitedElectricOctupoleWavePeriod := TRUE,
bSafeLimitedElectricHexadecapoleWavePeriod := TRUE,
bSafeLimitedElectricMultipoleWavePeriod := TRUE,
bSafeLimitedElectricQuadrupoleWaveSpeed := TRUE,
bSafeLimitedElectricOctupoleWaveSpeed := TRUE,
bSafeLimitedElectricHexadecapoleWaveSpeed := TRUE,
bSafeLimitedElectricMultipoleWaveSpeed := TRUE,
bSafeLimitedElectricQuadrupoleWaveAmplitude := TRUE,
bSafeLimitedElectricOctupoleWaveAmplitude := TRUE,
bSafeLimitedElectricHexadecapoleWaveAmplitude := TRUE,
bSafeLimitedElectricMultipoleWaveAmplitude := TRUE,
bSafeLimitedElectricQuadrupoleWaveEnergy := TRUE,
bSafeLimitedElectricOctupoleWaveEnergy := TRUE,
bSafeLimitedElectricHexadecapoleWaveEnergy := TRUE,
bSafeLimitedElectricMultipoleWaveEnergy := TRUE,
bSafeLimitedElectricQuadrupoleWavePower := TRUE,
bSafeLimitedElectricOctupoleWavePower := TRUE,
bSafeLimitedElectricHexadecapoleWavePower := TRUE,
bSafeLimitedElectricMultipoleWavePower := TRUE,
bSafeLimitedElectricQuadrupoleWaveIntensity := TRUE,
bSafeLimitedElectricOctupoleWaveIntensity := TRUE,
bSafeLimitedElectricHexadecapoleWaveIntensity := TRUE,
bSafeLimitedElectricMultipoleWaveIntensity := TRUE,
bSafeLimitedElectricQuadrupoleWavePhase := TRUE,
bSafeLimitedElectricOctupoleWavePhase := TRUE,
bSafeLimitedElectricHexadecapoleWavePhase := TRUE,
bSafeLimitedElectricMultipoleWavePhase := TRUE,
bSafeLimitedElectricQuadrupoleWavePolarization := TRUE,
bSafeLimitedElectricOctupoleWavePolarization := TRUE,
bSafeLimitedElectricHexadecapoleWavePolarization := TRUE,
bSafeLimitedElectricMultipoleWavePolarization := TRUE,
bSafeLimitedElectricQuadrupoleWaveCoherence := TRUE,
bSafeLimitedElectricOctupoleWaveCoherence := TRUE,
bSafeLimitedElectricHexadecapoleWaveCoherence := TRUE,
bSafeLimitedElectricMultipoleWaveCoherence := TRUE,
bSafeLimitedElectricQuadrupoleWaveInterference := TRUE,
bSafeLimitedElectricOctupoleWaveInterference := TRUE,
bSafeLimitedElectricHexadecapoleWaveInterference := TRUE,
bSafeLimitedElectricMultipoleWaveInterference := TRUE,
bSafeLimitedElectricQuadrupoleWaveDiffraction := TRUE,
bSafeLimitedElectricOctupoleWaveDiffraction := TRUE,
bSafeLimitedElectricHexadecapoleWaveDiffraction := TRUE,
bSafeLimitedElectricMultipoleWaveDiffraction := TRUE,
bSafeLimitedElectricQuadrupoleWaveScattering := TRUE,
bSafeLimitedElectricOctupoleWaveScattering := TRUE,
bSafeLimitedElectricHexadecapoleWaveScattering := TRUE,
bSafeLimitedElectricMultipoleWaveScattering := TRUE,
bSafeLimitedElectricQuadrupoleWaveReflection := TRUE,
bSafeLimitedElectricOctupoleWaveReflection := TRUE,
bSafeLimitedElectricHexadecapoleWaveReflection := TRUE,
bSafeLimitedElectricMultipoleWaveReflection := TRUE,
bSafeLimitedElectricQuadrupoleWaveRefraction := TRUE,
bSafeLimitedElectricOctupoleWaveRefraction := TRUE,
bSafeLimitedElectricHexadecapoleWaveRefraction := TRUE,
bSafeLimitedElectricMultipoleWaveRefraction := TRUE,
bSafeLimitedElectricQuadrupoleWaveTransmission := TRUE,
bSafeLimitedElectricOctupoleWaveTransmission := TRUE,
bSafeLimitedElectricHexadecapoleWaveTransmission := TRUE,
bSafeLimitedElectricMultipoleWaveTransmission := TRUE,
bSafeLimitedElectricQuadrupoleWaveAbsorption := TRUE,
bSafeLimitedElectricOctupoleWaveAbsorption := TRUE,
bSafeLimitedElectricHexadecapoleWaveAbsorption := TRUE,
bSafeLimitedElectricMultipoleWaveAbsorption := TRUE,
bSafeLimitedElectricQuadrupoleWaveAttenuation := TRUE,
bSafeLimitedElectricOctupoleWaveAttenuation := TRUE,
bSafeLimitedElectricHexadecapoleWaveAttenuation := TRUE,
bSafeLimitedElectricMultipoleWaveAttenuation := TRUE,
bSafeLimitedElectricQuadrupoleWaveDispersion := TRUE,
bSafeLimitedElectricOctupoleWaveDispersion := TRUE,
bSafeLimitedElectricHexadecapoleWaveDispersion := TRUE,
bSafeLimitedElectricMultipoleWaveDispersion := TRUE,
bSafeLimitedElectricQuadrupoleWaveModulation := TRUE,
bSafeLimitedElectricOctupoleWaveModulation := TRUE,
bSafeLimitedElectricHexadecapoleWaveModulation := TRUE,
bSafeLimitedElectricMultipoleWaveModulation := TRUE,
bSafeLimitedElectricQuadrupoleWaveDemodulation := TRUE,
bSafeLimitedElectricOctupoleWaveDemodulation := TRUE,
bSafeLimitedElectricHexadecapoleWaveDemodulation := TRUE,
bSafeLimitedElectricMultipoleWaveDemodulation := TRUE,
bSafeLimitedElectricQuadrupoleWaveMixing := TRUE,
bSafeLimitedElectricOctupoleWaveMixing := TRUE,
bSafeLimitedElectricHexadecapoleWaveMixing := TRUE,
bSafeLimitedElectricMultipoleWaveMixing := TRUE,
bSafeLimitedElectricQuadrupoleWaveHeterodyning := TRUE,
bSafeLimitedElectricOctupoleWaveHeterodyning := TRUE,
bSafeLimitedElectricHexadecapoleWaveHeterodyning := TRUE,
bSafeLimitedElectricMultipoleWaveHeterodyning := TRUE,
bSafeLimitedElectricQuadrupoleWaveHomodyning := TRUE,
bSafeLimitedElectricOctupoleWaveHomodyning := TRUE,
bSafeLimitedElectricHexadecapoleWaveHomodyning := TRUE,
bSafeLimitedElectricMultipoleWaveHomodyning := TRUE,
bSafeLimitedElectricQuadrupoleWaveDetection := TRUE,
bSafeLimitedElectricOctupoleWaveDetection := TRUE,
bSafeLimitedElectricHexadecapoleWaveDetection := TRUE,
bSafeLimitedElectricMultipoleWaveDetection := TRUE,
bSafeLimitedElectricQuadrupoleWaveGeneration := TRUE,
bSafeLimitedElectricOctupoleWaveGeneration := TRUE,
bSafeLimitedElectricHexadecapoleWaveGeneration := TRUE,
bSafeLimitedElectricMultipoleWaveGeneration := TRUE,
bSafeLimitedElectricQuadrupoleWaveAmplification := TRUE,
bSafeLimitedElectricOctupoleWaveAmplification := TRUE,
bSafeLimitedElectricHexadecapoleWaveAmplification := TRUE,
bSafeLimitedElectricMultipoleWaveAmplification := TRUE,
bSafeLimitedElectricQuadrupoleWaveAttenuator := TRUE,
bSafeLimitedElectricOctupoleWaveAttenuator := TRUE,
bSafeLimitedElectricHexadecapoleWaveAttenuator := TRUE,
bSafeLimitedElectricMultipoleWaveAttenuator := TRUE,
bSafeLimitedElectricQuadrupoleWaveFilter := TRUE,
bSafeLimitedElectricOctupoleWaveFilter := TRUE,
bSafeLimitedElectricHexadecapoleWaveFilter := TRUE,
bSafeLimitedElectricMultipoleWaveFilter := TRUE,
bSafeLimitedElectricQuadrupoleWaveOscillator := TRUE,
bSafeLimitedElectricOctupoleWaveOscillator := TRUE,
bSafeLimitedElectricHexadecapoleWaveOscillator := TRUE,
bSafeLimitedElectricMultipoleWaveOscillator := TRUE,
bSafeLimitedElectricQuadrupoleWaveResonator := TRUE,
bSafeLimitedElectricOctupoleWaveResonator := TRUE,
bSafeLimitedElectricHexadecapoleWaveResonator := TRUE,
bSafeLimitedElectricMultipoleWaveResonator := TRUE,
bSafeLimitedElectricQuadrupoleWaveGuide := TRUE,
bSafeLimitedElectricOctupoleWaveGuide := TRUE,
bSafeLimitedElectricHexadecapoleWaveGuide := TRUE,
bSafeLimitedElectricMultipoleWaveGuide := TRUE,
bSafeLimitedElectricQuadrupoleWaveCavity := TRUE,
bSafeLimitedElectricOctupoleWaveCavity := TRUE,
bSafeLimitedElectricHexadecapoleWaveCavity := TRUE,
bSafeLimitedElectricMultipoleWaveCavity := TRUE,
bSafeLimitedElectricQuadrupoleWaveAntenna := TRUE,
bSafeLimitedElectricOctupoleWaveAntenna := TRUE,
bSafeLimitedElectricHexadecapoleWaveAntenna := TRUE,
bSafeLimitedElectricMultipoleWaveAntenna := TRUE,
bSafeLimitedElectricQuadrupoleWaveTransducer := TRUE,
bSafeLimitedElectricOctupoleWaveTransducer := TRUE,
bSafeLimitedElectricHexadecapoleWaveTransducer := TRUE,
bSafeLimitedElectricMultipoleWaveTransducer := TRUE,
bSafeLimitedElectricQuadrupoleWaveConverter := TRUE,
bSafeLimitedElectricOctupoleWaveConverter := TRUE,
bSafeLimitedElectricHexadecapoleWaveConverter := TRUE,
bSafeLimitedElectricMultipoleWaveConverter := TRUE,
bSafeLimitedElectricQuadrupoleWaveModulator := TRUE,
bSafeLimitedElectricOctupoleWaveModulator := TRUE,
bSafeLimitedElectricHexadecapoleWaveModulator := TRUE,
bSafeLimitedElectricMultipoleWaveModulator := TRUE,
bSafeLimitedElectricQuadrupoleWaveDemodulator := TRUE,
bSafeLimitedElectricOctupoleWaveDemodulator := TRUE,
bSafeLimitedElectricHexadecapoleWaveDemodulator := TRUE,
bSafeLimitedElectricMultipoleWaveDemodulator := TRUE,
bSafeLimitedElectricQuadrupoleWaveMixer := TRUE,
bSafeLimitedElectricOctupoleWaveMixer := TRUE,
bSafeLimitedElectricHexadecapoleWaveMixer := TRUE,
bSafeLimitedElectricMultipoleWaveMixer := TRUE,
bSafeLimitedElectricQuadrupoleWaveHeterodyne := TRUE,
bSafeLimitedElectricOctupoleWaveHeterodyne := TRUE,
bSafeLimitedElectricHexadecapoleWaveHeterodyne := TRUE,
bSafeLimitedElectricMultipoleWaveHeterodyne := TRUE,
bSafeLimitedElectricQuadrupoleWaveHomodyne := TRUE,
bSafeLimitedElectricOctupoleWaveHomodyne := TRUE,
bSafeLimitedElectricHexadecapoleWaveHomodyne := TRUE,
bSafeLimitedElectricMultipoleWaveHomodyne := TRUE,
bSafeLimitedElectricQuadrupoleWaveDetector := TRUE,
bSafeLimitedElectricOctupoleWaveDetector := TRUE,
bSafeLimitedElectricHexadecapoleWaveDetector := TRUE,
bSafeLimitedElectricMultipoleWaveDetector := TRUE,
bSafeLimitedElectricQuadrupoleWaveGenerator := TRUE,
bSafeLimitedElectricOctupoleWaveGenerator := TRUE,
bSafeLimitedElectricHexadecapoleWaveGenerator := TRUE,
bSafeLimitedElectricMultipoleWaveGenerator := TRUE,
bSafeLimitedElectricQuadrupoleWaveAmplifier := TRUE,
bSafeLimitedElectricOctupoleWaveAmplifier := TRUE,
bSafeLimitedElectricHexadecapoleWaveAmplifier := TRUE,
bSafeLimitedElectricMultipoleWaveAmplifier := TRUE,
bSafeLimitedElectricQuadrupoleWaveAttenuator := TRUE,
bSafeLimitedElectricOctupoleWaveAttenuator := TRUE,
bSafeLimitedElectricHexadecapoleWaveAttenuator := TRUE,
bSafeLimitedElectricMultipoleWaveAttenuator := TRUE,
bSafeLimitedElectricQuadrupoleWaveFilter := TRUE,
bSafeLimitedElectricOctupoleWaveFilter := TRUE,
bSafeLimitedElectricHexadecapoleWaveFilter := TRUE,
bSafeLimitedElectricMultipoleWaveFilter := TRUE,
bSafeLimitedElectricQuadrupoleWaveOscillator := TRUE,
bSafeLimitedElectricOctupoleWaveOscillator := TRUE,
bSafeLimitedElectricHexadecapoleWaveOscillator := TRUE,
bSafeLimitedElectricMultipoleWaveOscillator := TRUE,
bSafeLimitedElectricQuadrupoleWaveResonator := TRUE,
