X-418 Ethernet ADC
X-418™ Web-Enabled, Multi-Function 8-Channel Analog Input Module
In diesem Beispiel wird er zum Auslesen von Vakuumsensoren verwendet und daher neu kalibriert.
Das X-418™ ist ein voll ausgestattetes Ethernet-Modul mit einem analogen Datenerfassungssystem mit 8 Kanälen und 16 Bit. Konfigurieren Sie jeden Kanal als Single-Ended- oder Differenzeingang.
Überwachen und protokollieren Sie die an den Analogeingängen angeschlossenen Sensoren über die intuitive Web-Oberfläche des X-418. Es kann über jedes TCP/IP-Netzwerk gesteuert und/oder überwacht werden, einschließlich privater Netzwerke, IP-basierter industrieller Steuerungsnetzwerke und dem Internet.
https://www.controlbyweb.com/x418/
https://www.controlbyweb.com/x400/x-400_users_manual.pdf
In der Schnittstelle des X-418 muss Modbus eingeschaltet sein.
Dieses Beispiel ist für einen DAC, bei dem der erste Kanal ausgelesen wird. Sie können gerne weitere Kanäle hinzufügen.
Sie benötigen eine EPICS-Basis sowie Aysn und das Modbus-Modul. https://github.com/epics-modules/modbus
Zuerst müssen Sie einen neuen IOC erstellen. Bearbeiten Sie dann Ihre st.cmd und fügen Sie diese Zeilen hinzu.
#drvAsynIPPortConfigure(const char *portName,
# const char *hostInfo,
# unsigned int priority,
# int noAutoConnect,
# int noProcessEos);
drvAsynIPPortConfigure("VAC0","xxx.xxx.xxx.xxx:502",0,0,1)
#drvAsynIPPortConfigure("VAC1","xxx.xxx.xxx.xxx:502",0,0,1)
#modbusInterposeConfig(const char *portName,
# modbusLinkType linkType,
# int timeoutMsec,
# int writeDelayMsec)
modbusInterposeConfig("VAC0",0,2000,0)
#modbusInterposeConfig("VAC1",0,2000,0)
#read Modbus value
#drvModbusAsynConfigure(portName, tcpPortName, slaveAddress, modbusFunction, modbusStartAddress, modbusLength, dataType, pollMsec, plcType)
drvModbusAsynConfigure("VAC0_1", "VAC0", 1, 3, 0x00, 2, 7, 100, "vac0")
#drvModbusAsynConfigure("VAC0_2", "VAC0", 1, 3, 0x02, 2, 7, 100, "vac0")
#drvModbusAsynConfigure("VAC0_3", "VAC0", 1, 3, 0x04, 2, 7, 100, "vac0")
#drvModbusAsynConfigure("VAC0_4", "VAC0", 1, 3, 0x06, 2, 7, 100, "vac0")
#drvModbusAsynConfigure("VAC1_1", "VAC1", 1, 3, 0x00, 2, 7, 100, "vac1")
## Load record instances
#dbLoadRecords("db/xxx.db","user=epics")
dbLoadRecords("db/modbus.db","P=AEI")
Dann müssen Sie das Makefile im src-Ordner bearbeiten.
hanvac_DBD += asyn.dbd
hanvac_DBD += modbusApp.dbd
hanvac_LIBS += asyn
hanvac_LIBS += modbus
Im db-Ordner müssen Sie auch das Makefile bearbeiten.
Erstellen Sie am Ende die modbus.db mit diesem Inhalt:
record(ai, "$(P):VAC0_1_RAW") {
field(DTYP,"asynFloat64")
field(INP,"@asyn(VAC0_1)FLOAT32_LE")
field(SCAN,"1 second")
}
# THERMOVAC Transmitter TTR 911 N
# cali V_out = log10 (P_mbar) x 1.286 + 6.143
record(calc, "$(P):VAC0_1") {
field(DESC, "Presure")
field(SCAN,"1 second")
field(CALC, "10^((A-6.143)/1.286)")
field(INPA, "$(P):VAC0_1_RAW.VAL")
field(EGU, "mbar")
}