免费商城网站系统用万网建设网站教程视频

系列文章目录
内置函数,来控制传统的串口设备,比如继电器等
文章目录
- 系列文章目录
 - 前言
 - 一、控制串口
 - 二、自定义相关的参数
 - 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文件中的参数。
参数说明
| 参数 | 类型 | 描述 | 
|---|---|---|
port | dword | 串口号,范围为 1 至 255。 | 
baudrate | dword | 波特率,例如 9600,115200 是大多数情况下的最大值。 | 
numberOfDataBits | dword | 每帧数据位数,范围为 5 至 8,通常为 8。 | 
numberOfStopBits | dword | 停止位数: 1:1 个停止位 2:2 个停止位。  | 
parity | dword | 校验模式: 0:无校验 1:奇校验 2:偶校验。  | 
enableParityCheck | dword | 是否启用校验检查: 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函数。 
参数说明
| 参数 | 类型 | 描述 | 
|---|---|---|
port | dword | 串口号,范围为 1 至 255。 | 
buffer | byte[] | 指向发送数据缓冲区的指针,包含发送的数据。 | 
number | dword | 已成功发送的字节数。 | 
返回值
| 返回值 | 描述 | 
|---|---|
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进行错误处理。 - 可以在多个节点上监听同一个串口,所有监听的节点都会接收到相同的数据。
 
参数说明
| 参数 | 类型 | 描述 | 
|---|---|---|
port | dword | 串口号,范围为 1 至 255。 | 
buffer | byte[] | 接收到的数据缓冲区指针,包含接收的数据内容。 | 
number | dword | 实际接收到的字节数,可能小于指定的缓冲区大小,至少为 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参数提供了累计的错误信息,通过检查特定位来确定具体的错误原因。 - 如果错误是持续性的(例如配置不匹配导致的帧错误),仅在首次出现时触发。
 
参数说明
| 参数 | 类型 | 描述 | 
|---|---|---|
port | dword | 串口号,范围为 1 至 255。 | 
errorFlags | dword | 错误标志的累计汇总,使用位掩码表示具体的错误类型(见下表)。 | 
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将错误信息记录到日志,以便调试和诊断问题。 
