当前位置: 首页 > news >正文

asynDriver-6-端口驱动

本地串口

drvAsynSerialPort驱动支持设备连接到IOC上串口。

drvAsynSerialPortConfigureasynSetOption命令配置串口:

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键和值。当串口连接时,获取当前值。

baud50 75 110 134 150 200 300 600 1200 2400 9600 ...
bits8 7 6 5
paritynone even odd
stop1 2
clocalY N
crtsctsN Y
ixonN Y
ixoffN Y
ixanyN Y
rs485_enableN Y
rs485_rts_on_sendN Y
rs485_rts_after_sendN Y
rs485_delay_rts_before_sendmsec_delay
rs485_delay_rts_after_sendmsec_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键和值。

描述
disconnectOnReadTimeoutN 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命令配置串口&#xff1a; drvAsynSerialPortConfigure("portName","ttyName",priority,noAutoConnect,noProcessEosIn) asynSetOption("po…...

[免费]基于Python的Django+Vue3在线考试系统【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的基于Python的DjangoVue3在线考试系统&#xff0c;分享下哈。 项目视频演示 【免费】基于Python的DjangoVue3在线考试系统 Python毕业设计_哔哩哔哩_bilibili 项目介绍 本论文提出并实现了一种基于Python…...

Python使用爬虫

一、基本介绍 爬虫&#xff08;Web Scraping&#xff09;是一种自动化获取网页内容的技术&#xff0c;它通过编写程序模拟浏览器的行为&#xff0c;从互联网上抓取网页数据。爬虫可以用于多种目的&#xff0c;比如数据收集、信息整合、自动化测试等。 二、常用的库 1、Request…...

CommunityToolkit.Mvvm如何使用

CommunityToolkit.Mvvm 是一个现代、快速和模块化的 MVVM 库&#xff0c;用于 .NET 应用程序。以下是如何使用 CommunityToolkit.Mvvm 的基本步骤&#xff1a; 安装包&#xff1a; 你可以通过 NuGet 包管理器安装 CommunityToolkit.Mvvm。在 Visual Studio 中&#xff0c;你可以…...

Python小游戏20——超级玛丽

首先&#xff0c;你需要确保你的Python环境中安装了pygame库。如果还没有安装&#xff0c;可以使用以下命令进行安装&#xff1a; bash pip install pygame 运行效果展示 代码展示 python import pygame import sys # 初始化pygame pygame.init() # 设置屏幕尺寸 screen_width …...

配置文件格式(xml、properties、yml/yaml)

配置文件格式&#xff08;xml、properties、yml/yaml&#xff09; 配置文件格式一、XML二、properties三、yml/yaml基本语法yml数据格式1、对象/Map集合1、数组/List/Set集合 配置文件格式 什么是配置文件&#xff1f;&#xff1a; 配置文件是包含应用程序或系统配置信息的文件…...

CentOS 7 软件/程序安装示例

安装软件/程序 wget&#xff0c;前提需要用 root 用户 1、搜索软件/程序 yum search wget 搜索到软件/程序。 2、安装软件/程序 yum -y install wget 安装完成。...

Python绘制正弦函数图形

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

【LVGL-列表部件 lv_list_create】

LVGL-列表部件 lv_list_create ■ LVGL-列表部件-函数■ 修改样式-■ 修改样式- 背景色■ 修改样式- 改变项的颜色-label■ 修改样式- 改变项的颜色-btn ■ 事件(Event)■ 示例0&#xff1a;综合■ 示例1&#xff08;自动出现滚动&#xff09;■ 示例2&#xff08;滚动捕捉&…...

【P2-6】ESP8266 WIFI模块在STA模式下实现UDP与电脑/手机网络助手通信——UDP数据透传

前言:完成ESP8266 WIFI模块在STA模式下实现UDP与电脑/手机网络助手通信——实现UDP数据透传 STA模式,通俗来说就是模块/单片机去连接路由器/热点来通信。 UDP协议,是传输层协议,UDP没有服务器和客户端的说法。 本实验需要注意,wifi模块/单片机与电脑/手机需要连接在同一个…...

从零学习大模型(十)-----剪枝基本概念

剪枝的基本概念 模型压缩中的地位&#xff1a;剪枝是模型压缩中的重要技术之一&#xff0c;它通过减少模型的参数量来降低计算资源的需求。对于大型神经网络&#xff0c;尤其是像BERT、GPT等参数量级巨大的模型&#xff0c;剪枝可以有效地减少模型的内存占用和计算量&#xff…...

Jest进阶知识:模拟 ES6 类 - 掌握类的依赖模拟与方法监听技巧

引言 在现代前端开发中&#xff0c;ES6 类&#xff08;class&#xff09;是常用的一种面向对象编程方式。在测试类的时候&#xff0c;我们经常需要模拟类的依赖&#xff0c;以避免外部因素对测试结果的影响。Jest 提供了强大的工具来模拟类及其方法&#xff0c;确保测试的高效…...

前端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、代理模式定义&#xff1a; 代理模式&#xff1a;由于某些原因要给某对象提供一个代理以控制对该对象的访问&#xff0c;这时访问对象不适合或者不能够直接引用目标对象&#xff0c;代理对象作为访问对象与目标对象之间的中介进行连接调控调用。 2、代理模式的…...

第J9周:Inception v3算法实战与解析(pytorch版)

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营]中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊]** &#x1f4cc;本周任务&#xff1a;&#x1f4cc; 了解并学习InceptionV3相对与InceptionV1有哪些改进的地方 使用Inception完成天气…...

如何封装一个axios,封装axios有哪些好处

什么是Axios Axios 是一个基于 Promise 的 HTTP 客户端&#xff0c;用于在浏览器和 Node.js 中发送异步网络请求。它简化了发送 GET、POST、PUT、DELETE 等请求的过程&#xff0c;并且支持请求拦截、响应拦截、取消请求和自动处理 JSON 数据等功能。 为什么要封装Axios 封装…...

java的批量update

这个问题挺有代表性的&#xff0c;今天拿出来给大家一起分享一下&#xff0c;希望对你会有所帮助。 1 案发现场 有一天上午&#xff0c;在我的知识星球群里&#xff0c;有位小伙伴问了我一个问题&#xff1a;批量更新你们一般是使用when case吗&#xff1f;还是有其他的批量更…...

go语言连续监控事件并回调处理

前言 go语言中使用回调函数处理事件&#xff1a;事件监测部分&#xff08;如无限循环中的事件检测逻辑&#xff09;可以独立于具体的业务处理逻辑。这使得代码的各个部分更加清晰&#xff0c;易于理解和维护。如果需要更改事件处理的方式&#xff0c;只需要修改注册的回调函数…...

1.探索WebSocket:实时网络的心跳!

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

uniapp学习(010-2 实现抖音小程序上线)

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

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

python爬虫——气象数据爬取

一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用&#xff1a; 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests&#xff1a;发送 …...

【C++】纯虚函数类外可以写实现吗?

1. 答案 先说答案&#xff0c;可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...

【Veristand】Veristand环境安装教程-Linux RT / Windows

首先声明&#xff0c;此教程是针对Simulink编译模型并导入Veristand中编写的&#xff0c;同时需要注意的是老用户编译可能用的是Veristand Model Framework&#xff0c;那个是历史版本&#xff0c;且NI不会再维护&#xff0c;新版本编译支持为VeriStand Model Generation Suppo…...

Spring事务传播机制有哪些?

导语&#xff1a; Spring事务传播机制是后端面试中的必考知识点&#xff0c;特别容易出现在“项目细节挖掘”阶段。面试官通过它来判断你是否真正理解事务控制的本质与异常传播机制。本文将从实战与源码角度出发&#xff0c;全面剖析Spring事务传播机制&#xff0c;帮助你答得有…...