AnyMath 文档

COM软件管理

本页包含所有可用的COM软件管理功能 AnyMath .

使用com软件控制功能 AnyMath ,按照指定的方式安装硬件支持包 文章. 安装后,运行:

using Main.EngeeDeviceManager.Devices.COM

接下来,您需要创建一个COM对象。:

COM.Com()
COM.receive(device, port::String, bytes_to_read::Int64) → Vector{UInt8}

从端口读取指定数量的字节。

参数

  • device::Main.EngeeDeviceManager.Devices.COM.ComType : COM 对象。

  • port::String : 端口名称。

  • bytes_to_read::Int64 :要读取的字节数。

"""@binding: Main.EngeeDeviceManager.Devices.COM.receive @typesig: Tuple{Main.EngeeDeviceManager.Devices.COM.ComType, String, Int64} """

COM.close(device, port::String)

关闭 COM 端口并释放资源。

参数

  • device::Main.EngeeDeviceManager.Devices.COM.ComType :COM 对象。- port::String :端口名称。

COM.get_devices(device) → Vector{String}

返回可用 COM 端口的列表(例如,["COM1", "COM3", "/dev/ttyUSB0"] )。

参数

  • device::Main.EngeeDeviceManager.Devices.COM.ComType : COM 对象。

COM.init(device, port::String, baudrate::Int64, bytesize::String, parity::String, stopbits::String)

设置端口的配置。

参数

  • device::Main.EngeeDeviceManager.Devices.COM.ComType :COM对象。

  • port::String :端口名称。

  • baudrate::Int64 :波特率。标准值:110 、300 、600 、1200 、2400 、4800 、9600 、14400 、19200 、38400 、57600 、115200 、128000 、230400 、256000 、460800 、921600 。

  • bytesize::String :字节大小。允许的字符串值: -"FIVE_BITS" :5位; -"SIX_BITS" :6 位; -"SEVEN_BITS" :7 位; -"EIGHT_BITS" :8 位。

    默认值为"EIGHT_BITS" 。

  • parity::String :奇偶校验。允许的字符串值: -"PARITY_NONE" :无奇偶校验位; -"PARITY_EVEN" :偶校验(even); -"PARITY_ODD" :奇校验(odd); -"PARITY_MARK" :校验位始终为 1(mark); -"PARITY_SPACE" :校验位始终为 0(space)。

  • stopbits::String : 停止位。允许的字符串值:

    -"STOPBITS_ONE": 1 个停止位; -"STOPBITS_ONE_POINT_FIVE": 1.5 个停止位; -"STOPBITS_TWO": 2 个停止位。

COM.open(device, port::String)

打开具有指定配置的 COM 端口。

参数

  • device::Main.EngeeDeviceManager.Devices.COM.ComType : COM 对象。

  • port::String : 端口名称。

COM.receive(device, port::String, bytes_to_read::Int64) → Vector{UInt8}

Reads the specified number of bytes from the port.

Arguments

  • device::Main.EngeeDeviceManager.Devices.COM.ComType : COM object.

  • port::String : port name.

  • bytes_to_read::Int64 : number of bytes to read.

COM.transmit(device, port::String, message::Vector{UInt8}) → Int64

发送字节数组。返回已发送的字节数。

参数

  • device::Main.EngeeDeviceManager.Devices.COM.ComType : COM 对象。

  • port::String : 端口名称。

  • message::Vector{UInt8} : 字节数组。

使用COM(虚拟端口)的分步示例

对于没有物理设备的测试,通过以下方式使用虚拟COM端口很方便 索卡特. 设置一对相关的伪终端:

socat -d -d PTY,link=/tmp/ttyV0,b9600 PTY,link=/tmp/ttyV1,b9600 &

现在 /tmp/ttyV0 和 /tmp/ttyV1 -虚拟 «跳线»:写入一个端口的所有内容都是从另一个端口读取的。

创建COM对象

com = COM.Com()

获取端口列表

ports = COM.get_devices(com)
println("Доступные порты: $ports")

港口的初始化和开放

port_send = "/tmp/ttyV0"
port_recv = "/tmp/ttyV1"

# Инициализация с идентичными параметрами
COM.init(com, port_send, 9600, "EIGHT_BITS", "PARITY_NONE", "STOPBITS_ONE")
COM.init(com, port_recv, 9600, "EIGHT_BITS", "PARITY_NONE", "STOPBITS_ONE")

# Открытие портов
COM.open(com, port_send)
COM.open(com, port_recv)

数据交换

data = UInt8[]

for i in 1:20
    push!(data, i)

    # Отправка накопленных байт
    sent = COM.transmit(com, port_send, data)
    println("Отправлено $sent байт: $data")

    # Прием такого же количества байт
    received = COM.receive(com, port_recv, length(data))
    println("Получено байт: $received")

    @assert data == received
end

使用非标准参数

速度连接示例 19200, 6 数据位,奇偶校验 甚至, 2 停止位:

COM.init(com, "/tmp/ttyV2", 19200, "SIX_BITS", "PARITY_EVEN", "STOPBITS_TWO")
COM.open(com, "/tmp/ttyV2")

data = UInt8[0x01, 0x02, 0x03]
COM.transmit(com, "/tmp/ttyV2", data)
received = COM.receive(com, "/tmp/ttyV3", length(data))

-完成工作_

COM.close(com, port_send)
COM.close(com, port_recv)
println("Порты закрыты")

特征

*操作程序: 初始化 → 打开 → 传输/接收 → 关闭. 初始化 它只保存配置,真正的开放发生在 打开. * COM。接收 -阻塞调用:该方法等待,直到端口缓冲区已累积 字节_to_read 字节或内部超时不会过期。 *单个COM对象可以管理多个端口:按名称初始化,打开和关闭它们。 * COM。传输 返回实际发送的字节数。 在正常操作中,它等于长度 信息.