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的内容 文章目录 抖音小程序下载抖音开发者工具先去开发者工具里进行测试 抖音开放平台配置开始打包上传…...

测试和实施面试题收集
前端+测试+运维+算法综合 前端部分面试题 判断第二个日期比第一个日期大 如何用脚本判断用户输入的的字符串是下面的时间格式2004-11-21 必须要保证用户的输入是此格式,并且是时间,比如说月份不大于12等等,另外我需要用户输入两个,并且后一个要比前一个晚,只允许用JAVASCR…...

【Vue3】一文全览基础语法-案例程序及配图版
文章目录 Vue应用基本结构模块化开发ref和reactive绑定事件 v-on 简写显示和隐藏 v-show条件渲染 v-if动态属性绑定 v-bind 简写:遍历数组或对象 v-for双向数据绑定 v-model渲染数据 v-text 和 v-html计算属性 computed侦听器 watch自动侦听器 watchEffect 本文示例…...

【OpenSearch】安装部署OpenSearch和OpenSearch-Dashboard
一、安装OpenSearch 1.禁用主机swap提高性能 sudo swapoff -a2.增加OpenSearch可用的内存映射数量。 编辑sysctl配置文件 sudo vi /etc/sysctl.conf在文件中添加一行来定义所需的值, 或者如果键存在,则更改值,然后保存您的更改。 vm.max…...

【系统架构设计师】2023年真题论文: 论软件可靠性评价的设计与实现(包括和素材和论文)
更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 真题题目(2023年 试题3)论文素材参考论文参考摘要正文总结真题题目(2023年 试题3) 软件可靠性评价是利用可靠性数学模型、统计技术等,对软件失效数据进行处理,评估和预测软件可靠性的过程,包括选择模型、收集数…...

教程:使用 InterBase Express 访问数据库(二)
1. 添加数据模块(IBX 通用教程) 本节将创建一个数据模块(TDataModule),这是一种包含应用程序使用的非可视组件的表单。 以下是完全配置好的 TDataModule 的视图: 创建 TDataModule 后,您可以在其他表单中使用这个数据模块。 2. 添加 TDataModule 要将数据模块添加到…...

Windows密码的网络认证---基于挑战响应认证的NTLM协议
一,网络认证NTLM协议简介 在平时的测试中,经常会碰到处于工作组的计算机,处于工作组的计算机之间是无法建立一个可信的信托机构的,只能是点对点进行信息的传输。 举个例子就是,主机A想要访问主机B上的资源,…...

fpga 常量无法改变
parameter LED_ON_PERIOD0 n0*CLOCK_FREQ; parameter LED_OFF_PERIOD0 (2-n0)*CLOCK_FREQ;这种代码的变量不会无法内部修改 需要改成reg形式并在这种逻辑里面修改变量 always (posedge clk_ref or negedge sys_rst_n) begin虽然是并行逻辑 但是变量尽量还是先赋值从硬件上并…...

【HarmonyOS NEXT】如何给未知类型对象定义类型并使用递归打印所有的Key
关键词:嵌套对象、类型、递归、未知类型 目录 使用 Record 与 ESObject 定义未知对象类型 递归打印未知类型对象的key 在鸿蒙应用开发中,所有的数据都必须定义类型,且不存在 any 类型,那么我们当遇到 key 值可能随时变化的情况…...

RuoYi 样例框架运行步骤(测试项目自用,同学可自取)
目录 后台 API 运行导入,下载包端口号mysql 准备运行 PC(电脑端)运行安装 nodejs安装 yarn 及其依赖,启动服务登录admin(admin123) 或 ry(admin123) App(移动)运行下载 HBuilderX运行app运行注意࿱…...

Java进程CPU飙高排查
一、首先通过top指令查看当前占用CPU较高的进程pid 二、查看当前进程消耗资源的线程PID: top -Hp pid 使用 top -Hp <pid> 命令(pid为Java进程的id号)查看该Java进程内所有线程的资源占用情况。 三、通过print命令将线程pid转为16进…...