asynDriver-6-端口驱动
本地串口
drvAsynSerialPort驱动支持设备连接到IOC上串口。
用drvAsynSerialPortConfigure和asynSetOption命令配置串口:
drvAsynSerialPortConfigure("portName","ttyName",priority,noAutoConnect,noProcessEosIn)
asynSetOption("portName",addr,"key","value")
此处参数是:
1、portName:向asynGpib注册的portName。
2、ttyName:本地串口名称(例如,/dev/ttyS0, COM1)
3、priortiy:asyn I/O 线程将运行在那个优先级。如果这是0或则缺失,则使用epicsThreadPriorityMedium。
4、addr:这个参数被忽略,因为用multiDevice=0,配置串行设备。
5、noAutoConnect:0或缺失表明portThread应该自动连接。如果必须发送显式的连接命令,非零。
6、noProcessEos:如果0,则指定processEosIn和processEosOut调用asynInterfaceEosConfig。
setEos和getEos方法没有作用并且返回asynError。读取方法阻塞,直到一个字符已经被接收或者直到发生超时。读取方法传输尽可能多的字符,受到指定计数影响。asynInterposeEos可以用来支持EOS。
以下表格概况了drvAsynSerialPort驱动asynSetOption键和值。当串口连接时,获取当前值。
键 | 值 |
---|---|
baud | 50 75 110 134 150 200 300 600 1200 2400 9600 ... |
bits | 8 7 6 5 |
parity | none even odd |
stop | 1 2 |
clocal | Y N |
crtscts | N Y |
ixon | N Y |
ixoff | N Y |
ixany | N Y |
rs485_enable | N Y |
rs485_rts_on_send | N Y |
rs485_rts_after_send | N Y |
rs485_delay_rts_before_send | msec_delay |
rs485_delay_rts_after_send | msec_delay |
某些系统(如windows,darwin)上 ,驱动接收任何数值用于波特率,这当然必须由系统硬件支持。在Linux上,这些选项受限于像B300,B9600的值,在/usr/include/bits/termios.h中被定义。
clocal和crtscts参数名称获取自POSIX termios串行接口定义。clocal参数控制控制modem控制线路(数据终端准备,载波探测/接收线路信号探测)是否被使用(clocal=N)或者被忽略(clocal=Y)。crtscts参数控制硬件握手线路(请求发送,清除以发送)是(crtscts=Y)否(crtscts=N)被使用。
ixon控制输出上XON/OFF流量控制。如果IOC接收了一个XOFF字符,它在接收到一个XON字符前,暂停输出。在通过RFC 2217 telnet协议的端口通信上也支持这个选项。在这种情况下,如在标准中所述,ixon隐含了出栈和入栈流控制。
ixoff在输入上控制XON/XOFF流量控制。IOC根据需要发送XOFF和XON防止输入到来快于程序读取它。发送输入数据的外部设备必须通过暂停传输响应XOFF字符,通过继续传输响应XON字符。
ixany字符在输出被XOFF字符暂停时允许任何输入字符重新开始输出,否则,仅XON字符重启输出。这个标记不是在所有系统上可用,包括Win32。
仅在内核高于2.6.35的Linux上和竟在支持RS-485的硬件端口上才支持RS485选项。延时选项单位是整数毫秒。
TCP/IP或UDP/IP端口
drvAsynPort驱动支持通过TCP/IP或UPD/IP连接的设备。一个代表性示例是通过Ethernet/Serial转换器连接的设备。
通过drvAsynIPPortConfigure命令配置的TCP/IP或UDP/IP连接:
drvAsynIPPortConfigure("portName","hostInfo",priority,noAutoConnect,noProcessEos)
此处参数是:
1)portName:用asynManager注册的端口名。
2)hostInfo:设备的网络主机名,端口号,可选本地端口号,以及选项的IP协议。格式是:
<host>:<port>[:localPort][protocol]
(例如:"164.54.9.90:4002", "164.54.9.90:4001:10101", "serials8n3:4002", "serials8n3:4002 TCP" 或 "164.54.17.43:5186 udp")。如果没有指定协议,将使用TCP。可能的协议是
- TCP
- UDP
- UDP*:发送UDP广播。参数的地址部分必须是这个网络的广播地址(例如:"192.168.1.255:1234 UDP*", 或 "255.255.255.255:1234 UDP*")
- HTTP:类似TCP,但对于服务器,它在每次事务后关闭连接。
- COM:对于使用TELNET RFC 协议的Ethernet/Serial适配器。这允许就像本地串口一样,用后续的asynSetOption参数设置端口参数(速度,校验等)。默认参数是不带流量控制的9600-8-N-1。
如果hostInfo参数以unix://开头,余下参数被当成一个UNIX-域流套接字的名称。要接收UDP广播,localPort是要监听的端口,例如: drvAsynIPPortConfigure("BD","255.255.255.255:1234:3956 UDP*",0,0,0)。如果端口仅用于接收广播消息,则应该指定UDP端口。如果它也用于发送UDP消息,则UDP*协议必须被指定。在这种情况下,广播将在端口"port"上被发送,并且它监听端口"localPort"上的广播消息。
注意:localPort基本上不用于TCP端口,因为通常本地主机选择一个它绑定到的未使用的本地端口并且传递给服务器。但,有一些不常见的服务器,它仅接收一个特定的本地端口或者本地端口范围,在这种情况中,必须指定localPort。
3)priority:asyn I/O线程将运行所在的优先级。如果这是0或者缺失,则使用epicsThreadPriorityMedium。
4)noAutoConnect:0或缺失,表明portThread应该自动连接。如果必须发出显式连接,非零。
5) noProcess:如果0,则指定了processEosIn和processEosOut调用asynInterposeEosConfig。
仅实现了asynOctet方法write,read和flush。除非asynInterposeEos用于其它asynOctet方法,否则调用其它方法将导致错误。在接收到至少一个字符或者在发生超时前,read阻塞。read传输尽可能多的字符,受到指定计数限制。
以下表格概况了drvAsynIPPort驱动asynSetOption键和值。
键 | 值 | 描述 |
disconnectOnReadTimeout | N Y | 默认=N。如果Y,则如果一个读取操作超时了,驱动自动断开IP断开。 |
hostInfo | <host>: <port> [:localPort] [protocol] | IP端口hostInfo格式使用与drvAsynIPPortConfigure相同的语法。这个选项运行运行时更改这个asyn端口连接的网络主机和端口。唯一限制是COM协议的设置不能从用drvAsynIPPortConfigure指定的被更改。这是因为如果在drvAsynIPPortConfigure命令中指定了COM,则使用了asynOctet和asynOption interpose接口,并且asynManager不指定删除interpose接口。 |
如果使用了COM协议,除了这些键/值,drvAsynIPPort驱动使用与drvAsynSerialPort驱动相同的键/值对来指定串行参数,即,"baud",“bits”。
asynInterposeEos和asynInterposeFlush可以用于提供其它功能。
TCP/IP服务器
drvAsynIPServerPort驱动通过监听来自远程客户端的TCP/IP或UDP支持asyn套接字服务器。通过初始化时调用drvAsynIPPortConfigure,创建maxClients drvAsynIPPort端口驱动。这些端口命名portName:0, PortName:1等,此处portName是传递给drvAsynIPServerConfigure的名称。
用drvAsynIPServerPortConfigure命令配置IP服务器监听:
drvAsynIPServerPortConfigure("portName", "serverInfo", maxClients, priority, noAutoConnect, noProcessEos);
此处参数是:
1)portName:用asynManager注册的端口名。
2)serverInfo:为连接所监听的网络主机名和端口号。(例如:对于TCP "localhost:4002",对于UDP "localhost:4002 UDP")。
3)maxClient:可以同时连接这个端口的IP客户端的最大数目。多出的连接请求将出错。
4)priority:它创建的任何asyn I/O端口和监听线程将运行所在的优先级。如果这是0或者缺失,则使用epicsThreadPriorityMedium。
5)noAutoConnect:0或缺失表明监听端口应该自动连接。如果必须发出显式的连接命令,非零。注意:监听线程将用noAutoConnect=1创建所有asyn I/O端口,但这是对套接字服务程序透明的,因为监听线程为它们进行显式的连接。
6)当创建新的asyn I/O端口时,noProcessEos被传递给了drvAsynIPPortConfigure。如果0,则指定processEosIn和processEosOut,调用asynInterposeEosConfig。
这个驱动实现了asynOctet接口。对于TCP连接,它支持的仅有方法是registerInterruptUser和cancelInterruptUser。调用其它asynOctet方法将导致错误。对于UDP,它实现了asynOctet->read()。当在drvAsynIPServerPortConfigure中指定的端口上接收一个新连接时,以下发生:
- 这个监听线程已经创建的drvAsynIPPort端口的列表被搜索来查看因为没有远程IP客户端连接,当前有一个没有被连接的drvAsynIPPort。
- 如果有一个未连接的端口,则用来自新的IP连接的文件描述符连接它。
- 如果没有未连接的端口,则到来的连接将立即被关闭。
- 新连接端口的asynTraceMask和asynTraceIOMask被设置成监听线程端口的当前值。这使得在在iocsh可使能跟踪前,使得可能跟踪对注册客户端的回调执行的早期阶段。
- 用新连接端口的名称回调所有注册的asyn客户端(在监听端口上asynOctet接口上已经调用了registerInterruptUser)。
相关文章:
asynDriver-6-端口驱动
本地串口 drvAsynSerialPort驱动支持设备连接到IOC上串口。 用drvAsynSerialPortConfigure和asynSetOption命令配置串口: drvAsynSerialPortConfigure("portName","ttyName",priority,noAutoConnect,noProcessEosIn) asynSetOption("po…...

[免费]基于Python的Django+Vue3在线考试系统【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的基于Python的DjangoVue3在线考试系统,分享下哈。 项目视频演示 【免费】基于Python的DjangoVue3在线考试系统 Python毕业设计_哔哩哔哩_bilibili 项目介绍 本论文提出并实现了一种基于Python…...
Python使用爬虫
一、基本介绍 爬虫(Web Scraping)是一种自动化获取网页内容的技术,它通过编写程序模拟浏览器的行为,从互联网上抓取网页数据。爬虫可以用于多种目的,比如数据收集、信息整合、自动化测试等。 二、常用的库 1、Request…...
CommunityToolkit.Mvvm如何使用
CommunityToolkit.Mvvm 是一个现代、快速和模块化的 MVVM 库,用于 .NET 应用程序。以下是如何使用 CommunityToolkit.Mvvm 的基本步骤: 安装包: 你可以通过 NuGet 包管理器安装 CommunityToolkit.Mvvm。在 Visual Studio 中,你可以…...

Python小游戏20——超级玛丽
首先,你需要确保你的Python环境中安装了pygame库。如果还没有安装,可以使用以下命令进行安装: bash pip install pygame 运行效果展示 代码展示 python import pygame import sys # 初始化pygame pygame.init() # 设置屏幕尺寸 screen_width …...
配置文件格式(xml、properties、yml/yaml)
配置文件格式(xml、properties、yml/yaml) 配置文件格式一、XML二、properties三、yml/yaml基本语法yml数据格式1、对象/Map集合1、数组/List/Set集合 配置文件格式 什么是配置文件?: 配置文件是包含应用程序或系统配置信息的文件…...

CentOS 7 软件/程序安装示例
安装软件/程序 wget,前提需要用 root 用户 1、搜索软件/程序 yum search wget 搜索到软件/程序。 2、安装软件/程序 yum -y install wget 安装完成。...

Python绘制正弦函数图形
1,绘制正弦函数图形,让数学看得见, import math # 导入函数模块 import turtle # 导入turtle模块,用于绘图t turtle.Turtle() # 创建对象 turtle.bgcolor("#2dded9") # 设置背景颜色 t.pencolor(blue) # 设置画笔…...

【LVGL-列表部件 lv_list_create】
LVGL-列表部件 lv_list_create ■ LVGL-列表部件-函数■ 修改样式-■ 修改样式- 背景色■ 修改样式- 改变项的颜色-label■ 修改样式- 改变项的颜色-btn ■ 事件(Event)■ 示例0:综合■ 示例1(自动出现滚动)■ 示例2(滚动捕捉&…...
【P2-6】ESP8266 WIFI模块在STA模式下实现UDP与电脑/手机网络助手通信——UDP数据透传
前言:完成ESP8266 WIFI模块在STA模式下实现UDP与电脑/手机网络助手通信——实现UDP数据透传 STA模式,通俗来说就是模块/单片机去连接路由器/热点来通信。 UDP协议,是传输层协议,UDP没有服务器和客户端的说法。 本实验需要注意,wifi模块/单片机与电脑/手机需要连接在同一个…...
从零学习大模型(十)-----剪枝基本概念
剪枝的基本概念 模型压缩中的地位:剪枝是模型压缩中的重要技术之一,它通过减少模型的参数量来降低计算资源的需求。对于大型神经网络,尤其是像BERT、GPT等参数量级巨大的模型,剪枝可以有效地减少模型的内存占用和计算量ÿ…...
Jest进阶知识:模拟 ES6 类 - 掌握类的依赖模拟与方法监听技巧
引言 在现代前端开发中,ES6 类(class)是常用的一种面向对象编程方式。在测试类的时候,我们经常需要模拟类的依赖,以避免外部因素对测试结果的影响。Jest 提供了强大的工具来模拟类及其方法,确保测试的高效…...

前端Nginx的安装与应用
目录 一、前端跨域方式 1.1、CORS(跨域资源共享) 1.2、JSONP(已过时) 1.3、WebSocket 1.4、PostMessage 1.5、Nginx 二、安装 三、应用 四、命令 4.1、基本操作命令 4.2、nginx.conf介绍 4.2.1、location模块 4.2.2、反向代理配置 4.2.3、负载均衡模块 4.2.4、通…...

Java设计模式(代理模式整理中ing)
一、代理模式 1、代理模式定义: 代理模式:由于某些原因要给某对象提供一个代理以控制对该对象的访问,这时访问对象不适合或者不能够直接引用目标对象,代理对象作为访问对象与目标对象之间的中介进行连接调控调用。 2、代理模式的…...

第J9周:Inception v3算法实战与解析(pytorch版)
>- **🍨 本文为[🔗365天深度学习训练营]中的学习记录博客** >- **🍖 原作者:[K同学啊]** 📌本周任务:📌 了解并学习InceptionV3相对与InceptionV1有哪些改进的地方 使用Inception完成天气…...
如何封装一个axios,封装axios有哪些好处
什么是Axios Axios 是一个基于 Promise 的 HTTP 客户端,用于在浏览器和 Node.js 中发送异步网络请求。它简化了发送 GET、POST、PUT、DELETE 等请求的过程,并且支持请求拦截、响应拦截、取消请求和自动处理 JSON 数据等功能。 为什么要封装Axios 封装…...
java的批量update
这个问题挺有代表性的,今天拿出来给大家一起分享一下,希望对你会有所帮助。 1 案发现场 有一天上午,在我的知识星球群里,有位小伙伴问了我一个问题:批量更新你们一般是使用when case吗?还是有其他的批量更…...
go语言连续监控事件并回调处理
前言 go语言中使用回调函数处理事件:事件监测部分(如无限循环中的事件检测逻辑)可以独立于具体的业务处理逻辑。这使得代码的各个部分更加清晰,易于理解和维护。如果需要更改事件处理的方式,只需要修改注册的回调函数…...

1.探索WebSocket:实时网络的心跳!
序言 你可能听说过"WebSokcet"这个词,感觉它好像很高深,但其实它是一个超级酷的小工具,让我们在Web应用里实现实时通信。想象一下,你可以像聊天一样,在浏览器和服务器之间来回“畅聊“,没有延迟…...

uniapp学习(010-2 实现抖音小程序上线)
零基础入门uniapp Vue3组合式API版本到咸虾米壁纸项目实战,开发打包微信小程序、抖音小程序、H5、安卓APP客户端等 总时长 23:40:00 共116P 此文章包含第113p的内容 文章目录 抖音小程序下载抖音开发者工具先去开发者工具里进行测试 抖音开放平台配置开始打包上传…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...

(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
云原生周刊:k0s 成为 CNCF 沙箱项目
开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...