zoukankan      html  css  js  c++  java
  • MODBUS移植的参考文章

    http://www.modbus.org/specs.php

    https://github.com/armink/FreeModbus_Slave-Master-RTT-STM32

    http://www.360doc.com/content/14/0906/09/17350204_407389804.shtml

    http://blog.csdn.net/dldw8816/article/details/50595154

    https://www.cnblogs.com/skl374199080/archive/2013/12/16/3476153.html

    http://blog.csdn.net/arminkztl/article/details/11738395

    从机流程

    /*first:
    ->从机等待串口数据包
    ->接收到数据包触发串口中断-
    ->xMBRTUReceiveFSM()函数
    -->不断接收数据但不保存,不断重置定时器-
    ->直到数据接收完后产生3.5T定时器中断,代表接收完成
    ->中断函数调用xMBRTUTimerT35Expired(void)函数
    ->根据状态RXINIT调用xMBPortEventPost(EV_READY)事件函数加入序列
    ->关闭定时器,设为RXIDLE,返回主程序。
    ->主程序poll根据EVREADY空操作取出事件,返回
    second:
    ->再次接收到串口数据包
    ->进入中断函数xMBRTUReceiveFSM()
    ->根据状态RXIDLE数据存入RTUBUF,状态设为RXRCV,启动定时器
    ->收到下个数据包,存储数据并重置定时器,不断重复直到接收完数据包
    ->收完后产生3.5T定时中断xMBRTUTimerT35Expired()
    ->根据RXRCV发送事件EV_FRAME_RECEIVED,关闭定时器设为RXIDLE,返回主程序poll
    ->根据FRAMERECEIVED调用eMBRTUReceive()处理收到数据的存储指针,然后发送事件EV_EXECUTE
    ->然后返回主程序,继续执行poll,
    ->根据EVEXECUTE,提取功能码,并判断功能码确定功能处理函数指针,并调用该函数
    处理:
    ->调用功能函数解析数据包(长度/地址、寄存器数量)
    ->执行功能函数的回调函数,提取数据。返回poll
    ->执行eMBRTUSend()
    ->TXXMIT,使能串口发送功能
    ->发送中断,调用xMBRTUTransmitFSM( )函数,输出完毕事件设为EV_FRAME_SENT,禁用串口发送,状态改为TXIDLE------à返回poll,根据FRAMESENT取出事件清空队列,一个循环完成
    */

    libmodbus

    rt_thread对其的实现实现:TCP需要开启TCP server,SAL,为避免错误可以屏蔽或让 wiz_setsockopt()直接返回0,注意modbus_mapping_new()几个参数的关系,不然会出现访问未动态分配的内存地址。

    freemodbus:

    rt_thread对其的实现实现

  • 相关阅读:
    Kafka 生产者 自定义分区策略
    同步互斥
    poj 1562 Oil Deposits(dfs)
    poj 2386 Lake Counting(dfs)
    poj 1915 KnightMoves(bfs)
    poj 1664 放苹果(dfs)
    poj 1543 Perfect Cubes (暴搜)
    poj 1166 The Clocks (暴搜)
    poj 3126 Prime Path(bfs)
    处理机调度
  • 原文地址:https://www.cnblogs.com/jieruishu/p/8108231.html
Copyright © 2011-2022 走看看