1.学习使用禾川hcsstuido软件,尝试连接禾川伺服读取参数


主y


上x


上z


主a

上z设置 2的二十三次方转一圈 实际仍然是失效原因

2.学习使用专业游标卡尺

- 黄色ORIGIN=设置绝对机械原点,不是普通清零。
之前没有把卡尺测爪完全合拢的状态下,按过ORIGIN,机器就把那个错误位置记成零点。
现在测爪真正闭合后,相对于错误原点,就跑出负数。 - ABS/O 相对 / 绝对模式切换
蓝色旁边绿色按键ABS/O:切换【绝对原点 ABS】和【相对置零 O 模式】
ABS 模式:读取机械原点(ORIGIN 记录的零点)
O 模式:临时相对清零,按这个可以临时归零,但关机就丢失。
3.法兰距(工业相机法兰距,也叫法兰后焦)
定义:相机镜头安装法兰平面,到传感器芯片感光面的距离。单位毫米。
镜头拧上去之后,镜头的基准面贴住相机法兰面,光线走过这段距离,正好聚焦打在芯片上。
法兰距错一点点,整张图直接虚焦、模糊。

- M58 相机 → C 口镜头
同样需要专用 M58 转 C 接环,补偿后焦。
4.修改了雷赛例程
- 切换轴功能失效
- 原因:程序启动时(Form1_Load)只对初始轴号执行过一次使能,
直接切换轴号后,新轴从未被使能,状态机将停留在"停止状态"(红) - 解决:为nud控件 添加事件nud_AxisId_ValueChanged
- 原因:程序启动时(Form1_Load)只对初始轴号执行过一次使能,
private void nud_AxisId_ValueChanged(object sender, EventArgs e)
{
ushort usNewAxis = GetAxis(); // 切换后的新轴号
if (usNewAxis == _lastAxis)
{
return; // 轴号未变化,无需处理
}
// 1. 失能旧轴(释放旧轴的使能信号)
LTDMC.nmc_set_axis_disable(usCardId, _lastAxis);
// 2. 使能新轴
short sRtn = LTDMC.nmc_set_axis_enable(usCardId, usNewAxis);
if (sRtn == 0)
{
AppendMessage(string.Format("[轴切换] 已切换到轴{0}并使能成功,请确认状态机变为\"操作使能状态\"", usNewAxis));
}
else
{
AppendMessage(string.Format("[轴切换] 轴{0}使能失败,返回码:{1}(请检查总线状态/轴从站配置)", usNewAxis, sRtn));
}
_lastAxis = usNewAxis; // 3. 更新记录的上一次轴号
}
- 实现正向/反向运动 到达指定位置变速功能
private void MonitorThreadFunc()
{
while (_monitorRunning)
{
try
{
// 已变速过则跳过,等待下一次运动(btn_Start_Click 会复位该标志)后再判断
if (!_hasChangedSpeed)
{
// 跨线程安全读取控件值
ushort usAxis = (ushort)GetNumericValue(nud_AxisId); // 轴号
double dTargetPos = GetNumericValue(numericUpDown1); // 变速触发位置(numericUpDown1 设定值)
double dCmdPos = 0;
LTDMC.dmc_get_position_unit(usCardId, usAxis, ref dCmdPos); // 读取当前指令位置
double dCurrentVel = 0;
LTDMC.dmc_read_current_speed_unit(usCardId, usAxis, ref dCurrentVel); // 读取当前速度(判断方向)
// 判断是否到达设定位置:
// 正向运动(速度>0):位置递增,到达条件为 当前>=设定
// 反向运动(速度<0):位置递减,到达条件为 当前<=设定
// 轴静止(速度=0):不做判断,避免误触发
bool bArrived = false;
if (dCurrentVel > 0)
{
bArrived = dCmdPos >= dTargetPos;
}
else if (dCurrentVel < 0)
{
bArrived = dCmdPos <= dTargetPos;
}
if (bArrived)
{
_hasChangedSpeed = true; // 先置位,防止 dmc_change_speed_unit 被重复调用
double dNewVel = GetNumericValue(nud_NewVel); // 变速后的新速度
double dTaccDec = GetNumericValue(nud_TaccDec); // 变速时间
// 执行在线变速(与按钮 btn_ChangeVel_Click 中的调用完全一致)
LTDMC.dmc_change_speed_unit(usCardId, usAxis, dNewVel, dTaccDec);
// 可选:把变速信息记录到右侧信息框(仅作运行反馈/调试用,不需要可删除)
AppendMessage(string.Format("[自动变速] 位置 {0:0.###} 到达设定位置 {1:0.###},速度已变更为 {2:0.###} unit/s",
dCmdPos, dTargetPos, dNewVel));
}
}
Thread.Sleep(10); // 监控周期 10ms(100Hz),如需降低占用可调大
}
catch (Exception ex)
{
// 线程内捕获异常,避免线程崩溃;记录信息并短暂停顿防止空转
AppendMessage("[监控线程异常] " + ex.Message);
Thread.Sleep(100);
}
}
}
5.飞拍相机最小帧率计算
- V= 物体运动速度 mm/s
- FOV = 相机视场宽度(运动方向上的视野,mm)
- FPS min = 最低需要帧率
- FPS min= V/FOV
想要画面不丢目标、不会物体跑出视野才拍下一张,每秒拍摄数量必须大于等于
V/FOV - 举例子:
输送带速度 200 mm/s
运动方向视野 FOV=100mm
FPS min=200/100=2 FPS
相机帧率必须>2FPS,比如选用 5FPS、10FPS 才能留有裕量。
6.通过物方精度和运动速度确定曝光时间

7.复习选型逻辑
工业视觉相机镜头全套选型逻辑
- 确定最小缺陷
- 最小缺陷至少占2个像素,确定最大物方精度
- 50 ÷ 2 = 25μm/pixel
- 物方精度大于25 则50un缺陷占不满2个像素,会导致漏检
- 工作距离WD、放大倍率、景深DOF,出厂固定,只能选型
- 相机像元尺寸 = 物方精度 × 镜头倍率
光学倍率 = 芯片成像尺寸 ÷ 工件实际尺寸
通过物方精度和镜头倍率 确定相机像元尺寸 - 通过相机和帧率,确定带宽选型
8.复习canopen 与ethercat协议比较

9雷赛板卡高速比较功能

PSO 位置比较

10连续等间距飞拍
