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

域名备案了 怎么建设网站企业建设网站的作用大不大

域名备案了 怎么建设网站,企业建设网站的作用大不大,百度关键字排名软件,什么是网站运营文章目录 下载库函数源码编译路径添加libmodbus 源码分析核心数据结构常用接口函数 开发 TCP Server 端开发TCP Client 端 下载库函数源码 编译路径添加 libmodbus 源码分析 核心数据结构 modbus_t结构体#xff1a; 这是 libmodbus 的核心数据结构#xff0c;代表一个 Mod… 文章目录 下载库函数源码编译路径添加libmodbus 源码分析核心数据结构常用接口函数 开发 TCP Server 端开发TCP Client 端 下载库函数源码 编译路径添加 libmodbus 源码分析 核心数据结构 modbus_t结构体 这是 libmodbus 的核心数据结构代表一个 Modbus 上下文。它包含了与 Modbus 通信相关的各种信息如通信方式串口或 TCP、设备地址、端口号等。 struct _modbus {/* Slave address */// 存储 Modbus 从设备地址。在 Modbus 通信中主设备通过指定从设备地址来与特定的从设备进行通信。int slave;/* Socket or file descriptor */// 存储套接字描述符或文件描述符。根据通信方式的不同这个值可以是一个套接字描述符用于 TCP 通信或文件描述符用于串口通信。int s;// 调试标志。如果设置为非零值表示启用调试模式可以输出更多的调试信息。int debug;// 错误恢复标志。用于指示是否启用错误恢复机制例如在通信出现错误时尝试重新连接或采取其他恢复措施。int error_recovery;// 响应超时时间。这是一个结构体 timeval用于指定在等待从设备响应时的超时时间。如果在这个时间内没有收到响应将认为通信出现错误。struct timeval response_timeout;// 字节超时时间。同样是一个结构体 timeval用于指定在接收单个字节时的超时时间。如果在这个时间内没有接收到下一个字节也将认为通信出现错误。struct timeval byte_timeout;// 指示超时时间。这个超时时间的具体用途可能因实现而异可能用于等待某些特定的指示或事件。struct timeval indication_timeout;// 指向特定后端实现的指针。Modbus 库可能支持多种不同的通信后端例如不同的操作系统或硬件平台。这个指针指向相应的后端实现结构体。const modbus_backend_t *backend;// 后端数据指针。用于存储特定于后端实现的数据。不同的后端可能需要不同的数据结构来存储其特定的状态信息。void *backend_data; };modbus_mapping_t 用于映射 Modbus 寄存器和线圈的数据结构。它包含了输入寄存器、输出寄存器、输入线圈和输出线圈的内存映射方便开发者在应用程序中访问和操作 Modbus 设备的数据 typedef struct _modbus_mapping_t {int nb_bits;// 表示映射的线圈位的总数。在 Modbus 协议中线圈通常用于表示离散的开/关状态。int start_bits;// 映射的线圈的起始地址。这是相对于 Modbus 地址空间的起始位置。int nb_input_bits;// 表示映射的离散输入只读位的总数。离散输入通常用于反映外部设备的状态不能被写入。int start_input_bits;// 映射的离散输入的起始地址。同样是相对于 Modbus 地址空间的起始位置。int nb_input_registers;// 表示映射的输入寄存器的总数。输入寄存器通常用于存储只读的 16 位数据例如传感器的测量值。int start_input_registers;// 映射的输入寄存器的起始地址。在 Modbus 地址空间中的起始位置。int nb_registers;// 表示映射的保持寄存器的总数。保持寄存器可用于存储可读可写的 16 位数据通常用于配置参数或存储设备状态。int start_registers;// 映射的保持寄存器的起始地址。相对于 Modbus 地址空间的起始位置。uint8_t *tab_bits;// 指向一个字节数组的指针用于存储线圈位的状态。每个字节可以表示 8 个位的状态。uint8_t *tab_input_bits;// 指向一个字节数组的指针用于存储离散输入只读位的状态。同样每个字节可以表示 8 个位的状态。uint16_t *tab_input_registers;// 指向一个 16 位无符号整数数组的指针用于存储输入寄存器的值。uint16_t *tab_registers;// 指向一个 16 位无符号整数数组的指针用于存储保持寄存器的值。 } modbus_mapping_t;modbus_backend_t typedef struct _modbus_backend {unsigned int backend_type;// 表示后端的类型标识。可能用于区分不同的通信方式如串口、TCP 等或特定的实现。unsigned int header_length;// 表示通信协议头部的长度。不同的通信方式可能有不同长度的头部信息。unsigned int checksum_length;// 表示校验和的长度。用于确定在通信中使用的校验和数据的长度。unsigned int max_adu_length;// 表示最大应用数据单元Application Data UnitADU的长度。ADU 是 Modbus 协议中在通信中传输的数据单元。int (*set_slave) (modbus_t *ctx, int slave);// 这是一个函数指针用于设置 Modbus 从设备地址。接收一个指向 modbus_t 结构体的指针和一个整数表示从设备地址返回一个整数表示操作的结果状态。int (*build_request_basis) (modbus_t *ctx, int function, int addr,int nb, uint8_t *req);// 函数指针用于构建基本的请求。接收 modbus_t 结构体指针、功能码、地址、数量和一个指向请求数据的指针返回一个整数表示操作的结果状态。int (*build_response_basis) (sft_t *sft, uint8_t *rsp);// 函数指针用于构建基本的响应。接收一个指向特定结构体的指针和一个指向响应数据的指针返回一个整数表示操作的结果状态。int (*prepare_response_tid) (const uint8_t *req, int *req_length);// 函数指针用于准备带有事务标识符的响应。接收一个指向请求数据的指针和一个指向请求长度的指针返回一个整数表示操作的结果状态。int (*send_msg_pre) (uint8_t *req, int req_length);// 函数指针在发送消息之前执行一些预处理操作。接收一个指向请求数据的指针和请求长度返回一个整数表示操作的结果状态。ssize_t (*send) (modbus_t *ctx, const uint8_t *req, int req_length);// 函数指针用于发送数据。接收一个指向 modbus_t 结构体的指针、指向请求数据的指针和请求长度返回实际发送的字节数。int (*receive) (modbus_t *ctx, uint8_t *req);// 函数指针用于接收数据。接收一个指向 modbus_t 结构体的指针和一个指向接收缓冲区的指针返回一个整数表示操作的结果状态。ssize_t (*recv) (modbus_t *ctx, uint8_t *rsp, int rsp_length);// 函数指针用于接收特定长度的数据。接收一个指向 modbus_t 结构体的指针、指向响应数据的指针和响应长度返回实际接收的字节数。int (*check_integrity) (modbus_t *ctx, uint8_t *msg,const int msg_length);// 函数指针用于检查消息的完整性。接收一个指向 modbus_t 结构体的指针、指向消息数据的指针和消息长度返回一个整数表示消息是否完整。int (*pre_check_confirmation) (modbus_t *ctx, const uint8_t *req,const uint8_t *rsp, int rsp_length);// 函数指针在检查确认之前执行一些预处理操作。接收一个指向 modbus_t 结构体的指针、指向请求数据的指针、指向响应数据的指针和响应长度返回一个整数表示操作的结果状态。int (*connect) (modbus_t *ctx);// 函数指针用于建立连接。接收一个指向 modbus_t 结构体的指针返回一个整数表示连接操作的结果状态。void (*close) (modbus_t *ctx);// 函数指针用于关闭连接。接收一个指向 modbus_t 结构体的指针无返回值。int (*flush) (modbus_t *ctx);// 函数指针用于刷新缓冲区。接收一个指向 modbus_t 结构体的指针返回一个整数表示操作的结果状态。int (*select) (modbus_t *ctx, fd_set *rset, struct timeval *tv, int msg_length);// 函数指针用于执行 select 操作。接收一个指向 modbus_t 结构体的指针、一个文件描述符集合指针、一个时间结构指针和消息长度返回一个整数表示操作的结果状态。void (*free) (modbus_t *ctx);// 函数指针用于释放资源。接收一个指向 modbus_t 结构体的指针无返回值。 } modbus_backend_t;常用接口函数 以下是对 libmodbus 库常用接口函数的详细介绍 一、创建和释放上下文 modbus_new_rtu(const char *device, int baud, char parity, int data_bit, int stop_bit) 功能创建一个用于 Modbus RTU 通信的上下文。参数 device串口设备名称例如 “/dev/ttyS0”。这是与 Modbus 设备进行通信的物理串口设备的路径。baud波特率常见的值有 9600、19200 等。决定了数据在串口上传输的速度。parity校验位‘N’ 表示无校验‘E’ 表示偶校验‘O’ 表示奇校验。用于检测数据传输中的错误。data_bit数据位数通常为 7 或 8。表示每个数据字节中的有效数据位数。stop_bit停止位数常见的值为 1 或 2。用于标识一个数据帧的结束。 返回值如果创建成功返回一个指向 modbus_t 结构体的指针该结构体代表创建的 Modbus 上下文如果创建失败返回 NULL。 modbus_new_tcp(const char *ip_address, int port) 功能创建一个用于 Modbus TCP 通信的上下文。参数 ip_address服务器 IP 地址例如 “192.168.1.100”。指定要连接的 Modbus TCP 服务器的 IP 地址。port端口号通常为 502。这是 Modbus TCP 通信使用的端口号。 返回值如果创建成功返回一个指向 modbus_t 结构体的指针该结构体代表创建的 Modbus 上下文如果创建失败返回 NULL。 modbus_free(modbus_t *ctx) 功能释放 Modbus 上下文占用的资源。参数 ctx指向要释放的 modbus_t 结构体的指针。这个指针是之前通过 modbus_new_rtu 或 modbus_new_tcp 创建的 Modbus 上下文。 返回值无。 二、设置参数 modbus_set_slave(modbus_t *ctx, int slave) 功能设置 Modbus 从设备地址。参数 ctx指向 Modbus 上下文的指针。slave从设备地址通常是一个整数范围在 1 到 247 之间。在 Modbus 网络中每个设备都有一个唯一的地址主设备通过这个地址来与特定的从设备进行通信。 返回值无。 modbus_set_debug(modbus_t *ctx, int debug) 功能设置调试模式。参数 ctx指向 Modbus 上下文的指针。debug非零值表示开启调试模式零表示关闭调试模式。当开启调试模式时库可能会输出更多的调试信息帮助开发者诊断问题。 返回值无。 三、连接和断开连接 modbus_connect(modbus_t *ctx) 功能建立与 Modbus 设备的连接。参数 ctx指向 Modbus 上下文的指针。 返回值如果连接成功返回 0如果连接失败返回 -1。 modbus_close(modbus_t *ctx) 功能关闭与 Modbus 设备的连接。参数 ctx指向 Modbus 上下文的指针。 返回值无。 四、读取数据 modbus_read_bits(modbus_t *ctx, int addr, int nb, uint8_t *dest) 功能读取线圈状态。参数 ctx指向 Modbus 上下文的指针。addr起始地址线圈在 Modbus 地址空间中的位置。nb要读取的线圈数量。dest存储读取结果的缓冲区。这个缓冲区应该足够大以存储 nb 个线圈的状态。每个线圈的状态用一个字节中的一位表示0 表示关闭1 表示打开。 返回值如果读取成功返回读取的字节数如果读取失败返回 -1。 modbus_read_input_bits(modbus_t *ctx, int addr, int nb, uint8_t *dest) 功能读取离散输入状态。参数和返回值与 modbus_read_bits 类似但离散输入是只读的不能被写入。 modbus_read_registers(modbus_t *ctx, int addr, int nb, uint16_t *dest) 功能读取保持寄存器的值。参数 ctx指向 Modbus 上下文的指针。addr起始地址保持寄存器在 Modbus 地址空间中的位置。nb要读取的寄存器数量。dest存储读取结果的缓冲区。这个缓冲区应该足够大以存储 nb 个 16 位的寄存器值。 返回值如果读取成功返回读取的字节数通常是 nb 乘以 2如果读取失败返回 -1。 modbus_read_input_registers(modbus_t *ctx, int addr, int nb, uint16_t *dest) 功能读取输入寄存器的值。参数和返回值与 modbus_read_registers 类似但输入寄存器也是只读的。 五、写入数据 modbus_write_bit(modbus_t *ctx, int addr, int status) 功能写入单个线圈状态。参数 ctx指向 Modbus 上下文的指针。addr地址要写入的线圈在 Modbus 地址空间中的位置。status0 表示关闭线圈非零值表示打开线圈。 返回值如果写入成功返回 1如果写入失败返回 -1。 modbus_write_register(modbus_t *ctx, int addr, int value) 功能写入单个保持寄存器的值。参数 ctx指向 Modbus 上下文的指针。addr地址要写入的保持寄存器在 Modbus 地址空间中的位置。value要写入的值一个 16 位的整数。 返回值如果写入成功返回 1如果写入失败返回 -1。 modbus_write_bits(modbus_t *ctx, int addr, int nb, const uint8_t *data) 功能写入多个线圈状态。参数 ctx指向 Modbus 上下文的指针。addr起始地址要写入的第一个线圈在 Modbus 地址空间中的位置。nb要写入的线圈数量。data存储要写入的线圈状态的缓冲区。这个缓冲区中的每个字节表示 8 个线圈的状态0 表示关闭1 表示打开。 返回值如果写入成功返回写入的字节数如果写入失败返回 -1。 modbus_write_registers(modbus_t *ctx, int addr, int nb, const uint16_t *data) 功能写入多个保持寄存器的值。参数 ctx指向 Modbus 上下文的指针。addr起始地址要写入的第一个保持寄存器在 Modbus 地址空间中的位置。nb要写入的寄存器数量。data存储要写入的值的缓冲区。这个缓冲区中的每个元素都是一个 16 位的整数表示要写入的保持寄存器的值。 返回值如果写入成功返回写入的字节数通常是 nb 乘以 2如果写入失败返回 -1。 开发 TCP Server 端 待补充 开发TCP Client 端 待补充
http://www.hkea.cn/news/14489395/

相关文章:

  • 临沂企业建站广州seo工程师
  • 用angular做的网站链接专业建设 验收 网站
  • 江西旅游 网站建设实用又有创意的产品设计
  • 重庆做网站建设公司哪家好免费咨询广东律师事务所
  • 聊城网站制作信息wordpress特定主题
  • 网站运营的工作内容网络规划设计师书籍
  • 头像设计易做图网站秦皇岛开发区
  • 网站 运营 外包 每个月多少钱免费手机网站制作app
  • 网站如何安装dedecms厦门网站建设企业
  • 定制网站建设成本网页访客升级
  • 区域推广网站济南网站建设内容设计
  • 杭州哪里可以做网站推广零基础学网页设计
  • 网站的规划与建设_按时间顺序可以分为哪几个阶段?工业和信息化部
  • 网站积分程序怎么建设上海制作网页宣传
  • 模板建网站怎么做seo怎样在网上做环保设备网站
  • 生态环境工程公司网站建设专业网站建设品牌策划方案
  • 个人信息页面设计漂亮的网站网络服务投诉平台
  • 网站建设在那里接单给个网址谢谢了
  • 建站网站建设网站设计公司网站
  • 信息无障碍 网站建设惠州做网站优化
  • 搜索不到我的网站常用seo站长工具
  • 某网站网站的设计与实现wordpress 粉丝
  • 果洛州wap网站建设公司国外设计素材网站
  • 网站开发指南网站开发与设计实训报告总结
  • 台州网站怎么推广免费推广的手段和方法
  • 上海专业高端网站建设开元棋牌网站怎么做
  • 成品网站灬1688深圳市福田区香蜜湖街道
  • 如何选择佛山网站建设1688黄页网
  • 重庆中国建设银行招聘信息网站景区外文网站建设
  • 永久免费自助建站炫酷手机网站模板