该实验需保证EPICS系统与实际采集设备在同一局域网下,参考
Vmware centos桥接模式网络设置_艾黄泽的博客-CSDN博客
1 STM32通信协议更改
STM32端的通信协议需与EPICS的proto文件中定义的协议保持一致,原STM32程序与Labview的通信模式为一帧数据包括所有的温度与流量,如何在此基础上采用proto文件进行解析暂时不了解。
所以在STM32中添加与EPICS协议通信的格式,并设置开关按钮对两种通信模式进行切换。
温度流量检测装置测试用IP:192.168.1.11
在STM32中增加与EPICS通信的程序:
STM32与EPICS通信数据解析
流程为:在EPICS通信模式下,STM32接收到一帧EPICS发送过来的数据,通过解析帧头帧尾,若符合通信协议,则判断Tcp_Recv_EPICS[1]的数字,来判断EPICS需要读取的流量或温度序号。
表1 EPICS查询模式下查询码对应变量
Tcp_Recv_EPICS[1] | 0x00 | 0x01 | 0x02 | 0x03 | 0x04 | 0x05 | 0x06 | 0x07 |
发送4字节浮点数 | Flow1 | Flow2 | Flow3 | Flow4 | Flow5 | Flow6 | Flow7 | Flow8 |
Tcp_Recv_EPICS[1] | 0x08 | 0x09 | 0x0A | 0x0B | 0x0C | 0x0D | 0x0E | 0x0F |
发送4字节浮点数 | Tem1 | Tem2 | Tem3 | Tem4 | Tem5 | Tem6 | Tem7 | Tem8 |
2 EPICS端程序编写与界面设计
EPICS中修改对应的flow_tem.db、flow_tem.proto、st.cmd程序:
1. record(ai, "FT_Flow1") {
2. field(DESC, "get Flow1")
3. field(DTYP, "stream")
4. field(INP, "@flow_tem.proto GetFlow1 flow_tem")
5. field(EGU, "L/min")
6. field(LOPR, "5")
7. field(HOPR, "40")
8. field(SCAN, ".1 second")
9. }
10.
11. record(ai, "FT_Flow2") {
12. field(DESC, "get Flow2")
13. field(DTYP, "stream")
14. field(INP, "@flow_tem.proto GetFlow2 flow_tem")
15. field(EGU, "L/min")
16. field(LOPR, "5")
17. field(HOPR, "40")
18. field(SCAN, ".1 second")
19. }
flow_tem.db文件部分代码
1. GetFlow1 {
2. out 0xAA 0x00 0xFF;
3. in 0xAA 0x00 "%R" 0xFF;
4. }
5. GetFlow2 {
6. out 0xAA 0x01 0xFF;
7. in 0xAA 0x01 "%R" 0xFF;
8. }
9. GetFlow3 {
10. out 0xAA 0x02 0xFF;
11. in 0xAA 0x02 "%R" 0xFF;
12. }
13. GetFlow4 {
14. out 0xAA 0x03 0xFF;
15. in 0xAA 0x03 "%R" 0xFF;
flow_tem.proto文件部分代码
st.cmd文件中添加对应的db路径与flow_tem协议IP地址与端口号
在CSS中创建新的OPI,采用曲线控件与文本控件,将控件对应的PV节点设置为flow_tem.db文件中对应的文件命名,数据接收正常:
CSS界面