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的内容 文章目录 抖音小程序下载抖音开发者工具先去开发者工具里进行测试 抖音开放平台配置开始打包上传…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
