技术干货德克威尔EX-6021在Codesys中的使用及其配置犹如开启CAN总线通信的钥匙
技术干货:德克威尔EX-6021在Codesys中的使用与配置,解锁CAN总线通信的奥秘
德克威尔EX系列卡片式IO设备,以其模块化设计和通用适配器而闻名,其中EX-6021是一款单通道差分编码器模块,广泛应用于工业自动化、机器人技术和精确控制系统中。今天,我们将深入探讨如何在 Codesys 中使用和配置这款模块。
EX系列卡片式IO介绍
德克威尔的EX系列卡片式IO由多个部分组成,包括适配器模块、IO模块、电源模块和终端模块。适配器可以转换不同类型的通讯总线,使得用户能够扩展各种类型和数量的IO设备。这些IO设备可分为数字量输入输出模块、模拟量输入输出模块以及功能性特定的专用型号。
EX-6021概述
作为一款单通道差分编码器,EX-6021主要用于计数现场输入脉冲,并且提供了Z相清零功能、高级初始值设置以及双向计数等功能。此外,它还支持精确控制位置和速度反馈,是工业自动化领域不可或缺的一部分。
在Codesys中的使用步骤
为了开始使用EX-6021,我们需要按照以下步骤操作:
安装XML描述文件
首先,我们需要安装XML描述文件到Codesys中。这通常涉及到点击左上角工具设备存储库并搜索与我们的适配器兼容的描述文件。在这个例子中,我们将安装名为“DEWETRON_EX_1100.xml”的文件。
挂载EX-6021
接下来,将我们的目标设备—即DEWETRON EX-1100 适配器挂载到对应插槽上。在打开Codesys软件时,通过扫描我们刚刚连接上的适配器来完成这一过程。
配置参数
现在,让我们进入具体配置阶段。在“Devices”窗口下找到并双击“DEWETRON_DEMO_XX”,然后选择“Configuration”选项卡来修改相关参数。此时,你可以根据你的需求调整所需的设置,如图示所示。
参数配置详解
在这里,你可以设置如Count Enable(启用计数)、Initial Count Value(初始计数值)等关键参数。例如,如果你想要开启计数功能,同时从1000开始,您应该这样设置:
Count Enable = 1;
Initial Count Value = 1000;
Set Initvalue Enable = 1;
此外,还有一个重要选项是Counting Direction,这决定了是否反转实际旋转方向下的计算结果。如果设为0,则计算方向与实际旋转方向相同;如果设为1,则计算方向与实际旋转方向相反。
Counting Direction = 0; // 或者 1
模块操作详解
了解了基本配置后,让我们深入了解每个功能如何工作:
计数功能
要启动计数,可以通过改变Count Enable位使其激活,从而采集现场输入脉冲,并以Count Value位反馈当前累积值:
# 启动计数并读取累积值
device.set_io_value('COUNT_ENABLE', True)
count_value = device.get_io_value('COUNT_VALUE')
print(count_value)
Z相清零函数
要实现Z相清零,可以同时激活COUNT_ENABLE位并关闭Z Phase Clear位:
# 启动计数并进行Z相清零操作
device.set_io_value('COUNT_ENABLE', True)
device.set_io_value('Z_PHASE_CLEAR', False)
time.sleep(2) # 等待2秒让所有数据稳定后再进行下一步操作
device.set_io_value('Z_PHASE_CLEAR', True) # 开启z phase clear, 清除之前累积的数据
time.sleep(5) # 等待5秒让所有数据稳定后再停止活动
device.set_io_value('COUNT_ENABLE', False) # 停止计數機能
初始值设置函数
要实现初始值设定,可以先激活COUNT_ENABLE, 然后赋予初始价值,并最后开启该特性的按钮:
# 设置初期計數為100並啟動計數函數
initial_count=100
device.set_initial_count(initial_count)
# 開啟計數與設定初期計數
enable_counter=True
set_initial=False
while (enable_counter and set_initial):
time.sleep(2)
if not enable_counter:
break
if set_initial:
initial_set=True
else:
print("The counter is enabled with the specified initial value.")
if not enable_counter or set_initial:
print("Counter has been disabled")
for i in range(initial_count):
count+=i+initial_count
while (not enable_counter):
time.sleep(10e9)
def read_counts():
return device.read_analog_output_channels()
counts=read_counts()
print(counts[0])
return counts[0]
counts=read_counts()
print(counts[0])
return counts[3]