我们这期介绍下Claude Code的安装和使用过程,是时候用上顶级的编程大模型了。

之前我也介绍过OpenCode,OpenCode的安装详细说明(Win系统版本)之所以先介绍Opencode是因为首先不用魔法直接就用,关键还有好几个免费的模型可以使用!
但是用了这么长时间来看,有几个地方一直不爽的是,对话的当前历史老是看不到,不管是CLI里面还是VS Code里,都翻不到。另外就是,有些模型图片添加不进去。在CLI里面想复制一段文字是真麻烦。所以,经过一段时间,我自己就用的少了。有时候还不如:Kilo Code帮我做ST语言里面For循环的动画演示!
01

选出您的AI
我这使用Claude Code时候,有三个问题真的问到我了,所以我这里直接贴到这里,还请大家参与投票哦!投票完成后留言【已投】获取免费的API配置指南。
02

感受
我稍微的了解了下,因为目前使用的是免费的API以及刚开始,没有任何的skill安装。所以,比较初步。
同样,也让claude code 写段ST代码:

这里面也挺曲折的,免费的就是可能用的人多,老会报错,继续就可以解决,但是确实烦人。
但是,优点就是和你交互,问你哪个场合用,是经典PID、还是Adv PID,等等每一步问的细,这样就容易一次性生成你想要的,而不是生成完了后再微调。

最后把这个生成的代码贴这里:
FUNCTION_BLOCK FB_PID_Basic
VAR_INPUT
Setpoint : REAL; // Target value (°C)
ProcessValue : REAL; // Measured value (°C)
ManualOutput : REAL; // Manual control output (0-100%)
ModeSelect : BOOL; // TRUE = Automatic, FALSE = Manual
Kp : REAL; // Proportional gain
Ki : REAL; // Integral gain (per second)
Kd : REAL; // Derivative gain (seconds)
OutMin : REAL; // Minimum output limit (%)
OutMax : REAL; // Maximum output limit (%)
SampleTime : TIME; // Control loop sample time
Deadband : REAL; // Deadband around setpoint (°C)
END_VAR
VAR_OUTPUT
ControllerOutput : REAL; // PID output to actuator (0-100%)
ModeStatus : BOOL; // Current mode (TRUE = Auto, FALSE = Manual)
IntegralWindup : BOOL; // TRUE if integral term is clamped
Error : REAL; // Current error (SP - PV)
END_VAR
VAR
IntegralTerm : REAL := 0.0;
PrevError : REAL := 0.0;
LastOutput : REAL := 0.0;
TimeElapsed : TIME := T#0s;
FirstRun : BOOL := TRUE;
END_VAR
// Initialize on first call or parameter change
IF FirstRun OR (SampleTime <> TimeElapsed) THEN
IntegralTerm := 0.0;
PrevError := Setpoint - ProcessValue;
LastOutput := 0.0;
TimeElapsed := SampleTime;
FirstRun := FALSE;
END_IF;
// Calculate time factor for gains
TimeFactor := SampleTime / T#1s;
// Calculate error
Error := Setpoint - ProcessValue;
// Apply deadband
IF ABS(Error) < Deadband THEN
Error := 0.0;
END_IF;
// Mode handling
IF ModeSelect THEN
// Automatic mode - PID calculation
ModeStatus := TRUE;
// Proportional term
PTerm := Kp * Error;
// Integral term with anti-windup
IntegralTerm := IntegralTerm + Ki * Error * TimeFactor;
// Clamp integral term to prevent windup
IF IntegralTerm > (OutMax - Kp * Error) THEN
IntegralTerm := OutMax - Kp * Error;
IntegralWindup := TRUE;
ELSIF IntegralTerm < (OutMin - Kp * Error) THEN
IntegralTerm := OutMin - Kp * Error;
IntegralWindup := TRUE;
ELSE
IntegralWindup := FALSE;
END_IF;
// Derivative term
IF SampleTime > T#0s THEN
DTerm := Kd * (Error - PrevError) / TimeFactor;
ELSE
DTerm := 0.0;
END_IF;
// Calculate raw output
RawOutput := PTerm + IntegralTerm + DTerm;
// Apply output limits
IF RawOutput > OutMax THEN
ControllerOutput := OutMax;
ELSIF RawOutput < OutMin THEN
ControllerOutput := OutMin;
ELSE
ControllerOutput := RawOutput;
END_IF;
// Store for next derivative calculation
PrevError := Error;
ELSE
// Manual mode - direct output
ModeStatus := FALSE;
ControllerOutput := ManualOutput;
IntegralTerm := 0.0; // Reset integral to prevent windup
PrevError := Error; // Keep derivative continuous
IntegralWindup := FALSE;
END_IF;
END_FUNCTION_BLOCK