(7)epics之vdct,css,ioc,被控設備整體測試樣例

VDCT 建立一個db文件

新建record

右鍵可以新建一個record,然後調整內部的各種參數

在這裏插入圖片描述

保存上面的建立的db文件爲simulate.db 文件##

在這裏插入圖片描述
生成後的db文件如下:

在這裏插入圖片描述

make一下,將其更新到db文件夾下

在ioc應用的最外一層進行make

在這裏插入圖片描述

查看是否更新到了db文件夾下

在這裏插入圖片描述

更新protocol文件

protocol文件的功能

主要是希望能夠實現兩個功能一個是讀功能,另一個是寫功能。其中getVol 和 getCur 都是從下面被控設備中,通過modbus協議獲取數據。SetVol 和SetCur 的作用則是對被控設備實現寫的功能。

修改protocol 文件

GetVol {
	wait 2; 
#	out $1,0x05 0x03 0x01 0x04,"0.4R","%#<modbus>";
#	in $1,0x05 0x03 0x01 0x04,"%0.4R","%#<modbus>";
	OUT 05 03 01 04 ,"%0.4R", "%#<modbus>";
	IN 05 03 01 04 ,"%0.4R", "%#<modbus>";
}
GetCur {
	wait 2; 
	OUT 05 03 02 04 ,"%0.4R", "%#<modbus>";
	IN 05 03 02 04 ,"%0.4R", "%#<modbus>";
}
SetVol {
	wait 2; 
#	out $1,0x05 0x03 0x01 0x04,"0.4R","%#<modbus>";
#	in $1,0x05 0x03 0x01 0x04,"%0.4R","%#<modbus>";
	OUT 05 05 01 04 ,"%0.4R", "%#<modbus>";
	IN 05 05 01 04 ,"%0.4R", "%#<modbus>";
}
SetCur {
	wait 2; 
	OUT 05 05 02 04 ,"%0.4R", "%#<modbus>";
	IN 05 05 02 04 ,"%0.4R", "%#<modbus>";
}

修改撰寫被控設備的模擬腳本

採用python編寫被控設備的模擬腳本,模擬腳本如下:

import socket
import struct
import crcmod
from  dataservice.datawave_produce.waveproduce import sin_wave,triangle_wave


def crccreate(b,length):
    crc16_func = crcmod.mkCrcFun(0x18005, initCrc=0xFFFF, rev=True, xorOut=0x0000)
    return crc16_func(b[0:length])
def crccheckhole(b,length):
    crc16_func = crcmod.mkCrcFun(0x18005, initCrc=0xFFFF, rev=True, xorOut=0x0000)

    return hex(crc16_func(b[0:length]))==bytesToHex(b[length],b[length+1])
def crccheck(b,length):
    print('傳過來的b,和lenght',b,'   ',length)
    crc16_func = crcmod.mkCrcFun(0x18005, initCrc=0xFFFF, rev=True, xorOut=0x0000)
    return crc16_func(b[0:length]) == bytesToInt(b[length], b[length + 1])

def get_send_msgflowbytes(slave,func,register,length,data):
    if length!=4:
        pass
    else:
        # print('data',data)
        a = struct.pack('!bbbbf', slave, func, register, length, data)
        # print(len(a))
        b=struct.pack('H',crccreate(a[0:8], length=8))
        a=a + b
        # print(a)
    return a


if __name__=='__main__':


    tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#創建套接字
    tcp_server_socket.bind(('192.168.127.201',9011))#綁定本機地址和接收端口
    tcp_server_socket.setsockopt(socket.IPPROTO_TCP,socket.TCP_NODELAY,True)
    print('Waiting connecting')
    tcp_server_socket.listen(1)#監聽()內爲最大監聽值
    client_socket,client_addr= tcp_server_socket.accept()#建立連接(accept(無參數)
    print('Someone has connected to this sever')

    xsin,ysin=sin_wave(0,6,0.1,2,2)
    xtri,ytri=triangle_wave(0,6,0.1,2,2)
    ysin=10*ysin
    ytri=10*ytri

    sinindex=0;
    triindex=0;
    while True:
        b =client_socket.recv(10)
        print('receiving msg:',b)
        if b[1]==0x05:#05 功能碼 表示設定一個寄存器
            slave,func,register,length,datafloat=struct.unpack('!bbbbf',b[0:8]) #解析傳過來的二進制字節流
            print('we are receiving setting command',b,'the value is',datafloat)

            client_socket.send(b)
        elif b[2]==0x01: #正弦波產生函數
            slave,func,register,length=struct.unpack('!bbbb',b[0:4]) #解析傳過來的二進制字節流
            sinindex +=1
            #此處的數據包格式由epics 的protocol文件所確定
            msg = get_send_msgflowbytes(slave, func, register, length, ysin[sinindex])  #構建符合要求的數據包格式
            print('sending msg:',msg)
            # print(b)
            client_socket.send(msg)
            if sinindex==59:
                sinindex=0
        elif b[2]==0x02:#三角波產生函數

            slave,func,register,length=struct.unpack('!bbbb',b[0:4]) #解析傳過來的二進制字節流

            triindex +=1


            #此處的數據包格式由epics 的protocol文件所確定
            msg = get_send_msgflowbytes(slave, func, register, length, ytri[triindex])  #構建符合要求的數據包格式
            print('sending msg:',msg)

            # print(b)

            client_socket.send(msg)

            if triindex==59:
                triindex=0





建立css文件

參考一下css 的入門

https://blog.csdn.net/weixin_42066185/article/details/106530508

添加數據監測部分(數據讀功能)

拖動一個xy-到文件上面

在這裏插入圖片描述

修改xy-屬性監測的pv名稱

在這裏插入圖片描述

數據功能監測(數據讀功能,兩個數據曲線放到一張座標軸上)

添加一個額外的tracer

在這裏插入圖片描述

將被監控的pv_name 填寫到pv value上

在這裏插入圖片描述

監控結果:

在這裏插入圖片描述

添加一個按鈕寫入數據功能(數據寫)

添加一個按鈕功能

拖動一個control 欄目中的一個按鈕到文本中
在這裏插入圖片描述

增加按鈕的一個執行動作

當點擊該按鈕的時候,寫如100.24 到給定的pv的上。
在這裏插入圖片描述

實驗驗證

數據讀功能正常

!

數據寫功能驗證

點擊寫功能按鈕,觀察被控腳本變化,收到
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章