# Modbus通信
## 任务要求
- 了解Modbus的基本概念

- 熟悉功能码0x01、0x03、0x0f、0x10

- 书写规格书
  · 使用word文档书写

- 书写方案书
	
	· 使用Visio绘制流程图
	· 使用word文档书写
	
- 书写测试大纲
  · 书写测试大纲以保证自身产品的正确性、稳定性
  · 使用word文档书写

- 实现ModbusRTU主站（触摸屏）
  
  · 能够正常连接
· 能够判断连接断开
  · 能够按要求生成请求帧
  · 能够正确解析应答帧，并做相应处理
  · 能够进行超时处理
  · 拥有美观易操作的人机界面
  
- 实现ModbusRTU从站（PLC）
	
	· 能够正常连接
	· 能够判断连接断开
	· 能够正确解析请求帧
	· 对于正确请求帧给出正确应答帧
	· 对于错误请求帧给出错误应答帧或按规格给出相应的处理

附加功能：
- 如果需要读取0x10000位置的寄存器该如何处理？
- 如果需要读取所有单数个寄存器，如何提高读取效率？
- 如果需要获取通信历史该如何处理？
- 如果从机数据需要断电不丢失该怎么处理？
- 提高人机交互的美观性及易用性。

注：
- 该任务需要基于ucos移植实现
- Modbus学习需要书写相关学习笔记
- 线圈和寄存器范围都是0~0x270F
- 要求方案书有明确的层级结构
- 最终实现代码需要与方案书相一致
- 代码书写需按照给定的代码规范完成
- 对于解析部分需要做对应的单元测试
- 代码管理空间为：``http://gitea.xinje.cc/TrainCamp_姓名全拼_Modbus.git``
- 目录结构如下图所示：
TrainCamp_姓名全拼_modbus
|---iar
|   |---settings
|   |---XXX.dep
|   |---XXX.ewd
|   |---XXX.ewp
|   |---XXX.eww
|   |---XXX.icf
|   +---startup_stm32xxx.s
|---app
|   |---main.h
|   +---main.c
|---cmsis
|   |---core_cm3.h
|   |   .
|   |   .
|   |   .
|   +---tz_context.h
|---drivers
|   |---inc
|   |   +---stm32f103_gpio.h
|   +---src
|       +---stm32f103_gpio.h
|---modbus
+---.gitignore

## 任务器材
|    器材    |   数量    |
| ---------- | --------- |
| XDM-60T4-E/XDM-60T10-E | 1台     |
| ST-LINK	 | 1个       |
| 电源线     | 1根       |
| USB-COM    | 1个       |
| XVP线      | 2根	|
| TG765-MT | 1台	|

## XDM-60T4-E硬件信息

- 芯片型号： STM32F407IG ，晶振12MHz。
- 引脚信息

| 芯片引脚  | 实际作用 |
| --------- | -------- |
| I0        | PH10     |
| I1        | PH11     |
| I2        | PG8      |
| I3        | PB4      |
| I4        | PB5      |
| I5        | PG12     |
| I6        | PB6      |
| I7        | PB7      |
| I10       | PF10     |
| I11       | PA15     |
| I12       | PB3      |
| I13       | PA14     |
| I14       | PI4      |
| I15       | PI5      |
| I16       | PI6      |
| I17       | PI7      |
| I20       | PE2      |
| Q0        | PF6      |
| Q1        | PF8      |
| Q2        | PF7      |
| Q3        | PF9      |
| Q4        | PI8      |
| Q5        | PE6      |
| Q6        | PE5      |
| Q7        | PE4      |
| Q10       | PG7      |
| Q11       | PG6      |
| Q12       | PH9      |
| Q13       | PH8      |
| Q14       | PH7      |
| Q15       | PH6      |
| Q16       | PF11     |
| Q17       | PB0      |
| Q20       | PH5      |
| USART1_TX | PA9      |
| USART1_RX | PA10     |

## XDM-60T10-E硬件信息

- 芯片型号：STM32F407ZG，晶振12MHz。
- 引脚信息

| 芯片引脚  | 实际作用 |
| --------- | -------- |
| I0        | PA0      |
| I1        | PA1      |
| I2        | PG8      |
| I3        | PB4      |
| I4        | PB5      |
| I5        | PG12     |
| I6        | PB6      |
| I7        | PB7      |
| I10       | PF10     |
| I11       | PA15     |
| I12       | PB3      |
| I13       | PA14     |
| Q0        | PF6      |
| Q1        | PF8      |
| Q2        | PF7      |
| Q3        | PF9      |
| USART1_TX | PA9      |
| USART1_RX | PA10     |

