从Elikont-CS读取Modbus TCP数据
导言
这个例子展示了一个集成Engee和Elikont-CS的简单方法. Elikont-CS使用Modbus TCP协议实时生成和Engee读取信号。
埃利康特-CS
简要概述
"[Elikont-CS](https://ptk-sura.ru/products/kommunikatsionnyy-server/elicont-cs /)"-来自[Elara JSC]的软件(https://elara.ru/products/asu-tp-i-iiot/elikont-ks /?ysclid=mceomskbl9730209168),用于工业自动化和物联网(Iiot)系统中的数据采集、处理和传输,充当工业协议转换器、数据集线器、通信网关和多服务器。
此示例中使用的通信服务器版本为2.6.2。 操作系统是Windows10Pro。
Modbus TCP服务器配置
用于从示例部署Elikont通信服务器的配置文件 - Engee_read_1.elconf. 在Elikont-CS中打开它并开始数据交换就足够了。
创建Modbus TCP服务器时,必须配置其连接。 在这个例子中:
*Modbus TCP服务器IP: 127.0.0.4
*港口: 502
*设备地址: 1
 
生成的模拟和离散信号将传输到配置的Modbus TCP服务器。
生成用于从Engee读取的信号
Elikont CS中的生成器模块用于生成信号。 在示例中,它生成两个信号:
- 
"标志性_sinusoid" : *数据类型 : INT16*生成类型 : Синус*期间 : 4*数值范围: -30 000 ÷ 30 000
- 
"周期性_bit" : *数据类型 : BOOLEAN*生成类型 : Треугольник
 
相同的信号被传输到Modbus TCP服务器。:
服务器信号块中添加了两个信号源。 它们已被分配Modbus寄存器的名称和地址:
"周期性_bit":
*Modbus名称:Modbus_periodic_bit
*注册地址: 0
"标志性_sinusoid":
*Modbus名称: Modbus_sinus
*注册地址: 5
 
配置服务器、生成器和生成的信号后,您需要下载服务器并建立连接。 下面的屏幕截图显示了通信服务器在生成信号的过程中。
 
有关Elikont-CS设置过程的更多信息,请参阅[手册](https://ptk-sura.ru/products/kommunikatsionnyy-server/elicont-cs /)。
示例模型
这个例子的模型 - elicont_cs_read.engee.
连接到Elikont-CS需要一个电源单元 Modbus TCP Setup 从Engee块库的硬件部分。 您必须在其中指定服务器地址。 - 127.0.0.4 和港口 - 502.
我们将使用功能块1读取离散数据。 - Modbus Read Coil Status. 您必须在其中指定服务器ID。 - 1,读数的初始地址(寄存器号) - 0 和读取位数 - 1.
我们将使用功能块3读取模拟数据。 - Modbus Read Holding Register. 您必须在其中指定服务器ID。 - 1,读数的初始地址(寄存器号) - 5 和正在读取的寄存器的数量 - 1.
因此,示例模型如下所示:
 
此外,您应该配置读取数据的记录,Engee中模拟时间的管理以及块的采样周期。
与外部设备的连接:Modbus TCP
要连接到外部设备,您需要安装一个用于与外部设备一起工作的模块。 将Engee连接到低级计算机接口的详细分步过程见примере.
# Установить модуль можно непосредственно в скрипте, следующей командой:
# engee.package.install("Engee-Device-Manager")
模拟仿真
在Elikont-CS中启动Modbus TCP服务器并将Engee连接安装到低级接口后,我们将继续运行示例模型。:
name = "elicont_cs_read" # Имя модели
include(joinpath(@__DIR__, "start_model_engee.jl")) # Определяем функцию запуска модели
start_model_engee(name)  # Запускаем модель
执行仿真后,我们将通过Modbus TCP处理接收到的数据读取结果。
模拟结果
让我们从变量中收集数据 simout 成两个变量,其中包含Modbus服务器中信号的名称。
data = collect(simout);
t = collect(data[1].time)[:,1];
Modbus_sinus = reduce(vcat, collect(data[1].value)[:,1])
Modbus_periodic_bit = reduce(vcat, collect(data[2].value)[:,1]);
让我们绘制读取信号:
gr(size = (1000, 400))
AO = plot(t, Modbus_sinus;
          seriestype = :step, title = "Эликонт-КС: аналоговый сигнал",
          label = "Modbus TCP \n127.0.0.4:502 \nУстройство 1 \nРегистр 5")
DO = plot(t, Modbus_periodic_bit;
          seriestype = :step, title = "Эликонт-КС: дискретный сигнал",
          label = "Modbus TCP \n127.0.0.4:502 \nУстройство 1 \nРегистр 0")
plot(DO, AO, layout = (1, 2), legend = :bottomright, xlabel = "Время, с", ylabel = "Величина сигнала")
如图所示,接收数据的频率、幅度和形状与Elikont-CS生成的信号相对应。
结论
在这个例子中,考虑了Elikont-KS通信服务器的简单配置,用于通过Modbus TCP生成离散和模拟信号。 已经使用相同的协议建立了Engee连接,以将生成的信号读入模型并进一步处理它们。
