【CANOE】【Capl】【RS232】控制串口设备

在这里插入图片描述

系列文章目录

内置函数,来控制传统的串口设备,比如继电器等


文章目录

  • 系列文章目录
  • 前言
  • 一、控制串口
  • 二、自定义相关的参数
    • RS232Configure
      • **函数语法**
      • **函数功能**
      • **参数说明**
      • **返回值**
      • **示例代码**
  • 三、回调函数的使用
    • RS232OnSend
      • **函数语法**
      • **函数功能**
      • **参数说明**
      • **返回值**
      • **示例代码**
    • RS232OnReceive
      • **函数语法**
      • **函数功能**
      • **参数说明**
      • **返回值**
      • **示例代码**
        • **发送端节点代码**
        • **接收端节点代码**
        • **处理接收数据的回调**
      • **注意事项**
      • **版本支持**
    • RS232OnError
      • **`RS232OnError` 函数说明**
      • **函数语法**
      • **函数功能**
      • **参数说明**
        • **`errorFlags` 位标志说明**
      • **返回值**
      • **示例代码**
      • **注意事项**
  • 总结


前言

可能有时候遇到设备不是很多的情况下,并且对应时间精准度没有过高要求的时候,可以只控制继电器就行。


提示:以下是本篇文章正文内容,下面案例可供参考

一、控制串口


void testR232Fun(long com_num){byte data[2];int length=2;data[0]=1;data[1]=2;rs232Open(com_num);// 打开串口rs232Send(com_num,data,length);//发送数据rs232Close(com_num);//串口数据关闭}

二、自定义相关的参数

RS232Configure

RS232Configure 函数说明

RS232Configure 是 CAPL 脚本中的一个函数,用于配置串行端口的通信参数。CAPL 提供了两种形式的该函数,分别支持基本和扩展的配置选项。


函数语法

形式1:

dword RS232Configure(dword port, dword baudrate, dword numberOfDataBits, dword numberOfStopBits, dword parity);

形式2:

dword RS232Configure(dword port, dword baudrate, dword numberOfDataBits, dword numberOfStopBits, dword parity, dword enableParityCheck);

函数功能

配置指定的串口参数。如果未显式配置,将使用默认参数:

  • 波特率:9600
  • 数据位:8
  • 停止位:1
  • 校验位:无校验。

注意:
如果存在过时的 .INI 配置文件,函数会优先使用 .INI 文件中的参数。


参数说明

参数类型描述
portdword串口号,范围为 1255
baudratedword波特率,例如 9600115200 是大多数情况下的最大值。
numberOfDataBitsdword每帧数据位数,范围为 58,通常为 8
numberOfStopBitsdword停止位数:
1:1 个停止位
2:2 个停止位。
paritydword校验模式:
0:无校验
1:奇校验
2:偶校验。
enableParityCheckdword是否启用校验检查:
0:禁用
非 0:启用。
仅在 parity 不为 0 时有效,仅在形式 2 中提供。

返回值

返回值描述
0配置失败:
- 指定的串口号不存在
- 串口未被打开。
1配置成功。

示例代码

以下示例设置串口 1 的典型默认配置(波特率为 9600,8 数据位,1 停止位,无校验):

if (0 != RS232Configure(1, 9600, 8, 1, 0)) {write("Set typical default at port 1.");
} else {write("Configuration failed.");
}

三、回调函数的使用

RS232OnSend

RS232OnSend 函数说明

RS232OnSend 是 CAPL 脚本中的一个回调函数,用于处理串口发送操作完成后的事件。该函数会在发送操作成功完成时被调用,允许开发者在数据发送完成后进行后续处理。


函数语法

RS232OnSend(dword port, byte buffer[], dword number);

函数功能

  • 回调处理RS232OnSend 在串口发送操作成功完成后被自动调用,用于处理发送完的数据。
  • 只有在发送成功时,该函数才会被调用。如果发送过程中出现错误,则会触发 RS232OnError 函数。

参数说明

参数类型描述
portdword串口号,范围为 1255
bufferbyte[]指向发送数据缓冲区的指针,包含发送的数据。
numberdword已成功发送的字节数。

返回值

返回值描述
0错误:如果没有进行发送操作或发生了错误。
1成功:发送操作成功完成。

示例代码

以下是一个示例代码,演示如何使用 RS232OnSend 回调函数来处理发送操作完成后的后续任务:

char text[20] = "Hello World !";
byte block[20];
int i;
int length;
length = strlen(text) + 1;  // 计算字符串长度并加上结尾的 '\0'
for (i = 0; i < length; i++) {block[i] = text[i];  // 将字符串内容复制到发送缓冲区
}// 发送数据到串口 1
if (0 != RS232Send(1, block, length)) {write("Written block of bytes to port 1.");
}
// 在发起发送请求的节点上
RS232OnSend(dword port, byte buffer[], dword number)
{// 发送完成,可以进行下一步操作// buffer == block, number == lengthwrite("Send completed. Proceeding with the next operation.");
}

RS232OnReceive

RS232OnReceive 函数说明

RS232OnReceive 是 CAPL 脚本中的一个回调函数,用于处理串口接收操作完成后的事件。该函数会在数据接收成功后被调用,从而让用户能够对接收到的数据进行处理。


函数语法

RS232OnReceive(dword port, byte buffer[], dword number);

函数功能

  • 回调处理: 当指定串口成功接收到数据时触发该回调函数。
  • 如果接收过程中发生错误,则会调用 RS232OnError 进行错误处理。
  • 可以在多个节点上监听同一个串口,所有监听的节点都会接收到相同的数据。

参数说明

参数类型描述
portdword串口号,范围为 1255
bufferbyte[]接收到的数据缓冲区指针,包含接收的数据内容。
numberdword实际接收到的字节数,可能小于指定的缓冲区大小,至少为 1。

返回值

返回值描述
0错误:如果未启动接收操作或发生了错误。
1成功:接收操作成功完成。

示例代码

以下示例展示了发送和接收串口数据的完整流程:

发送端节点代码
char text[20] = "Hello World !";
byte block[20];
int i;
int length;// 准备发送数据
length = strlen(text) + 1;  // 包含字符串结束符 '\0'
for (i = 0; i < length; i++) {block[i] = text[i];
}// 发送数据到串口 1
if (0 != RS232Send(1, block, length)) {write("Written block of bytes to port 1.");
}
接收端节点代码
// 定义接收缓冲区和缓冲区大小
byte mybuffer[100];
int mysize = 100;// 启动接收数据操作
RS232Receive(2, mybuffer, mysize);
处理接收数据的回调
// 回调函数:当接收到数据时触发
RS232OnReceive(dword port, byte buffer[], dword number) {// port == 2// buffer == mybuffer, number <= mysize// 打印接收到的数据内容writef("Received %d bytes from port %d: %s\n", number, port, buffer);
}

注意事项

  1. 数据缓冲区大小: buffer 的大小由 RS232Receive 中指定的大小决定,但 number 可能小于缓冲区大小。
  2. 调用条件: 只有调用了 RS232Receive 的节点会触发 RS232OnReceive 回调。
  3. 数据分片: 对于慢速连接,接收到的数据可能分多次触发 RS232OnReceive,因此要根据 number 逐步处理接收到的数据。
  4. 多节点监听: 如果多个节点监听同一串口,所有节点都会收到相同的数据。

版本支持

  • 版本支持: 从 CAPL 版本 7.1 开始支持。

如果有更多关于 RS232OnReceive 或其他串口操作的问题,可以随时提供具体需求,我们将进一步协助。


RS232OnError

RS232OnError 函数说明

RS232OnError 是 CAPL 脚本中的一个回调函数,用于处理串口通信过程中发生的错误。当 RS232SendRS232Receive 操作失败时,该函数会被触发,以便记录错误信息或采取相应措施。


函数语法

RS232OnError(dword port, dword errorFlags);

函数功能

  • 回调处理: 在串口通信发生错误时触发该回调函数。
  • 错误汇总: errorFlags 参数提供了累计的错误信息,通过检查特定位来确定具体的错误原因。
  • 如果错误是持续性的(例如配置不匹配导致的帧错误),仅在首次出现时触发。

参数说明

参数类型描述
portdword串口号,范围为 1255
errorFlagsdword错误标志的累计汇总,使用位掩码表示具体的错误类型(见下表)。
errorFlags 位标志说明
位编号错误类型描述
0发送操作失败RS232Send 操作失败。
1接收操作失败RS232Receive 操作失败。
2帧错误通常由帧参数不匹配引起,例如奇偶校验或停止位数不一致。
3奇偶校验错误通常由奇偶校验设置不匹配引起。
4缓冲区溢出(发送端)发送端缓冲区溢出,可能是因为接收端处理速度太慢导致无法及时处理数据。
5缓冲区溢出(接收端)接收端缓冲区溢出,可能是因为数据量过大或接收端无法及时处理。
6中断状态通信对端请求暂停通信。
7超时通常由超时设置不当或其他通信中断问题引起。

返回值

该函数没有返回值。


示例代码

以下代码展示了如何通过 RS232OnError 回调处理串口错误:

// 回调函数:处理串口通信错误
RS232OnError(dword port, dword errorFlags) {// 输出发生错误的串口号writef("Error on port %d:\n", port);// 根据错误标志位分析具体错误if (errorFlags & (1 << 0)) {writeLine("Send operation failed.");}if (errorFlags & (1 << 1)) {writeLine("Receive operation failed.");}if (errorFlags & (1 << 2)) {writeLine("Frame error occurred.");}if (errorFlags & (1 << 3)) {writeLine("Parity error detected.");}if (errorFlags & (1 << 4)) {writeLine("Buffer overrun at sender.");}if (errorFlags & (1 << 5)) {writeLine("Buffer overrun at receiver.");}if (errorFlags & (1 << 6)) {writeLine("Break state detected (pause requested).");}if (errorFlags & (1 << 7)) {writeLine("Timeout occurred.");}
}

注意事项

  1. 错误诊断: errorFlags 中的多个位可能同时被设置,表示多个错误条件同时发生。
  2. 持续性错误: 持续性的错误(例如配置不匹配)可能仅在首次出现时被触发,需特别注意这种情况。
  3. 配置验证: 通常,帧错误或奇偶校验错误可能由两端通信参数(例如波特率、数据位、停止位、奇偶校验)不匹配引起。请确保通信双方参数一致。
  4. 日志记录: 使用 writewriteLine 将错误信息记录到日志,以便调试和诊断问题。

总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/479054.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AX58100+STM32使用FSMC接口,运行EtherCAT Slave协议栈

目录 简介环境硬件接线MCU一侧的初始化时钟FSMC外部中断timer 协议栈生成EtherCAT SlaveSlave infomationgenerichardwareEtherCAT State MachineSynchronisationApplicaitonProcessDataMailbox OD TOOL 协议栈移植协议栈集成和错误初步解决启动协议栈 应用开发集成到TWINCAT集…

IC数字后端实现之大厂IC笔试真题(经典时序计算和时序分析题)

今天小编给大家分享下每年IC秋招春招必考题目——静态时序分析时序分析题。 数字IC后端笔试面试题库 | 经典时序Timing计算题 时序分析题1&#xff1a; 给定如下图所示的timing report&#xff0c;请回答一下几个问题。 1&#xff09;这是一条setup还是hold的timing report?…

嵌入式系统与OpenCV

目录 一、OpenCV 简介 二、嵌入式 OpenCV 的安装方法 1. Ubuntu 系统下的安装 2. 嵌入式 ARM 系统中的安装 3. Windows10 和树莓派系统下的安装 三、嵌入式 OpenCV 的性能优化 1. 介绍嵌入式平台上对 OpenCV 进行优化的必要性。 2. 利用嵌入式开发工具&#xff0c;如优…

英伟达发布 Edify 3D 生成模型,可以在两分钟内生成详细的、可用于生产的 3D 资源、生成有组织的 UV 贴图、4K 纹理和 PBR 材质。

英伟达发布 Edify 3D 生成模型&#xff0c;可以利用 Agents 自动判断提示词场景中需要的模型&#xff0c;生成后将他们组合为一个场景。 Edify 3D 可以在两分钟内生成详细的、可用于生产的 3D 资源、生成有组织的 UV 贴图、4K 纹理和 PBR 材质。 相关链接 论文&#xff1a;htt…

抖音短视频矩阵源代码部署搭建流程

抖音短视频矩阵源代码部署搭建流程 1. 硬件准备 需确保具备一台性能足够的服务器或云主机。这些硬件设施应当拥有充足的计算和存储能力&#xff0c;以便支持抖音短视频矩阵系统的稳定运行。 2. 操作系统安装 在选定的服务器或云主机上安装适合的操作系统是关键步骤之一。推…

【Android+多线程】异步 多线程 知识总结:基础概念 / 多种方式 / 实现方法 / 源码分析

1 基本概念 1.1 线程 定义&#xff1a;一个基本的CPU执行单元 & 程序执行流的最小单元 比进程更小的可独立运行的基本单位&#xff0c;可理解为&#xff1a;轻量级进程组成&#xff1a;线程ID 程序计数器 寄存器集合 堆栈注&#xff1a;线程自己不拥有系统资源&#…

NLP论文速读(剑桥大学出品)|分解和利用专家模型中的偏好进行改进视觉模型的可信度

论文速读|Decompose and Leverage Preferences from Expert Models for Improving Trustworthiness of MLLMs 论文信息&#xff1a; 简介&#xff1a; 本文探讨的背景是多模态大型语言模型&#xff08;MLLMs&#xff09;&#xff0c;这类模型通过结合视觉特征和文本空间来增强语…

CentOS8.5.2111(7)完整的Apache综合实验

一、实验目标 1.掌握Linux系统中Apache服务器的安装与配置&#xff1b; 2.掌握个人主页、虚拟目录、基于用户和主机的访问控制及虚拟主机的实现方法。 二、实验要求 练习使用linux系统下WEB服务器的配置方法。 三、实验背景 重庆工程学院为筹备“重庆工程大学”特申请了c…

零基础3分钟快速掌握 ——Linux【终端操作】及【常用指令】Ubuntu

1.为啥使用Linux做嵌入式开发 能广泛支持硬件 内核比较高效稳定 原码开放、软件丰富 能够完善网络通信与文件管理机制 优秀的开发工具 2.什么是Ubuntu 是一个以桌面应用为主的Linux的操作系统&#xff0c; 内核是Linux操作系统&#xff0c; 具有Ubuntu特色的可视…

JVM类加载和垃圾回收算法详解

文章目录 JVM一、JVM运行流程1. JVM执行流程 二、JVM运行时数据区1. 程序计数器&#xff08;线程私有&#xff09;2. 虚拟机栈 &#xff08;线程私有&#xff09;3. 本地方法栈&#xff08;线程私有&#xff09;4. 堆&#xff08;线程共享&#xff09;5. 元空间&#xff08;线程…

iOS 17.4 Not Installed

0x00 系统警告 没有安装 17.4 的模拟器&#xff0c;任何操作都无法进行&#xff01; 点击 OK 去下载&#xff0c;完成之后&#xff0c;依旧是原样&#xff01; 0x01 解决办法 1、先去官网下载对应的模拟器&#xff1a; https://developer.apple.com/download/all/?q17.4 …

day04 企业级Linux安装及远程连接知识实践

1. 使用传统的网卡命名方式 在启动虚拟机时&#xff0c;按tab键进入编辑模式 添加命令&#xff1a; net.ifnames0 biosdevname0 这样linux系统会使用传统的网卡命名&#xff0c;例如eth0、eth1…… 2. 快照 做系统关键操作时&#xff0c;一定要使用快照(先将系统关机) 3.…

人体特定吸收率 (SAR) 分布建模

ANSYS HFSS 提供了一种建模 SAR 分布的方法&#xff01; 2020 年对我们所有人来说都是充满挑战的一年&#xff0c;由于 COVID 19 限制和居家隔离&#xff0c;许多工程师不得不推迟开发时间表。ANSYS HFSS 为所有工程师提供了一种在家安全工作的好方法。隔离期间&#xff0c;您…

.NET9 - Swagger平替Scalar详解(四)

书接上回&#xff0c;上一章介绍了Swagger代替品Scalar&#xff0c;在使用中遇到不少问题&#xff0c;今天单独分享一下之前Swagger中常用的功能如何在Scalar中使用。 下面我们将围绕文档版本说明、接口分类、接口描述、参数描述、枚举类型、文件上传、JWT认证等方面详细讲解。…

计算(a+b)/c的值

计算&#xff08;ab&#xff09;/c的值 C语言代码C语言代码Java语言代码Python语言代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 给定3个整数a、b、c&#xff0c;计算表达式(ab)/c的值&#xff0c;/是整除运算。 输入 输入仅一行&…

PICO 获取设备号 SN码

Unity版本 2020.3.42f1c1PICO SDK版本PICO Unity Integration SDK-3.0.5-20241105Pico设备pico 4ultra 注意 此api暂时只测试企业版本 pico 4ultra 代码 using Unity.XR.PICO.TOBSupport;private void Awake() {bool result PXR_Enterprise.InitEnterpriseService();Debug.L…

【大数据技术基础】 课程 第8章 数据仓库Hive的安装和使用 大数据基础编程、实验和案例教程(第2版)

第8章 数据仓库Hive的安装和使用 8.1 Hive的安装 8.1.1 下载安装文件 访问Hive官网&#xff08;http://www.apache.org/dyn/closer.cgi/hive/&#xff09;下载安装文件apache-hive-3.1.2-bin.tar.gz 下载完安装文件以后&#xff0c;需要对文件进行解压。按照Linux系统使用的…

[STM32]从零开始的STM32 FreeRTOS移植教程

一、前言 如果能看到这个教程的话&#xff0c;说明大家已经学习嵌入式有一段时间了。还记得嵌入式在大多数时候指的是什么吗&#xff1f;是的&#xff0c;我们所说的学习嵌入式大部分时候都是在学习嵌入式操作系统。从简单的一些任务状态机再到复杂一些的RTOS&#xff0c;再到最…

DAY133权限提升-Windows权限提升篇溢出漏洞土豆家族通杀全系补丁对比EXP筛选

知识点 1、Web到Win-系统提权-土豆家族 2、Web到Win-系统提权-人工操作 章节点&#xff1a; 1、Web权限提升及转移 2、系统权限提升及转移 3、宿主权限提升及转移 4、域控权限提升及转移 Windows提权&#xff1a; 1、内核溢出漏洞提权 2、数据库类型提权 3、第三方软件…

web day03 Maven基础 Junit

目录 Maven坐标&#xff1a; 依赖排除&#xff1a; 依赖范围&#xff1a; Maven生命周期&#xff1a; 单元测试&#xff1a; Junit入门&#xff1a; 断言&#xff1a; Junit中的常见注解&#xff1a; 概念&#xff1a;Maven 是一款用于管理和构建 Java项目的工具&#…