网站模板下,报价表制作,南京制作网页培训班,国家企业年报信息公示网官网查询系列文章目录
内置函数#xff0c;来控制传统的串口设备#xff0c;比如继电器等 文章目录 系列文章目录前言一、控制串口二、自定义相关的参数RS232Configure**函数语法****函数功能****参数说明****返回值****示例代码** 三、回调函数的使用RS232OnSend**函数语法****函数…
系列文章目录
内置函数来控制传统的串口设备比如继电器等 文章目录 系列文章目录前言一、控制串口二、自定义相关的参数RS232Configure**函数语法****函数功能****参数说明****返回值****示例代码** 三、回调函数的使用RS232OnSend**函数语法****函数功能****参数说明****返回值****示例代码** RS232OnReceive**函数语法****函数功能****参数说明****返回值****示例代码****发送端节点代码****接收端节点代码****处理接收数据的回调** **注意事项****版本支持** RS232OnError**RS232OnError 函数说明****函数语法****函数功能****参数说明****errorFlags 位标志说明** **返回值****示例代码****注意事项** 总结 前言
可能有时候遇到设备不是很多的情况下并且对应时间精准度没有过高要求的时候可以只控制继电器就行。 提示以下是本篇文章正文内容下面案例可供参考
一、控制串口 void testR232Fun(long com_num){byte data[2];int length2;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串口号范围为 1 至 255。baudratedword波特率例如 9600115200 是大多数情况下的最大值。numberOfDataBitsdword每帧数据位数范围为 5 至 8通常为 8。numberOfStopBitsdword停止位数11 个停止位22 个停止位。paritydword校验模式0无校验1奇校验2偶校验。enableParityCheckdword是否启用校验检查0禁用非 0启用。仅在 parity 不为 0 时有效仅在形式 2 中提供。 返回值
返回值描述0配置失败- 指定的串口号不存在- 串口未被打开。1配置成功。 示例代码
以下示例设置串口 1 的典型默认配置波特率为 96008 数据位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串口号范围为 1 至 255。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串口号范围为 1 至 255。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);
}注意事项
数据缓冲区大小 buffer 的大小由 RS232Receive 中指定的大小决定但 number 可能小于缓冲区大小。调用条件 只有调用了 RS232Receive 的节点会触发 RS232OnReceive 回调。数据分片 对于慢速连接接收到的数据可能分多次触发 RS232OnReceive因此要根据 number 逐步处理接收到的数据。多节点监听 如果多个节点监听同一串口所有节点都会收到相同的数据。 版本支持
版本支持 从 CAPL 版本 7.1 开始支持。 如果有更多关于 RS232OnReceive 或其他串口操作的问题可以随时提供具体需求我们将进一步协助。 RS232OnError
RS232OnError 函数说明
RS232OnError 是 CAPL 脚本中的一个回调函数用于处理串口通信过程中发生的错误。当 RS232Send 或 RS232Receive 操作失败时该函数会被触发以便记录错误信息或采取相应措施。 函数语法
RS232OnError(dword port, dword errorFlags);函数功能
回调处理 在串口通信发生错误时触发该回调函数。错误汇总 errorFlags 参数提供了累计的错误信息通过检查特定位来确定具体的错误原因。如果错误是持续性的例如配置不匹配导致的帧错误仅在首次出现时触发。 参数说明
参数类型描述portdword串口号范围为 1 至 255。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.);}
}注意事项
错误诊断 errorFlags 中的多个位可能同时被设置表示多个错误条件同时发生。持续性错误 持续性的错误例如配置不匹配可能仅在首次出现时被触发需特别注意这种情况。配置验证 通常帧错误或奇偶校验错误可能由两端通信参数例如波特率、数据位、停止位、奇偶校验不匹配引起。请确保通信双方参数一致。日志记录 使用 write 或 writeLine 将错误信息记录到日志以便调试和诊断问题。 总结