Adds working driver, working modbus program, and HMI

This commit is contained in:
Patrick McDonagh
2018-01-30 10:08:21 -06:00
parent 9e712d5377
commit 6c5e60f388
82 changed files with 4530 additions and 1007 deletions

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<DevicePreferences xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Micro800ConnectionPath>PATRICKMCDO8E0A!HenryPump\10.20.4.40</Micro800ConnectionPath>
</DevicePreferences>

File diff suppressed because it is too large Load Diff

View File

@@ -1,2 +1,5 @@
FLOWMETERMB
WATCHDOG
WORDSTOREAL
FLOWRATEUNITS
FLOWTOTALUNITS

View File

@@ -1,20 +1,52 @@
MODBUSTIMER.IN@FLOWMETERMB,__TMPB__TON__IN,BOOL
MODBUSTIMER.PT@FLOWMETERMB,MODBUSSCANRATE,TIME
MBS_FLOWTOTALPOS_MSG.IN@FLOWMETERMB,__TMPB__MSG_MODBUS__IN,BOOL
MBS_FLOWTOTALPOS_MSG.CANCEL@FLOWMETERMB,MBS_CANCEL@FLOWMETERMB,BOOL
MBS_FLOWTOTALPOS_MSG.LOCALCFG@FLOWMETERMB,<NOT USED>,MODBUSLOCPARA
MBS_FLOWTOTALPOS_MSG.TARGETCFG@FLOWMETERMB,<NOT USED>,MODBUSTARPARA
MBS_FLOWTOTALPOS_MSG.LOCALADDR@FLOWMETERMB,<NOT USED>,MODBUSLOCADDR
MBS_FLOWTOTALPOS_MSG.__ADI_LOCALADDR@FLOWMETERMB,<NOT USED>,UINT
MBS_FLOWTOTALNEG_MSG.IN@FLOWMETERMB,__TMPB__MSG_MODBUS__IN,BOOL
MBS_FLOWTOTALNEG_MSG.CANCEL@FLOWMETERMB,MBS_CANCEL@FLOWMETERMB,BOOL
MBS_FLOWTOTALNEG_MSG.LOCALCFG@FLOWMETERMB,<NOT USED>,MODBUSLOCPARA
MBS_FLOWTOTALNEG_MSG.TARGETCFG@FLOWMETERMB,<NOT USED>,MODBUSTARPARA
MBS_FLOWTOTALNEG_MSG.LOCALADDR@FLOWMETERMB,<NOT USED>,MODBUSLOCADDR
MBS_FLOWTOTALNEG_MSG.__ADI_LOCALADDR@FLOWMETERMB,<NOT USED>,UINT
MBS_FLOWGROSS_MSG.IN@FLOWMETERMB,__TMPB__MSG_MODBUS__IN,BOOL
MBS_FLOWGROSS_MSG.CANCEL@FLOWMETERMB,MBS_CANCEL@FLOWMETERMB,BOOL
MBS_FLOWGROSS_MSG.LOCALCFG@FLOWMETERMB,<NOT USED>,MODBUSLOCPARA
MBS_FLOWGROSS_MSG.TARGETCFG@FLOWMETERMB,<NOT USED>,MODBUSTARPARA
MBS_FLOWGROSS_MSG.LOCALADDR@FLOWMETERMB,<NOT USED>,MODBUSLOCADDR
MBS_FLOWGROSS_MSG.__ADI_LOCALADDR@FLOWMETERMB,<NOT USED>,UINT
WAIT_TO_RESET_TON.IN@FLOWMETERMB,CMD_CLEARRESETTOTALIZER@FLOWMETERMB,BOOL
WAIT_TO_RESET_TON.PT@FLOWMETERMB,PAR_TIMETOWAITTOCLEARRESETTOTALIZER@FLOWMETERMB,TIME
MBS_FLOWRATE_MSG.IN@FLOWMETERMB,__TMPB__MSG_MODBUS__IN,BOOL
MBS_FLOWRATE_MSG.CANCEL@FLOWMETERMB,MBS_CANCEL@FLOWMETERMB,BOOL
MBS_FLOWRATE_MSG.LOCALCFG@FLOWMETERMB,<NOT USED>,MODBUSLOCPARA
MBS_FLOWRATE_MSG.TARGETCFG@FLOWMETERMB,<NOT USED>,MODBUSTARPARA
MBS_FLOWRATE_MSG.LOCALADDR@FLOWMETERMB,<NOT USED>,MODBUSLOCADDR
MBS_FLOWRATE_MSG.__ADI_LOCALADDR@FLOWMETERMB,<NOT USED>,UINT
MBS_FLOWTOTALIZERA_MSG.IN@FLOWMETERMB,__TMPB__MSG_MODBUS__IN,BOOL
MBS_FLOWTOTALIZERA_MSG.CANCEL@FLOWMETERMB,MBS_CANCEL@FLOWMETERMB,BOOL
MBS_FLOWTOTALIZERA_MSG.LOCALCFG@FLOWMETERMB,<NOT USED>,MODBUSLOCPARA
MBS_FLOWTOTALIZERA_MSG.TARGETCFG@FLOWMETERMB,<NOT USED>,MODBUSTARPARA
MBS_FLOWTOTALIZERA_MSG.LOCALADDR@FLOWMETERMB,<NOT USED>,MODBUSLOCADDR
MBS_FLOWTOTALIZERA_MSG.__ADI_LOCALADDR@FLOWMETERMB,<NOT USED>,UINT
MBS_FLOWTOTALIZERB_MSG.IN@FLOWMETERMB,__TMPB__MSG_MODBUS__IN,BOOL
MBS_FLOWTOTALIZERB_MSG.CANCEL@FLOWMETERMB,MBS_CANCEL@FLOWMETERMB,BOOL
MBS_FLOWTOTALIZERB_MSG.LOCALCFG@FLOWMETERMB,<NOT USED>,MODBUSLOCPARA
MBS_FLOWTOTALIZERB_MSG.TARGETCFG@FLOWMETERMB,<NOT USED>,MODBUSTARPARA
MBS_FLOWTOTALIZERB_MSG.LOCALADDR@FLOWMETERMB,<NOT USED>,MODBUSLOCADDR
MBS_FLOWTOTALIZERB_MSG.__ADI_LOCALADDR@FLOWMETERMB,<NOT USED>,UINT
MBS_FLOWTOTALIZERC_MSG.IN@FLOWMETERMB,__TMPB__MSG_MODBUS__IN,BOOL
MBS_FLOWTOTALIZERC_MSG.CANCEL@FLOWMETERMB,MBS_CANCEL@FLOWMETERMB,BOOL
MBS_FLOWTOTALIZERC_MSG.LOCALCFG@FLOWMETERMB,<NOT USED>,MODBUSLOCPARA
MBS_FLOWTOTALIZERC_MSG.TARGETCFG@FLOWMETERMB,<NOT USED>,MODBUSTARPARA
MBS_FLOWTOTALIZERC_MSG.LOCALADDR@FLOWMETERMB,<NOT USED>,MODBUSLOCADDR
MBS_FLOWTOTALIZERC_MSG.__ADI_LOCALADDR@FLOWMETERMB,<NOT USED>,UINT
MBS_STATUS_MSG.IN@FLOWMETERMB,__TMPB__MSG_MODBUS__IN,BOOL
MBS_STATUS_MSG.CANCEL@FLOWMETERMB,MBS_CANCEL@FLOWMETERMB,BOOL
MBS_STATUS_MSG.LOCALCFG@FLOWMETERMB,<NOT USED>,MODBUSLOCPARA
MBS_STATUS_MSG.TARGETCFG@FLOWMETERMB,<NOT USED>,MODBUSTARPARA
MBS_STATUS_MSG.LOCALADDR@FLOWMETERMB,<NOT USED>,MODBUSLOCADDR
MBS_STATUS_MSG.__ADI_LOCALADDR@FLOWMETERMB,<NOT USED>,UINT
MBS_RESETTOTALIZER_MSG.IN@FLOWMETERMB,CMD_RESETTOTALIZER@FLOWMETERMB,BOOL
MBS_RESETTOTALIZER_MSG.CANCEL@FLOWMETERMB,MBS_CANCEL@FLOWMETERMB,BOOL
MBS_RESETTOTALIZER_MSG.LOCALCFG@FLOWMETERMB,<NOT USED>,MODBUSLOCPARA
MBS_RESETTOTALIZER_MSG.TARGETCFG@FLOWMETERMB,<NOT USED>,MODBUSTARPARA
MBS_RESETTOTALIZER_MSG.LOCALADDR@FLOWMETERMB,<NOT USED>,MODBUSLOCADDR
MBS_RESETTOTALIZER_MSG.__ADI_LOCALADDR@FLOWMETERMB,<NOT USED>,UINT
MBS_CLEARRESETTOTALIZER_MSG.IN@FLOWMETERMB,__TMPB__MSG_MODBUS__IN,BOOL
MBS_CLEARRESETTOTALIZER_MSG.CANCEL@FLOWMETERMB,MBS_CANCEL@FLOWMETERMB,BOOL
MBS_CLEARRESETTOTALIZER_MSG.LOCALCFG@FLOWMETERMB,<NOT USED>,MODBUSLOCPARA
MBS_CLEARRESETTOTALIZER_MSG.TARGETCFG@FLOWMETERMB,<NOT USED>,MODBUSTARPARA
MBS_CLEARRESETTOTALIZER_MSG.LOCALADDR@FLOWMETERMB,<NOT USED>,MODBUSLOCADDR
MBS_CLEARRESETTOTALIZER_MSG.__ADI_LOCALADDR@FLOWMETERMB,<NOT USED>,UINT
MBS_UNITS_MSG.IN@FLOWMETERMB,__TMPB__MSG_MODBUS__IN,BOOL
MBS_UNITS_MSG.CANCEL@FLOWMETERMB,MBS_CANCEL@FLOWMETERMB,BOOL
MBS_UNITS_MSG.LOCALCFG@FLOWMETERMB,<NOT USED>,MODBUSLOCPARA
MBS_UNITS_MSG.TARGETCFG@FLOWMETERMB,<NOT USED>,MODBUSTARPARA
MBS_UNITS_MSG.LOCALADDR@FLOWMETERMB,<NOT USED>,MODBUSLOCADDR
MBS_UNITS_MSG.__ADI_LOCALADDR@FLOWMETERMB,<NOT USED>,UINT

View File

@@ -1 +1 @@
FLOWMETERMB(147):F,WORDSTOREAL(148);
FLOWMETERMB(147):F,WORDSTOREAL(148);F,RIGHT();F,MLEN();F,FLOWRATEUNITS(150);F,FLOWTOTALUNITS(151);

View File

@@ -2,105 +2,770 @@ __TMPB1 := MODBUSTIMER [ __CDINT00000004 ]
__TMPB1 := _NOT __TMPB1
__TMPB__TON__IN := __TMPB1
__FBL_RET := _PUSHCALLFB TON MODBUSTIMER
MBS_FLOWTOTALPOS_TARGETCFG [ __DINT_NULL ] := CFG_FLOWTOTALPOS_REGISTER
MBS_FLOWTOTALPOS_TARGETCFG [ __CDINT00000004 ] := CFG_FLOWMETER_MODBUSNODE
MBS_FLOWTOTALPOS_LOCALCFG [ __DINT_NULL ] := __CUINT00000002
MBS_FLOWTOTALPOS_LOCALCFG [ __CDINT00000003 ] := READ_CMD
MBS_FLOWTOTALPOS_LOCALCFG [ __CDINT00000002 ] := MBS_TRIGGERTYPE
MBS_FLOWTOTALPOS_LOCALCFG [ __CDINT00000004 ] := __CUINT00000002
MBS_FLOWRATE_TARGETCFG [ __DINT_NULL ] := CFG_FLOWRATE_REGISTER
MBS_FLOWRATE_TARGETCFG [ __CDINT00000004 ] := CFG_FLOWMETER_MODBUSNODE
MBS_FLOWRATE_LOCALCFG [ __DINT_NULL ] := __CUINT00000002
MBS_FLOWRATE_LOCALCFG [ __CDINT00000003 ] := READ_CMD
MBS_FLOWRATE_LOCALCFG [ __CDINT00000002 ] := MBS_TRIGGERTYPE
MBS_FLOWRATE_LOCALCFG [ __CDINT00000004 ] := __CUINT00000002
__TMPB1 := MODBUSTIMER [ __CDINT00000004 ]
__TMPV1 := MBS_FLOWTOTALPOS_LOCALCFG [ __DINT_NULL ]
__TMPV2 := MBS_FLOWTOTALPOS_TARGETCFG [ __DINT_NULL ]
__TMPV3 := MBS_FLOWTOTALPOS_DATA [ __DINT_NULL ]
__TMPV1 := MBS_FLOWRATE_LOCALCFG [ __DINT_NULL ]
__TMPV2 := MBS_FLOWRATE_TARGETCFG [ __DINT_NULL ]
__TMPV3 := MBS_FLOWRATE_DATA [ __DINT_NULL ]
__TMPB__MSG_MODBUS__IN := __TMPB1
__TMPV4 := MBS_FLOWTOTALPOS_MSG [ __CDINT00000004 ]
__TMPV4 := MBS_FLOWRATE_MSG [ __CDINT00000004 ]
__TMPV4 := __TMPV1
__TMPV5 := MBS_FLOWTOTALPOS_MSG [ __CDINT00000006 ]
__TMPV5 := MBS_FLOWRATE_MSG [ __CDINT00000006 ]
__TMPV5 := __TMPV2
__TMPV6 := MBS_FLOWTOTALPOS_MSG [ __CDINT00000008 ]
__TMPV6 := MBS_FLOWRATE_MSG [ __CDINT00000008 ]
__TMPV6 := __TMPV3
MBS_FLOWTOTALPOS_MSG [ __CDINT0000000A ] := __ADI__FLOWMETERMB_0_0
__FBL_RET := _PUSHCALLFB MSG_MODBUS MBS_FLOWTOTALPOS_MSG
__TMPB1 := MBS_FLOWTOTALPOS_MSG [ __CDINT0000000C ]
MBS_FLOWRATE_MSG [ __CDINT0000000A ] := __ADI__FLOWMETERMB_0_0
__FBL_RET := _PUSHCALLFB MSG_MODBUS MBS_FLOWRATE_MSG
__TMPB1 := MBS_FLOWRATE_MSG [ __CDINT0000000C ]
_IF _NOT __TMPB1 _GOTO __LAB1
__TMPI1 := __CDINT00000002 - __CDINT00000001
__TMPI1 := __CDINT00000001 - __CDINT00000001
__TMPI1 := __TMPI1 * __CDINT00000002
__TMPUIN1 := MBS_FLOWTOTALPOS_DATA [ __TMPI1 ]
__TMPI2 := __CDINT00000001 - __CDINT00000001
__TMPUIN1 := MBS_FLOWRATE_DATA [ __TMPI1 ]
__TMPI2 := __CDINT00000002 - __CDINT00000001
__TMPI2 := __TMPI2 * __CDINT00000002
__TMPUIN2 := MBS_FLOWTOTALPOS_DATA [ __TMPI2 ]
__TMPUIN2 := MBS_FLOWRATE_DATA [ __TMPI2 ]
_PUSH_PAR __TMPUIN1
_PUSH_PAR __TMPUIN2
__TMPR1 := _CALL WORDSTOREAL
VAL_FLOWTOTALPOS := __TMPR1
VAL_FLOWRATE := __TMPR1
_GOTO __LAB2
__LAB1 :
__LAB2 :
MBS_FLOWTOTALNEG_TARGETCFG [ __DINT_NULL ] := CFG_FLOWTOTALNEG_REGISTER
MBS_FLOWTOTALNEG_TARGETCFG [ __CDINT00000004 ] := CFG_FLOWMETER_MODBUSNODE
MBS_FLOWTOTALNEG_LOCALCFG [ __DINT_NULL ] := __CUINT00000002
MBS_FLOWTOTALNEG_LOCALCFG [ __CDINT00000003 ] := READ_CMD
MBS_FLOWTOTALNEG_LOCALCFG [ __CDINT00000002 ] := MBS_TRIGGERTYPE
MBS_FLOWTOTALNEG_LOCALCFG [ __CDINT00000004 ] := __CUINT00000002
MBS_FLOWTOTALIZERA_TARGETCFG [ __DINT_NULL ] := CFG_FLOWTOTALIZERA_REGISTER
MBS_FLOWTOTALIZERA_TARGETCFG [ __CDINT00000004 ] := CFG_FLOWMETER_MODBUSNODE
MBS_FLOWTOTALIZERA_LOCALCFG [ __DINT_NULL ] := __CUINT00000002
MBS_FLOWTOTALIZERA_LOCALCFG [ __CDINT00000003 ] := READ_CMD
MBS_FLOWTOTALIZERA_LOCALCFG [ __CDINT00000002 ] := MBS_TRIGGERTYPE
MBS_FLOWTOTALIZERA_LOCALCFG [ __CDINT00000004 ] := __CUINT00000002
__TMPB1 := MODBUSTIMER [ __CDINT00000004 ]
__TMPV1 := MBS_FLOWTOTALNEG_LOCALCFG [ __DINT_NULL ]
__TMPV2 := MBS_FLOWTOTALNEG_TARGETCFG [ __DINT_NULL ]
__TMPV3 := MBS_FLOWTOTALNEG_DATA [ __DINT_NULL ]
__TMPV1 := MBS_FLOWTOTALIZERA_LOCALCFG [ __DINT_NULL ]
__TMPV2 := MBS_FLOWTOTALIZERA_TARGETCFG [ __DINT_NULL ]
__TMPV3 := MBS_FLOWTOTALIZERA_DATA [ __DINT_NULL ]
__TMPB__MSG_MODBUS__IN := __TMPB1
__TMPV4 := MBS_FLOWTOTALNEG_MSG [ __CDINT00000004 ]
__TMPV4 := MBS_FLOWTOTALIZERA_MSG [ __CDINT00000004 ]
__TMPV4 := __TMPV1
__TMPV5 := MBS_FLOWTOTALNEG_MSG [ __CDINT00000006 ]
__TMPV5 := MBS_FLOWTOTALIZERA_MSG [ __CDINT00000006 ]
__TMPV5 := __TMPV2
__TMPV6 := MBS_FLOWTOTALNEG_MSG [ __CDINT00000008 ]
__TMPV6 := MBS_FLOWTOTALIZERA_MSG [ __CDINT00000008 ]
__TMPV6 := __TMPV3
MBS_FLOWTOTALNEG_MSG [ __CDINT0000000A ] := __ADI__FLOWMETERMB_0_1
__FBL_RET := _PUSHCALLFB MSG_MODBUS MBS_FLOWTOTALNEG_MSG
__TMPB1 := MBS_FLOWTOTALNEG_MSG [ __CDINT0000000C ]
MBS_FLOWTOTALIZERA_MSG [ __CDINT0000000A ] := __ADI__FLOWMETERMB_0_1
__FBL_RET := _PUSHCALLFB MSG_MODBUS MBS_FLOWTOTALIZERA_MSG
__TMPB1 := MBS_FLOWTOTALIZERA_MSG [ __CDINT0000000C ]
_IF _NOT __TMPB1 _GOTO __LAB3
__TMPI1 := __CDINT00000002 - __CDINT00000001
__TMPI1 := __CDINT00000001 - __CDINT00000001
__TMPI1 := __TMPI1 * __CDINT00000002
__TMPUIN1 := MBS_FLOWTOTALNEG_DATA [ __TMPI1 ]
__TMPI2 := __CDINT00000001 - __CDINT00000001
__TMPUIN1 := MBS_FLOWTOTALIZERA_DATA [ __TMPI1 ]
__TMPI2 := __CDINT00000002 - __CDINT00000001
__TMPI2 := __TMPI2 * __CDINT00000002
__TMPUIN2 := MBS_FLOWTOTALNEG_DATA [ __TMPI2 ]
__TMPUIN2 := MBS_FLOWTOTALIZERA_DATA [ __TMPI2 ]
_PUSH_PAR __TMPUIN1
_PUSH_PAR __TMPUIN2
__TMPR1 := _CALL WORDSTOREAL
VAL_FLOWTOTALNEG := __TMPR1
VAL_FLOWTOTALIZERA := __TMPR1
_GOTO __LAB4
__LAB3 :
__LAB4 :
MBS_FLOWGROSS_TARGETCFG [ __DINT_NULL ] := CFG_FLOWGROSS_REGISTER
MBS_FLOWGROSS_TARGETCFG [ __CDINT00000004 ] := CFG_FLOWMETER_MODBUSNODE
MBS_FLOWGROSS_LOCALCFG [ __DINT_NULL ] := __CUINT00000002
MBS_FLOWGROSS_LOCALCFG [ __CDINT00000003 ] := READ_CMD
MBS_FLOWGROSS_LOCALCFG [ __CDINT00000002 ] := MBS_TRIGGERTYPE
MBS_FLOWGROSS_LOCALCFG [ __CDINT00000004 ] := __CUINT00000002
MBS_FLOWTOTALIZERB_TARGETCFG [ __DINT_NULL ] := CFG_FLOWTOTALIZERB_REGISTER
MBS_FLOWTOTALIZERB_TARGETCFG [ __CDINT00000004 ] := CFG_FLOWMETER_MODBUSNODE
MBS_FLOWTOTALIZERB_LOCALCFG [ __DINT_NULL ] := __CUINT00000002
MBS_FLOWTOTALIZERB_LOCALCFG [ __CDINT00000003 ] := READ_CMD
MBS_FLOWTOTALIZERB_LOCALCFG [ __CDINT00000002 ] := MBS_TRIGGERTYPE
MBS_FLOWTOTALIZERB_LOCALCFG [ __CDINT00000004 ] := __CUINT00000002
__TMPB1 := MODBUSTIMER [ __CDINT00000004 ]
__TMPV1 := MBS_FLOWGROSS_LOCALCFG [ __DINT_NULL ]
__TMPV2 := MBS_FLOWGROSS_TARGETCFG [ __DINT_NULL ]
__TMPV3 := MBS_FLOWGROSS_DATA [ __DINT_NULL ]
__TMPV1 := MBS_FLOWTOTALIZERB_LOCALCFG [ __DINT_NULL ]
__TMPV2 := MBS_FLOWTOTALIZERB_TARGETCFG [ __DINT_NULL ]
__TMPV3 := MBS_FLOWTOTALIZERB_DATA [ __DINT_NULL ]
__TMPB__MSG_MODBUS__IN := __TMPB1
__TMPV4 := MBS_FLOWGROSS_MSG [ __CDINT00000004 ]
__TMPV4 := MBS_FLOWTOTALIZERB_MSG [ __CDINT00000004 ]
__TMPV4 := __TMPV1
__TMPV5 := MBS_FLOWGROSS_MSG [ __CDINT00000006 ]
__TMPV5 := MBS_FLOWTOTALIZERB_MSG [ __CDINT00000006 ]
__TMPV5 := __TMPV2
__TMPV6 := MBS_FLOWGROSS_MSG [ __CDINT00000008 ]
__TMPV6 := MBS_FLOWTOTALIZERB_MSG [ __CDINT00000008 ]
__TMPV6 := __TMPV3
MBS_FLOWGROSS_MSG [ __CDINT0000000A ] := __ADI__FLOWMETERMB_0_2
__FBL_RET := _PUSHCALLFB MSG_MODBUS MBS_FLOWGROSS_MSG
__TMPB1 := MBS_FLOWGROSS_MSG [ __CDINT0000000C ]
MBS_FLOWTOTALIZERB_MSG [ __CDINT0000000A ] := __ADI__FLOWMETERMB_0_2
__FBL_RET := _PUSHCALLFB MSG_MODBUS MBS_FLOWTOTALIZERB_MSG
__TMPB1 := MBS_FLOWTOTALIZERB_MSG [ __CDINT0000000C ]
_IF _NOT __TMPB1 _GOTO __LAB5
__TMPI1 := __CDINT00000002 - __CDINT00000001
__TMPI1 := __CDINT00000001 - __CDINT00000001
__TMPI1 := __TMPI1 * __CDINT00000002
__TMPUIN1 := MBS_FLOWGROSS_DATA [ __TMPI1 ]
__TMPI2 := __CDINT00000001 - __CDINT00000001
__TMPUIN1 := MBS_FLOWTOTALIZERB_DATA [ __TMPI1 ]
__TMPI2 := __CDINT00000002 - __CDINT00000001
__TMPI2 := __TMPI2 * __CDINT00000002
__TMPUIN2 := MBS_FLOWGROSS_DATA [ __TMPI2 ]
__TMPUIN2 := MBS_FLOWTOTALIZERB_DATA [ __TMPI2 ]
_PUSH_PAR __TMPUIN1
_PUSH_PAR __TMPUIN2
__TMPR1 := _CALL WORDSTOREAL
VAL_FLOWGROSS := __TMPR1
VAL_FLOWTOTALIZERB := __TMPR1
_GOTO __LAB6
__LAB5 :
__LAB6 :
MBS_FLOWTOTALIZERC_TARGETCFG [ __DINT_NULL ] := CFG_FLOWTOTALIZERC_REGISTER
MBS_FLOWTOTALIZERC_TARGETCFG [ __CDINT00000004 ] := CFG_FLOWMETER_MODBUSNODE
MBS_FLOWTOTALIZERC_LOCALCFG [ __DINT_NULL ] := __CUINT00000002
MBS_FLOWTOTALIZERC_LOCALCFG [ __CDINT00000003 ] := READ_CMD
MBS_FLOWTOTALIZERC_LOCALCFG [ __CDINT00000002 ] := MBS_TRIGGERTYPE
MBS_FLOWTOTALIZERC_LOCALCFG [ __CDINT00000004 ] := __CUINT00000002
__TMPB1 := MODBUSTIMER [ __CDINT00000004 ]
__TMPV1 := MBS_FLOWTOTALIZERC_LOCALCFG [ __DINT_NULL ]
__TMPV2 := MBS_FLOWTOTALIZERC_TARGETCFG [ __DINT_NULL ]
__TMPV3 := MBS_FLOWTOTALIZERC_DATA [ __DINT_NULL ]
__TMPB__MSG_MODBUS__IN := __TMPB1
__TMPV4 := MBS_FLOWTOTALIZERC_MSG [ __CDINT00000004 ]
__TMPV4 := __TMPV1
__TMPV5 := MBS_FLOWTOTALIZERC_MSG [ __CDINT00000006 ]
__TMPV5 := __TMPV2
__TMPV6 := MBS_FLOWTOTALIZERC_MSG [ __CDINT00000008 ]
__TMPV6 := __TMPV3
MBS_FLOWTOTALIZERC_MSG [ __CDINT0000000A ] := __ADI__FLOWMETERMB_0_3
__FBL_RET := _PUSHCALLFB MSG_MODBUS MBS_FLOWTOTALIZERC_MSG
__TMPB1 := MBS_FLOWTOTALIZERC_MSG [ __CDINT0000000C ]
_IF _NOT __TMPB1 _GOTO __LAB7
__TMPI1 := __CDINT00000001 - __CDINT00000001
__TMPI1 := __TMPI1 * __CDINT00000002
__TMPUIN1 := MBS_FLOWTOTALIZERC_DATA [ __TMPI1 ]
__TMPI2 := __CDINT00000002 - __CDINT00000001
__TMPI2 := __TMPI2 * __CDINT00000002
__TMPUIN2 := MBS_FLOWTOTALIZERC_DATA [ __TMPI2 ]
_PUSH_PAR __TMPUIN1
_PUSH_PAR __TMPUIN2
__TMPR1 := _CALL WORDSTOREAL
VAL_FLOWTOTALIZERC := __TMPR1
_GOTO __LAB8
__LAB7 :
__LAB8 :
MBS_STATUS_TARGETCFG [ __DINT_NULL ] := CFG_STATUS_REGISTER
MBS_STATUS_TARGETCFG [ __CDINT00000004 ] := CFG_FLOWMETER_MODBUSNODE
MBS_STATUS_LOCALCFG [ __DINT_NULL ] := __CUINT00000002
MBS_STATUS_LOCALCFG [ __CDINT00000003 ] := READ_CMD
MBS_STATUS_LOCALCFG [ __CDINT00000002 ] := MBS_TRIGGERTYPE
MBS_STATUS_LOCALCFG [ __CDINT00000004 ] := __CUINT00000003
__TMPB1 := MODBUSTIMER [ __CDINT00000004 ]
__TMPV1 := MBS_STATUS_LOCALCFG [ __DINT_NULL ]
__TMPV2 := MBS_STATUS_TARGETCFG [ __DINT_NULL ]
__TMPV3 := MBS_STATUS_DATA [ __DINT_NULL ]
__TMPB__MSG_MODBUS__IN := __TMPB1
__TMPV4 := MBS_STATUS_MSG [ __CDINT00000004 ]
__TMPV4 := __TMPV1
__TMPV5 := MBS_STATUS_MSG [ __CDINT00000006 ]
__TMPV5 := __TMPV2
__TMPV6 := MBS_STATUS_MSG [ __CDINT00000008 ]
__TMPV6 := __TMPV3
MBS_STATUS_MSG [ __CDINT0000000A ] := __ADI__FLOWMETERMB_0_4
__FBL_RET := _PUSHCALLFB MSG_MODBUS MBS_STATUS_MSG
__TMPB1 := MBS_STATUS_MSG [ __CDINT0000000C ]
_IF _NOT __TMPB1 _GOTO __LAB9
__TMPI1 := __CDINT00000001 - __CDINT00000001
__TMPI1 := __TMPI1 * __CDINT00000002
__TMPUIN1 := MBS_STATUS_DATA [ __TMPI1 ]
_PUSH_PAR __TMPUIN1
__TMPUIN2 := _CALL ANY_TO_UINT
VAL_STATUS0 := __TMPUIN2
__TMPI1 := __CDINT00000002 - __CDINT00000001
__TMPI1 := __TMPI1 * __CDINT00000002
__TMPUIN1 := MBS_STATUS_DATA [ __TMPI1 ]
_PUSH_PAR __TMPUIN1
__TMPUIN2 := _CALL ANY_TO_UINT
VAL_STATUS1 := __TMPUIN2
__TMPI1 := __CDINT00000003 - __CDINT00000001
__TMPI1 := __TMPI1 * __CDINT00000002
__TMPUIN1 := MBS_STATUS_DATA [ __TMPI1 ]
_PUSH_PAR __TMPUIN1
__TMPUIN2 := _CALL ANY_TO_UINT
VAL_STATUS2 := __TMPUIN2
_GOTO __LABa
__LAB9 :
__LABa :
__TMPB1 := MBS_FLOWRATE_MSG [ __CDINT0000000D ]
__TMPB2 := MBS_FLOWTOTALIZERA_MSG [ __CDINT0000000D ]
__TMPB1 := __TMPB1 _OR __TMPB2
__TMPB3 := MBS_FLOWTOTALIZERB_MSG [ __CDINT0000000D ]
__TMPB1 := __TMPB1 _OR __TMPB3
__TMPB4 := MBS_FLOWTOTALIZERC_MSG [ __CDINT0000000D ]
__TMPB1 := __TMPB1 _OR __TMPB4
__TMPB5 := MBS_STATUS_MSG [ __CDINT0000000D ]
__TMPB1 := __TMPB1 _OR __TMPB5
STS_MODBUSERROR := __TMPB1
__TMPUIN1 := VAL_STATUS0 + VAL_STATUS1
__TMPUIN1 := __TMPUIN1 + VAL_STATUS2
__TMPB1 := __TMPUIN1 = __UINT_NULL
_IF _NOT __TMPB1 _GOTO __LABb
VAL_STATUSSTRING := __TMPM1
_GOTO __LABc
__LABb :
VAL_STATUSSTRING := __STRING_NULL
_PUSH_PAR VAL_STATUS0
_PUSH_PAR __DINT_NULL
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LABd
__TMPM3 := VAL_STATUSSTRING + __TMPM2
VAL_STATUSSTRING := __TMPM3
_GOTO __LABe
__LABd :
__LABe :
_PUSH_PAR VAL_STATUS0
_PUSH_PAR __CDINT00000001
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LABf
__TMPM3 := VAL_STATUSSTRING + __TMPM4
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB10
__LABf :
__LAB10 :
_PUSH_PAR VAL_STATUS0
_PUSH_PAR __CDINT00000002
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB11
__TMPM3 := VAL_STATUSSTRING + __TMPM5
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB12
__LAB11 :
__LAB12 :
_PUSH_PAR VAL_STATUS0
_PUSH_PAR __CDINT00000003
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB13
__TMPM3 := VAL_STATUSSTRING + __TMPM6
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB14
__LAB13 :
__LAB14 :
_PUSH_PAR VAL_STATUS0
_PUSH_PAR __CDINT00000004
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB15
__TMPM3 := VAL_STATUSSTRING + __TMPM7
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB16
__LAB15 :
__LAB16 :
_PUSH_PAR VAL_STATUS0
_PUSH_PAR __CDINT00000005
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB17
__TMPM3 := VAL_STATUSSTRING + __TMPM8
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB18
__LAB17 :
__LAB18 :
_PUSH_PAR VAL_STATUS0
_PUSH_PAR __CDINT00000006
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB19
__TMPM3 := VAL_STATUSSTRING + __TMPM9
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB1a
__LAB19 :
__LAB1a :
_PUSH_PAR VAL_STATUS0
_PUSH_PAR __CDINT00000007
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB1b
__TMPM3 := VAL_STATUSSTRING + __TMPM10
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB1c
__LAB1b :
__LAB1c :
_PUSH_PAR VAL_STATUS0
_PUSH_PAR __CDINT00000008
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB1d
__TMPM3 := VAL_STATUSSTRING + __TMPM11
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB1e
__LAB1d :
__LAB1e :
_PUSH_PAR VAL_STATUS0
_PUSH_PAR __CDINT00000009
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB1f
__TMPM3 := VAL_STATUSSTRING + __TMPM12
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB20
__LAB1f :
__LAB20 :
_PUSH_PAR VAL_STATUS0
_PUSH_PAR __CDINT0000000A
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB21
__TMPM3 := VAL_STATUSSTRING + __TMPM13
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB22
__LAB21 :
__LAB22 :
_PUSH_PAR VAL_STATUS0
_PUSH_PAR __CDINT0000000B
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB23
__TMPM3 := VAL_STATUSSTRING + __TMPM14
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB24
__LAB23 :
__LAB24 :
_PUSH_PAR VAL_STATUS0
_PUSH_PAR __CDINT0000000C
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB25
__TMPM3 := VAL_STATUSSTRING + __TMPM15
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB26
__LAB25 :
__LAB26 :
_PUSH_PAR VAL_STATUS0
_PUSH_PAR __CDINT0000000D
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB27
__TMPM3 := VAL_STATUSSTRING + __TMPM16
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB28
__LAB27 :
__LAB28 :
_PUSH_PAR VAL_STATUS0
_PUSH_PAR __CDINT0000000E
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB29
__TMPM3 := VAL_STATUSSTRING + __TMPM17
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB2a
__LAB29 :
__LAB2a :
_PUSH_PAR VAL_STATUS0
_PUSH_PAR __CDINT0000000F
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB2b
__TMPM3 := VAL_STATUSSTRING + __TMPM18
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB2c
__LAB2b :
__LAB2c :
_PUSH_PAR VAL_STATUS1
_PUSH_PAR __DINT_NULL
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB2d
__TMPM3 := VAL_STATUSSTRING + __TMPM19
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB2e
__LAB2d :
__LAB2e :
_PUSH_PAR VAL_STATUS1
_PUSH_PAR __CDINT00000001
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB2f
__TMPM3 := VAL_STATUSSTRING + __TMPM20
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB30
__LAB2f :
__LAB30 :
_PUSH_PAR VAL_STATUS1
_PUSH_PAR __CDINT00000002
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB31
__TMPM3 := VAL_STATUSSTRING + __TMPM21
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB32
__LAB31 :
__LAB32 :
_PUSH_PAR VAL_STATUS1
_PUSH_PAR __CDINT00000003
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB33
__TMPM3 := VAL_STATUSSTRING + __TMPM22
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB34
__LAB33 :
__LAB34 :
_PUSH_PAR VAL_STATUS1
_PUSH_PAR __CDINT00000004
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB35
__TMPM3 := VAL_STATUSSTRING + __TMPM23
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB36
__LAB35 :
__LAB36 :
_PUSH_PAR VAL_STATUS1
_PUSH_PAR __CDINT00000005
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB37
__TMPM3 := VAL_STATUSSTRING + __TMPM24
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB38
__LAB37 :
__LAB38 :
_PUSH_PAR VAL_STATUS1
_PUSH_PAR __CDINT00000006
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB39
__TMPM3 := VAL_STATUSSTRING + __TMPM25
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB3a
__LAB39 :
__LAB3a :
_PUSH_PAR VAL_STATUS1
_PUSH_PAR __CDINT00000007
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB3b
__TMPM3 := VAL_STATUSSTRING + __TMPM26
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB3c
__LAB3b :
__LAB3c :
_PUSH_PAR VAL_STATUS1
_PUSH_PAR __CDINT00000008
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB3d
__TMPM3 := VAL_STATUSSTRING + __TMPM27
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB3e
__LAB3d :
__LAB3e :
_PUSH_PAR VAL_STATUS1
_PUSH_PAR __CDINT00000009
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB3f
__TMPM3 := VAL_STATUSSTRING + __TMPM28
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB40
__LAB3f :
__LAB40 :
_PUSH_PAR VAL_STATUS1
_PUSH_PAR __CDINT0000000A
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB41
__TMPM3 := VAL_STATUSSTRING + __TMPM29
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB42
__LAB41 :
__LAB42 :
_PUSH_PAR VAL_STATUS1
_PUSH_PAR __CDINT0000000B
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB43
__TMPM3 := VAL_STATUSSTRING + __TMPM30
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB44
__LAB43 :
__LAB44 :
_PUSH_PAR VAL_STATUS1
_PUSH_PAR __CDINT0000000C
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB45
__TMPM3 := VAL_STATUSSTRING + __TMPM31
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB46
__LAB45 :
__LAB46 :
_PUSH_PAR VAL_STATUS1
_PUSH_PAR __CDINT0000000D
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB47
__TMPM3 := VAL_STATUSSTRING + __TMPM32
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB48
__LAB47 :
__LAB48 :
_PUSH_PAR VAL_STATUS1
_PUSH_PAR __CDINT0000000E
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB49
__TMPM3 := VAL_STATUSSTRING + __TMPM33
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB4a
__LAB49 :
__LAB4a :
_PUSH_PAR VAL_STATUS1
_PUSH_PAR __CDINT0000000F
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB4b
__TMPM3 := VAL_STATUSSTRING + __TMPM34
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB4c
__LAB4b :
__LAB4c :
_PUSH_PAR VAL_STATUS2
_PUSH_PAR __DINT_NULL
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB4d
__TMPM3 := VAL_STATUSSTRING + __TMPM35
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB4e
__LAB4d :
__LAB4e :
_PUSH_PAR VAL_STATUS2
_PUSH_PAR __CDINT00000001
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB4f
__TMPM3 := VAL_STATUSSTRING + __TMPM36
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB50
__LAB4f :
__LAB50 :
_PUSH_PAR VAL_STATUS2
_PUSH_PAR __CDINT00000002
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB51
__TMPM3 := VAL_STATUSSTRING + __TMPM37
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB52
__LAB51 :
__LAB52 :
_PUSH_PAR VAL_STATUS2
_PUSH_PAR __CDINT00000003
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB53
__TMPM3 := VAL_STATUSSTRING + __TMPM38
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB54
__LAB53 :
__LAB54 :
_PUSH_PAR VAL_STATUS2
_PUSH_PAR __CDINT00000004
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB55
__TMPM3 := VAL_STATUSSTRING + __TMPM39
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB56
__LAB55 :
__LAB56 :
_PUSH_PAR VAL_STATUS2
_PUSH_PAR __CDINT00000005
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB57
__TMPM3 := VAL_STATUSSTRING + __TMPM40
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB58
__LAB57 :
__LAB58 :
_PUSH_PAR VAL_STATUS2
_PUSH_PAR __CDINT00000006
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB59
__TMPM3 := VAL_STATUSSTRING + __TMPM41
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB5a
__LAB59 :
__LAB5a :
_PUSH_PAR VAL_STATUS2
_PUSH_PAR __CDINT00000007
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB5b
__TMPM3 := VAL_STATUSSTRING + __TMPM42
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB5c
__LAB5b :
__LAB5c :
_PUSH_PAR VAL_STATUS2
_PUSH_PAR __CDINT00000008
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB5d
__TMPM3 := VAL_STATUSSTRING + __TMPM43
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB5e
__LAB5d :
__LAB5e :
_PUSH_PAR VAL_STATUS2
_PUSH_PAR __CDINT00000009
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB5f
__TMPM3 := VAL_STATUSSTRING + __TMPM44
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB60
__LAB5f :
__LAB60 :
_PUSH_PAR VAL_STATUS2
_PUSH_PAR __CDINT0000000A
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB61
__TMPM3 := VAL_STATUSSTRING + __TMPM45
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB62
__LAB61 :
__LAB62 :
_PUSH_PAR VAL_STATUS2
_PUSH_PAR __CDINT0000000B
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB63
__TMPM3 := VAL_STATUSSTRING + __TMPM46
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB64
__LAB63 :
__LAB64 :
_PUSH_PAR VAL_STATUS2
_PUSH_PAR __CDINT0000000C
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB65
__TMPM3 := VAL_STATUSSTRING + __TMPM47
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB66
__LAB65 :
__LAB66 :
_PUSH_PAR VAL_STATUS2
_PUSH_PAR __CDINT0000000D
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB67
__TMPM3 := VAL_STATUSSTRING + __TMPM48
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB68
__LAB67 :
__LAB68 :
_PUSH_PAR VAL_STATUS2
_PUSH_PAR __CDINT0000000E
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB69
__TMPM3 := VAL_STATUSSTRING + __TMPM49
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB6a
__LAB69 :
__LAB6a :
_PUSH_PAR VAL_STATUS2
_PUSH_PAR __CDINT0000000F
__TMPB1 := _CALL __ANARBIT
_IF _NOT __TMPB1 _GOTO __LAB6b
__TMPM3 := VAL_STATUSSTRING + __TMPM50
VAL_STATUSSTRING := __TMPM3
_GOTO __LAB6c
__LAB6b :
__LAB6c :
_PUSH_PAR VAL_STATUSSTRING
__TMPI1 := _CALL MLEN
__TMPI1 := __TMPI1 - __CDINT00000002
_PUSH_PAR VAL_STATUSSTRING
_PUSH_PAR __TMPI1
__TMPM3 := _CALL RIGHT
VAL_STATUSSTRING := __TMPM3
__LABc :
__TMPB1 := CMD_RESETTOTALIZERA _OR CMD_RESETTOTALIZERB
__TMPB1 := __TMPB1 _OR CMD_RESETTOTALIZERC
CMD_RESETTOTALIZER := __TMPB1
_IF _NOT CMD_RESETTOTALIZERA _GOTO __LAB6d
MBS_RESETTOTALIZER_TARGETCFG [ __DINT_NULL ] := CFG_RESETTOTALIZERA_COIL
_GOTO __LAB6e
__LAB6d :
_IF _NOT CMD_RESETTOTALIZERB _GOTO __LAB6f
MBS_RESETTOTALIZER_TARGETCFG [ __DINT_NULL ] := CFG_RESETTOTALIZERA_COIL
_GOTO __LAB6e
__LAB6f :
_IF _NOT CMD_RESETTOTALIZERC _GOTO __LAB70
MBS_RESETTOTALIZER_TARGETCFG [ __DINT_NULL ] := CFG_RESETTOTALIZERC_COIL
_GOTO __LAB6e
__LAB70 :
__LAB6e :
MBS_RESETTOTALIZER_TARGETCFG [ __CDINT00000004 ] := CFG_FLOWMETER_MODBUSNODE
MBS_RESETTOTALIZER_LOCALCFG [ __DINT_NULL ] := __CUINT00000002
MBS_RESETTOTALIZER_LOCALCFG [ __CDINT00000003 ] := WRITECOIL_CMD
MBS_RESETTOTALIZER_LOCALCFG [ __CDINT00000002 ] := __USINT_NULL
MBS_RESETTOTALIZER_LOCALCFG [ __CDINT00000004 ] := __CUINT00000001
__TMPI1 := __CDINT00000001 - __CDINT00000001
__TMPI1 := __TMPI1 * __CDINT00000002
MBS_RESETTOTALIZER_DATA [ __TMPI1 ] := __CUINT00000001
__TMPV1 := MBS_RESETTOTALIZER_LOCALCFG [ __DINT_NULL ]
__TMPV2 := MBS_RESETTOTALIZER_TARGETCFG [ __DINT_NULL ]
__TMPV3 := MBS_RESETTOTALIZER_DATA [ __DINT_NULL ]
__TMPV4 := MBS_RESETTOTALIZER_MSG [ __CDINT00000004 ]
__TMPV4 := __TMPV1
__TMPV5 := MBS_RESETTOTALIZER_MSG [ __CDINT00000006 ]
__TMPV5 := __TMPV2
__TMPV6 := MBS_RESETTOTALIZER_MSG [ __CDINT00000008 ]
__TMPV6 := __TMPV3
MBS_RESETTOTALIZER_MSG [ __CDINT0000000A ] := __ADI__FLOWMETERMB_0_5
__FBL_RET := _PUSHCALLFB MSG_MODBUS MBS_RESETTOTALIZER_MSG
__TMPB1 := MBS_RESETTOTALIZER_MSG [ __CDINT0000000C ]
__TMPB2 := MBS_RESETTOTALIZER_MSG [ __CDINT0000000D ]
__TMPB1 := __TMPB1 _OR __TMPB2
_IF _NOT __TMPB1 _GOTO __LAB71
CMD_CLEARRESETTOTALIZER := TRUE
CMD_RESETTOTALIZERA := FALSE
CMD_RESETTOTALIZERB := FALSE
CMD_RESETTOTALIZERC := FALSE
_GOTO __LAB72
__LAB71 :
__LAB72 :
__FBL_RET := _PUSHCALLFB TON WAIT_TO_RESET_TON
__TMPUDI1 := MBS_RESETTOTALIZER_TARGETCFG [ __DINT_NULL ]
MBS_CLEARRESETTOTALIZER_TARGETCFG [ __DINT_NULL ] := __TMPUDI1
__TMPUSI1 := MBS_RESETTOTALIZER_TARGETCFG [ __CDINT00000004 ]
MBS_CLEARRESETTOTALIZER_TARGETCFG [ __CDINT00000004 ] := __TMPUSI1
__TMPUIN1 := MBS_RESETTOTALIZER_LOCALCFG [ __DINT_NULL ]
MBS_CLEARRESETTOTALIZER_LOCALCFG [ __DINT_NULL ] := __TMPUIN1
__TMPUSI1 := MBS_RESETTOTALIZER_LOCALCFG [ __CDINT00000003 ]
MBS_CLEARRESETTOTALIZER_LOCALCFG [ __CDINT00000003 ] := __TMPUSI1
__TMPUSI1 := MBS_RESETTOTALIZER_LOCALCFG [ __CDINT00000002 ]
MBS_CLEARRESETTOTALIZER_LOCALCFG [ __CDINT00000002 ] := __TMPUSI1
__TMPUIN1 := MBS_RESETTOTALIZER_LOCALCFG [ __CDINT00000004 ]
MBS_CLEARRESETTOTALIZER_LOCALCFG [ __CDINT00000004 ] := __TMPUIN1
__TMPI1 := __CDINT00000001 - __CDINT00000001
__TMPI1 := __TMPI1 * __CDINT00000002
MBS_CLEARRESETTOTALIZER_DATA [ __TMPI1 ] := __UINT_NULL
__TMPB1 := WAIT_TO_RESET_TON [ __CDINT00000004 ]
__TMPV1 := MBS_CLEARRESETTOTALIZER_LOCALCFG [ __DINT_NULL ]
__TMPV2 := MBS_CLEARRESETTOTALIZER_TARGETCFG [ __DINT_NULL ]
__TMPV3 := MBS_CLEARRESETTOTALIZER_DATA [ __DINT_NULL ]
__TMPB__MSG_MODBUS__IN := __TMPB1
__TMPV4 := MBS_CLEARRESETTOTALIZER_MSG [ __CDINT00000004 ]
__TMPV4 := __TMPV1
__TMPV5 := MBS_CLEARRESETTOTALIZER_MSG [ __CDINT00000006 ]
__TMPV5 := __TMPV2
__TMPV6 := MBS_CLEARRESETTOTALIZER_MSG [ __CDINT00000008 ]
__TMPV6 := __TMPV3
MBS_CLEARRESETTOTALIZER_MSG [ __CDINT0000000A ] := __ADI__FLOWMETERMB_0_6
__FBL_RET := _PUSHCALLFB MSG_MODBUS MBS_CLEARRESETTOTALIZER_MSG
__TMPB1 := MBS_CLEARRESETTOTALIZER_MSG [ __CDINT0000000C ]
__TMPB2 := MBS_CLEARRESETTOTALIZER_MSG [ __CDINT0000000D ]
__TMPB1 := __TMPB1 _OR __TMPB2
_IF _NOT __TMPB1 _GOTO __LAB73
CMD_CLEARRESETTOTALIZER := FALSE
_GOTO __LAB74
__LAB73 :
__LAB74 :
MBS_UNITS_TARGETCFG [ __DINT_NULL ] := CFG_UNITS_REGISTER
MBS_UNITS_TARGETCFG [ __CDINT00000004 ] := CFG_FLOWMETER_MODBUSNODE
MBS_UNITS_LOCALCFG [ __DINT_NULL ] := __CUINT00000002
MBS_UNITS_LOCALCFG [ __CDINT00000003 ] := READ_CMD
MBS_UNITS_LOCALCFG [ __CDINT00000002 ] := MBS_TRIGGERTYPE
MBS_UNITS_LOCALCFG [ __CDINT00000004 ] := __CUINT00000004
__TMPB1 := MODBUSTIMER [ __CDINT00000004 ]
__TMPV1 := MBS_UNITS_LOCALCFG [ __DINT_NULL ]
__TMPV2 := MBS_UNITS_TARGETCFG [ __DINT_NULL ]
__TMPV3 := MBS_UNITS_DATA [ __DINT_NULL ]
__TMPB__MSG_MODBUS__IN := __TMPB1
__TMPV4 := MBS_UNITS_MSG [ __CDINT00000004 ]
__TMPV4 := __TMPV1
__TMPV5 := MBS_UNITS_MSG [ __CDINT00000006 ]
__TMPV5 := __TMPV2
__TMPV6 := MBS_UNITS_MSG [ __CDINT00000008 ]
__TMPV6 := __TMPV3
MBS_UNITS_MSG [ __CDINT0000000A ] := __ADI__FLOWMETERMB_0_7
__FBL_RET := _PUSHCALLFB MSG_MODBUS MBS_UNITS_MSG
__TMPB1 := MBS_UNITS_MSG [ __CDINT0000000C ]
_IF _NOT __TMPB1 _GOTO __LAB75
__TMPI1 := __CDINT00000001 - __CDINT00000001
__TMPI1 := __TMPI1 * __CDINT00000002
__TMPUIN1 := MBS_UNITS_DATA [ __TMPI1 ]
_PUSH_PAR __TMPUIN1
__TMPM3 := _CALL FLOWRATEUNITS
VAL_FLOWUNITS := __TMPM3
__TMPI1 := __CDINT00000002 - __CDINT00000001
__TMPI1 := __TMPI1 * __CDINT00000002
__TMPUIN1 := MBS_UNITS_DATA [ __TMPI1 ]
_PUSH_PAR __TMPUIN1
__TMPM3 := _CALL FLOWTOTALUNITS
VAL_FLOWTOTALIZERAUNITS := __TMPM3
__TMPI1 := __CDINT00000003 - __CDINT00000001
__TMPI1 := __TMPI1 * __CDINT00000002
__TMPUIN1 := MBS_UNITS_DATA [ __TMPI1 ]
_PUSH_PAR __TMPUIN1
__TMPM3 := _CALL FLOWTOTALUNITS
VAL_FLOWTOTALIZERBUNITS := __TMPM3
__TMPI1 := __CDINT00000004 - __CDINT00000001
__TMPI1 := __TMPI1 * __CDINT00000002
__TMPUIN1 := MBS_UNITS_DATA [ __TMPI1 ]
_PUSH_PAR __TMPUIN1
__TMPM3 := _CALL FLOWTOTALUNITS
VAL_FLOWTOTALIZERCUNITS := __TMPM3
_GOTO __LAB76
__LAB75 :
__LAB76 :

View File

@@ -0,0 +1,147 @@
__TMPB1 := INTEGERVALUE = __CUINT000000F1
_IF _NOT __TMPB1 _GOTO __LAB1
FLOWRATEUNITS := __TMPM1
_GOTO __LAB2
__LAB1 :
__TMPB1 := INTEGERVALUE = __CUINT000000F2
_IF _NOT __TMPB1 _GOTO __LAB3
FLOWRATEUNITS := __TMPM2
_GOTO __LAB2
__LAB3 :
__TMPB1 := INTEGERVALUE = __CUINT000000F3
_IF _NOT __TMPB1 _GOTO __LAB4
FLOWRATEUNITS := __TMPM3
_GOTO __LAB2
__LAB4 :
__TMPB1 := INTEGERVALUE = __CUINT000000F4
_IF _NOT __TMPB1 _GOTO __LAB5
FLOWRATEUNITS := __TMPM4
_GOTO __LAB2
__LAB5 :
__TMPB1 := INTEGERVALUE = __CUINT00000084
_IF _NOT __TMPB1 _GOTO __LAB6
FLOWRATEUNITS := __TMPM5
_GOTO __LAB2
__LAB6 :
__TMPB1 := INTEGERVALUE = __CUINT00000085
_IF _NOT __TMPB1 _GOTO __LAB7
FLOWRATEUNITS := __TMPM6
_GOTO __LAB2
__LAB7 :
__TMPB1 := INTEGERVALUE = __CUINT00000086
_IF _NOT __TMPB1 _GOTO __LAB8
FLOWRATEUNITS := __TMPM7
_GOTO __LAB2
__LAB8 :
__TMPB1 := INTEGERVALUE = __CUINT00000087
_IF _NOT __TMPB1 _GOTO __LAB9
FLOWRATEUNITS := __TMPM8
_GOTO __LAB2
__LAB9 :
__TMPB1 := INTEGERVALUE = __CUINT000000F8
_IF _NOT __TMPB1 _GOTO __LABa
FLOWRATEUNITS := __TMPM9
_GOTO __LAB2
__LABa :
__TMPB1 := INTEGERVALUE = __CUINT0000001A
_IF _NOT __TMPB1 _GOTO __LABb
FLOWRATEUNITS := __TMPM10
_GOTO __LAB2
__LABb :
__TMPB1 := INTEGERVALUE = __CUINT0000000F
_IF _NOT __TMPB1 _GOTO __LABc
FLOWRATEUNITS := __TMPM11
_GOTO __LAB2
__LABc :
__TMPB1 := INTEGERVALUE = __CUINT00000082
_IF _NOT __TMPB1 _GOTO __LABd
FLOWRATEUNITS := __TMPM12
_GOTO __LAB2
__LABd :
__TMPB1 := INTEGERVALUE = __CUINT0000001B
_IF _NOT __TMPB1 _GOTO __LABe
FLOWRATEUNITS := __TMPM13
_GOTO __LAB2
__LABe :
__TMPB1 := INTEGERVALUE = __CUINT0000001C
_IF _NOT __TMPB1 _GOTO __LABf
FLOWRATEUNITS := __TMPM14
_GOTO __LAB2
__LABf :
__TMPB1 := INTEGERVALUE = __CUINT00000083
_IF _NOT __TMPB1 _GOTO __LAB10
FLOWRATEUNITS := __TMPM15
_GOTO __LAB2
__LAB10 :
__TMPB1 := INTEGERVALUE = __CUINT00000013
_IF _NOT __TMPB1 _GOTO __LAB11
FLOWRATEUNITS := __TMPM16
_GOTO __LAB2
__LAB11 :
__TMPB1 := INTEGERVALUE = __CUINT0000001D
_IF _NOT __TMPB1 _GOTO __LAB12
FLOWRATEUNITS := __TMPM17
_GOTO __LAB2
__LAB12 :
__TMPB1 := INTEGERVALUE = __CUINT00000016
_IF _NOT __TMPB1 _GOTO __LAB13
FLOWRATEUNITS := __TMPM18
_GOTO __LAB2
__LAB13 :
__TMPB1 := INTEGERVALUE = __CUINT00000010
_IF _NOT __TMPB1 _GOTO __LAB14
FLOWRATEUNITS := __TMPM19
_GOTO __LAB2
__LAB14 :
__TMPB1 := INTEGERVALUE = __CUINT00000088
_IF _NOT __TMPB1 _GOTO __LAB15
FLOWRATEUNITS := __TMPM20
_GOTO __LAB2
__LAB15 :
__TMPB1 := INTEGERVALUE = __CUINT000000EB
_IF _NOT __TMPB1 _GOTO __LAB16
FLOWRATEUNITS := __TMPM21
_GOTO __LAB2
__LAB16 :
__TMPB1 := INTEGERVALUE = __CUINT00000089
_IF _NOT __TMPB1 _GOTO __LAB17
FLOWRATEUNITS := __TMPM22
_GOTO __LAB2
__LAB17 :
__TMPB1 := INTEGERVALUE = __CUINT00000012
_IF _NOT __TMPB1 _GOTO __LAB18
FLOWRATEUNITS := __TMPM23
_GOTO __LAB2
__LAB18 :
__TMPB1 := INTEGERVALUE = __CUINT0000001E
_IF _NOT __TMPB1 _GOTO __LAB19
FLOWRATEUNITS := __TMPM24
_GOTO __LAB2
__LAB19 :
__TMPB1 := INTEGERVALUE = __CUINT0000001F
_IF _NOT __TMPB1 _GOTO __LAB1a
FLOWRATEUNITS := __TMPM25
_GOTO __LAB2
__LAB1a :
__TMPB1 := INTEGERVALUE = __CUINT00000018
_IF _NOT __TMPB1 _GOTO __LAB1b
FLOWRATEUNITS := __TMPM26
_GOTO __LAB2
__LAB1b :
__TMPB1 := INTEGERVALUE = __CUINT00000011
_IF _NOT __TMPB1 _GOTO __LAB1c
FLOWRATEUNITS := __TMPM27
_GOTO __LAB2
__LAB1c :
__TMPB1 := INTEGERVALUE = __CUINT0000008A
_IF _NOT __TMPB1 _GOTO __LAB1d
FLOWRATEUNITS := __TMPM28
_GOTO __LAB2
__LAB1d :
__TMPB1 := INTEGERVALUE = __CUINT000000F0
_IF _NOT __TMPB1 _GOTO __LAB1e
FLOWRATEUNITS := __TMPM29
_GOTO __LAB2
__LAB1e :
FLOWRATEUNITS := __TMPM30
__LAB2 :

View File

@@ -0,0 +1,42 @@
__TMPB1 := INTEGERINPUT = __CUINT00000028
_IF _NOT __TMPB1 _GOTO __LAB1
FLOWTOTALUNITS := __TMPM1
_GOTO __LAB2
__LAB1 :
__TMPB1 := INTEGERINPUT = __CUINT00000029
_IF _NOT __TMPB1 _GOTO __LAB3
FLOWTOTALUNITS := __TMPM2
_GOTO __LAB2
__LAB3 :
__TMPB1 := INTEGERINPUT = __CUINT0000002A
_IF _NOT __TMPB1 _GOTO __LAB4
FLOWTOTALUNITS := __TMPM3
_GOTO __LAB2
__LAB4 :
__TMPB1 := INTEGERINPUT = __CUINT0000002B
_IF _NOT __TMPB1 _GOTO __LAB5
FLOWTOTALUNITS := __TMPM4
_GOTO __LAB2
__LAB5 :
__TMPB1 := INTEGERINPUT = __CUINT0000002E
_IF _NOT __TMPB1 _GOTO __LAB6
FLOWTOTALUNITS := __TMPM5
_GOTO __LAB2
__LAB6 :
__TMPB1 := INTEGERINPUT = __CUINT00000070
_IF _NOT __TMPB1 _GOTO __LAB7
FLOWTOTALUNITS := __TMPM6
_GOTO __LAB2
__LAB7 :
__TMPB1 := INTEGERINPUT = __CUINT000000F6
_IF _NOT __TMPB1 _GOTO __LAB8
FLOWTOTALUNITS := __TMPM7
_GOTO __LAB2
__LAB8 :
__TMPB1 := INTEGERINPUT = __CUINT000000F7
_IF _NOT __TMPB1 _GOTO __LAB9
FLOWTOTALUNITS := __TMPM8
_GOTO __LAB2
__LAB9 :
FLOWTOTALUNITS := __TMPM9
__LAB2 :

View File

@@ -2,54 +2,307 @@ PROGRAM FlowMeterMb
ModbusTimer(NOT ModbusTimer.Q, ModbusScanRate);
(* ============== *)
(* FLOW TOTAL + *)
(* FLOW RATE *)
(* ============== *)
mbs_FlowTotalPos_TargetCfg.Addr := cfg_FlowTotalPos_Register;
mbs_FlowTotalPos_TargetCfg.Node := cfg_Flowmeter_ModbusNode;
mbs_FlowRate_TargetCfg.Addr := cfg_FlowRate_Register;
mbs_FlowRate_TargetCfg.Node := cfg_Flowmeter_ModbusNode;
mbs_FlowTotalPos_LocalCfg.Channel := 2;
mbs_FlowTotalPos_LocalCfg.Cmd := READ_CMD;
mbs_FlowTotalPos_LocalCfg.TriggerType := mbs_TriggerType;
mbs_FlowTotalPos_LocalCfg.ElementCnt := 2;
mbs_FlowTotalPos_MSG(ModbusTimer.Q, mbs_Cancel, mbs_FlowTotalPos_LocalCfg, mbs_FlowTotalPos_TargetCfg, mbs_FlowTotalPos_Data);
mbs_FlowRate_LocalCfg.Channel := 2;
mbs_FlowRate_LocalCfg.Cmd := READ_CMD;
mbs_FlowRate_LocalCfg.TriggerType := mbs_TriggerType;
mbs_FlowRate_LocalCfg.ElementCnt := 2;
mbs_FlowRate_MSG(ModbusTimer.Q, mbs_Cancel, mbs_FlowRate_LocalCfg, mbs_FlowRate_TargetCfg, mbs_FlowRate_Data);
IF mbs_FlowTotalPos_MSG.Q THEN
val_FlowTotalPos := WordsToReal(mbs_FlowTotalPos_Data[2], mbs_FlowTotalPos_Data[1]);
IF mbs_FlowRate_MSG.Q THEN
val_FlowRate := WordsToReal(mbs_FlowRate_Data[1], mbs_FlowRate_Data[2]);
END_IF;
(* ============== *)
(* FLOW TOTAL - *)
(* FLOW TOTALIZER A *)
(* ============== *)
mbs_FlowTotalNeg_TargetCfg.Addr := cfg_FlowTotalNeg_Register;
mbs_FlowTotalNeg_TargetCfg.Node := cfg_Flowmeter_ModbusNode;
mbs_FlowTotalizerA_TargetCfg.Addr := cfg_FlowTotalizerA_Register;
mbs_FlowTotalizerA_TargetCfg.Node := cfg_Flowmeter_ModbusNode;
mbs_FlowTotalNeg_LocalCfg.Channel := 2;
mbs_FlowTotalNeg_LocalCfg.Cmd := READ_CMD;
mbs_FlowTotalNeg_LocalCfg.TriggerType := mbs_TriggerType;
mbs_FlowTotalNeg_LocalCfg.ElementCnt := 2;
mbs_FlowTotalNeg_MSG(ModbusTimer.Q, mbs_Cancel, mbs_FlowTotalNeg_LocalCfg, mbs_FlowTotalNeg_TargetCfg, mbs_FlowTotalNeg_Data);
mbs_FlowTotalizerA_LocalCfg.Channel := 2;
mbs_FlowTotalizerA_LocalCfg.Cmd := READ_CMD;
mbs_FlowTotalizerA_LocalCfg.TriggerType := mbs_TriggerType;
mbs_FlowTotalizerA_LocalCfg.ElementCnt := 2;
mbs_FlowTotalizerA_MSG(ModbusTimer.Q, mbs_Cancel, mbs_FlowTotalizerA_LocalCfg, mbs_FlowTotalizerA_TargetCfg, mbs_FlowTotalizerA_Data);
IF mbs_FlowTotalNeg_MSG.Q THEN
val_FlowTotalNeg := WordsToReal(mbs_FlowTotalNeg_Data[2], mbs_FlowTotalNeg_Data[1]);
IF mbs_FlowTotalizerA_MSG.Q THEN
val_FlowTotalizerA := WordsToReal(mbs_FlowTotalizerA_Data[1], mbs_FlowTotalizerA_Data[2]);
END_IF;
(* ============== *)
(* FLOW GROSS *)
(* FLOW TOTALIZER B *)
(* ============== *)
mbs_FlowGross_TargetCfg.Addr := cfg_FlowGross_Register;
mbs_FlowGross_TargetCfg.Node := cfg_Flowmeter_ModbusNode;
mbs_FlowTotalizerB_TargetCfg.Addr := cfg_FlowTotalizerB_Register;
mbs_FlowTotalizerB_TargetCfg.Node := cfg_Flowmeter_ModbusNode;
mbs_FlowGross_LocalCfg.Channel := 2;
mbs_FlowGross_LocalCfg.Cmd := READ_CMD;
mbs_FlowGross_LocalCfg.TriggerType := mbs_TriggerType;
mbs_FlowGross_LocalCfg.ElementCnt := 2;
mbs_FlowGross_MSG(ModbusTimer.Q, mbs_Cancel, mbs_FlowGross_LocalCfg, mbs_FlowGross_TargetCfg, mbs_FlowGross_Data);
mbs_FlowTotalizerB_LocalCfg.Channel := 2;
mbs_FlowTotalizerB_LocalCfg.Cmd := READ_CMD;
mbs_FlowTotalizerB_LocalCfg.TriggerType := mbs_TriggerType;
mbs_FlowTotalizerB_LocalCfg.ElementCnt := 2;
mbs_FlowTotalizerB_MSG(ModbusTimer.Q, mbs_Cancel, mbs_FlowTotalizerB_LocalCfg, mbs_FlowTotalizerB_TargetCfg, mbs_FlowTotalizerB_Data);
IF mbs_FlowGross_MSG.Q THEN
val_FlowGross := WordsToReal(mbs_FlowGross_Data[2], mbs_FlowGross_Data[1]);
IF mbs_FlowTotalizerB_MSG.Q THEN
val_FlowTotalizerB := WordsToReal(mbs_FlowTotalizerB_Data[1], mbs_FlowTotalizerB_Data[2]);
END_IF;
(* ============== *)
(* FLOW TOTALIZER C *)
(* ============== *)
mbs_FlowTotalizerC_TargetCfg.Addr := cfg_FlowTotalizerC_Register;
mbs_FlowTotalizerC_TargetCfg.Node := cfg_Flowmeter_ModbusNode;
mbs_FlowTotalizerC_LocalCfg.Channel := 2;
mbs_FlowTotalizerC_LocalCfg.Cmd := READ_CMD;
mbs_FlowTotalizerC_LocalCfg.TriggerType := mbs_TriggerType;
mbs_FlowTotalizerC_LocalCfg.ElementCnt := 2;
mbs_FlowTotalizerC_MSG(ModbusTimer.Q, mbs_Cancel, mbs_FlowTotalizerC_LocalCfg, mbs_FlowTotalizerC_TargetCfg, mbs_FlowTotalizerC_Data);
IF mbs_FlowTotalizerC_MSG.Q THEN
val_FlowTotalizerC := WordsToReal(mbs_FlowTotalizerC_Data[1], mbs_FlowTotalizerC_Data[2]);
END_IF;
(* ============== *)
(* STATUS *)
(* ============== *)
mbs_Status_TargetCfg.Addr := cfg_Status_Register;
mbs_Status_TargetCfg.Node := cfg_Flowmeter_ModbusNode;
mbs_Status_LocalCfg.Channel := 2;
mbs_Status_LocalCfg.Cmd := READ_CMD;
mbs_Status_LocalCfg.TriggerType := mbs_TriggerType;
mbs_Status_LocalCfg.ElementCnt := 3;
mbs_Status_MSG(ModbusTimer.Q, mbs_Cancel, mbs_Status_LocalCfg, mbs_Status_TargetCfg, mbs_Status_Data);
IF mbs_Status_MSG.Q THEN
val_Status0 := ANY_TO_UINT(mbs_Status_Data[1]);
val_Status1 := ANY_TO_UINT(mbs_Status_Data[2]);
val_Status2 := ANY_TO_UINT(mbs_Status_Data[3]);
END_IF;
sts_ModbusError := mbs_FlowRate_MSG.Error OR mbs_FlowTotalizerA_MSG.Error OR mbs_FlowTotalizerB_MSG.Error OR mbs_FlowTotalizerC_MSG.Error OR mbs_Status_MSG.Error;
IF (val_Status0 + val_Status1 + val_Status2) = 0 THEN
val_StatusString := 'OK';
ELSE
val_StatusString := '';
IF val_Status0.0 THEN
val_StatusString := val_StatusString + ', Sensor Out of Range';
END_IF;
IF val_Status0.1 THEN
val_StatusString := val_StatusString + ', Empty Pipe';
END_IF;
IF val_Status0.2 THEN
val_StatusString := val_StatusString + ', I/O Processor Failure';
END_IF;
IF val_Status0.3 THEN
val_StatusString := val_StatusString + ', Pulse Output- Out of Range';
END_IF;
IF val_Status0.4 THEN
val_StatusString := val_StatusString + ', Update Missed';
END_IF;
IF val_Status0.5 THEN
val_StatusString := val_StatusString + ', Output at Alarm Level';
END_IF;
IF val_Status0.6 THEN
val_StatusString := val_StatusString + ', Modbus Nonvolatile Memory Error';
END_IF;
IF val_Status0.7 THEN
val_StatusString := val_StatusString + ', Pulse Output Fixed';
END_IF;
IF val_Status0.8 THEN
val_StatusString := val_StatusString + ', EPROM Checksum Error';
END_IF;
IF val_Status0.9 THEN
val_StatusString := val_StatusString + ', NOVRAM Checksum Error';
END_IF;
IF val_Status0.10 THEN
val_StatusString := val_StatusString + ', RAM Checksum Error';
END_IF;
IF val_Status0.11 THEN
val_StatusString := val_StatusString + ', Factory NOVRAM Checksum Error';
END_IF;
IF val_Status0.12 THEN
val_StatusString := val_StatusString + ', Continuous Meter Verification Error';
END_IF;
IF val_Status0.13 THEN
val_StatusString := val_StatusString + ', PZR Output is Active';
END_IF;
IF val_Status0.14 THEN
val_StatusString := val_StatusString + ', Coil Drive Current is Zero';
END_IF;
IF val_Status0.15 THEN
val_StatusString := val_StatusString + ', Reverse Flow Rate Detected';
END_IF;
IF val_Status1.0 THEN
val_StatusString := val_StatusString + ', Internal Flow Simulation Test Error';
END_IF;
IF val_Status1.1 THEN
val_StatusString := val_StatusString + ', Excess Auto Zero Correction- ZR Too High';
END_IF;
IF val_Status1.2 THEN
val_StatusString := val_StatusString + ', Excess Auto Zero Correction- ZR Too Low';
END_IF;
IF val_Status1.3 THEN
val_StatusString := val_StatusString + ', Auto Zero Attempt with Non-zero Flow';
END_IF;
IF val_Status1.4 THEN
val_StatusString := val_StatusString + ', Totalizer Limit 1 Alert';
END_IF;
IF val_Status1.5 THEN
val_StatusString := val_StatusString + ', Universal Trim Failure';
END_IF;
IF val_Status1.6 THEN
val_StatusString := val_StatusString + ', Flow Limit Alert 1';
END_IF;
IF val_Status1.7 THEN
val_StatusString := val_StatusString + ', Flow Limit Alert 2';
END_IF;
IF val_Status1.8 THEN
val_StatusString := val_StatusString + ', Electrode Coated Limit 1';
END_IF;
IF val_Status1.9 THEN
val_StatusString := val_StatusString + ', Electrode Coated Limit 2';
END_IF;
IF val_Status1.10 THEN
val_StatusString := val_StatusString + ', Excess Calibration Correction, GN too Low';
END_IF;
IF val_Status1.11 THEN
val_StatusString := val_StatusString + ', Excess Calibration Correction, GN too High';
END_IF;
IF val_Status1.12 THEN
val_StatusString := val_StatusString + ', Calibration Attempt without Calibrator';
END_IF;
IF val_Status1.13 THEN
val_StatusString := val_StatusString + ', Grounding/Wiring Fault';
END_IF;
IF val_Status1.14 THEN
val_StatusString := val_StatusString + ', High Process Noise Detected';
END_IF;
IF val_Status1.15 THEN
val_StatusString := val_StatusString + ', Electronics Temperature Out of Range';
END_IF;
IF val_Status2.0 THEN
val_StatusString := val_StatusString + ', Digital I/O 1 Active';
END_IF;
IF val_Status2.1 THEN
val_StatusString := val_StatusString + ', Digital I/O 2 Active';
END_IF;
IF val_Status2.2 THEN
val_StatusString := val_StatusString + ', Diagnostic Status Alert Active';
END_IF;
IF val_Status2.3 THEN
val_StatusString := val_StatusString + ', Modbus in Listen Only Mode';
END_IF;
IF val_Status2.4 THEN
val_StatusString := val_StatusString + ', I/O Processor Comm Failure';
END_IF;
IF val_Status2.5 THEN
val_StatusString := val_StatusString + ', Coil Over Current Detected';
END_IF;
IF val_Status2.6 THEN
val_StatusString := val_StatusString + ', Sensor Electrode Saturated';
END_IF;
IF val_Status2.7 THEN
val_StatusString := val_StatusString + ', Coil Power Limit';
END_IF;
IF val_Status2.8 THEN
val_StatusString := val_StatusString + ', Electronics Failure';
END_IF;
IF val_Status2.9 THEN
val_StatusString := val_StatusString + ', Coil Resistance Error';
END_IF;
IF val_Status2.10 THEN
val_StatusString := val_StatusString + ', Coil Inductance Error';
END_IF;
IF val_Status2.11 THEN
val_StatusString := val_StatusString + ', Digital Trim Failure';
END_IF;
IF val_Status2.12 THEN
val_StatusString := val_StatusString + ', Reverse Flow Detected';
END_IF;
IF val_Status2.13 THEN
val_StatusString := val_StatusString + ', Electrode Resistance Error';
END_IF;
IF val_Status2.14 THEN
val_StatusString := val_StatusString + ', Auto Zero Failure';
END_IF;
IF val_Status2.15 THEN
val_StatusString := val_StatusString + ', Reserved for Status Bit';
END_IF;
val_StatusString := RIGHT(val_StatusString, MLEN(val_StatusString) - 2);
END_IF;
(* ============== *)
(* RESET TOTALIZER *)
(* ============== *)
cmd_ResetTotalizer := cmd_ResetTotalizerA OR cmd_ResetTotalizerB OR cmd_ResetTotalizerC;
IF cmd_ResetTotalizerA THEN
mbs_ResetTotalizer_TargetCfg.Addr := cfg_ResetTotalizerA_Coil;
ELSIF cmd_ResetTotalizerB THEN
mbs_ResetTotalizer_TargetCfg.Addr := cfg_ResetTotalizerA_Coil;
ELSIF cmd_ResetTotalizerC THEN
mbs_ResetTotalizer_TargetCfg.Addr := cfg_ResetTotalizerC_Coil;
END_IF;
mbs_ResetTotalizer_TargetCfg.Node := cfg_Flowmeter_ModbusNode;
mbs_ResetTotalizer_LocalCfg.Channel := 2;
mbs_ResetTotalizer_LocalCfg.Cmd := WRITECOIL_CMD;
mbs_ResetTotalizer_LocalCfg.TriggerType := 0;
mbs_ResetTotalizer_LocalCfg.ElementCnt := 1;
mbs_ResetTotalizer_Data[1] := 1;
mbs_ResetTotalizer_MSG(cmd_ResetTotalizer, mbs_Cancel, mbs_ResetTotalizer_LocalCfg, mbs_ResetTotalizer_TargetCfg, mbs_ResetTotalizer_Data);
IF mbs_ResetTotalizer_MSG.Q OR mbs_ResetTotalizer_MSG.Error THEN
cmd_ClearResetTotalizer := TRUE;
cmd_ResetTotalizerA := FALSE;
cmd_ResetTotalizerB := FALSE;
cmd_ResetTotalizerC := FALSE;
END_IF;
Wait_To_Reset_TON(cmd_ClearResetTotalizer, par_TimeToWaitToClearResetTotalizer);
mbs_ClearResetTotalizer_TargetCfg.Addr := mbs_ResetTotalizer_TargetCfg.Addr;
mbs_ClearResetTotalizer_TargetCfg.Node := mbs_ResetTotalizer_TargetCfg.Node;
mbs_ClearResetTotalizer_LocalCfg.Channel := mbs_ResetTotalizer_LocalCfg.Channel;
mbs_ClearResetTotalizer_LocalCfg.Cmd := mbs_ResetTotalizer_LocalCfg.Cmd;
mbs_ClearResetTotalizer_LocalCfg.TriggerType := mbs_ResetTotalizer_LocalCfg.TriggerType;
mbs_ClearResetTotalizer_LocalCfg.ElementCnt := mbs_ResetTotalizer_LocalCfg.ElementCnt;
mbs_ClearResetTotalizer_Data[1] := 0;
mbs_ClearResetTotalizer_MSG(Wait_To_Reset_TON.Q, mbs_Cancel, mbs_ClearResetTotalizer_LocalCfg, mbs_ClearResetTotalizer_TargetCfg, mbs_ClearResetTotalizer_Data);
IF mbs_ClearResetTotalizer_MSG.Q OR mbs_ClearResetTotalizer_MSG.Error THEN
cmd_ClearResetTotalizer := FALSE;
END_IF;
(* ============== *)
(* UNITS *)
(* ============== *)
mbs_Units_TargetCfg.Addr := cfg_Units_Register;
mbs_Units_TargetCfg.Node := cfg_Flowmeter_ModbusNode;
mbs_Units_LocalCfg.Channel := 2;
mbs_Units_LocalCfg.Cmd := READ_CMD;
mbs_Units_LocalCfg.TriggerType := mbs_TriggerType;
mbs_Units_LocalCfg.ElementCnt := 4;
mbs_Units_MSG(ModbusTimer.Q, mbs_Cancel, mbs_Units_LocalCfg, mbs_Units_TargetCfg, mbs_Units_Data);
IF mbs_Units_MSG.Q THEN
val_FlowUnits := FlowRateUnits(mbs_Units_Data[1]);
val_FlowTotalizerAUnits := FlowTotalUnits(mbs_Units_Data[2]);
val_FlowTotalizerBUnits := FlowTotalUnits(mbs_Units_Data[3]);
val_FlowTotalizerCUnits := FlowTotalUnits(mbs_Units_Data[4]);
END_IF;
END_PROGRAM

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Root Version="6">
<LanguageContainerStyle CommentTextColor="Green" CommentFont="Courier New, 10pt" PonctuationTextColor="Black" PonctuationFont="Courier New, 10pt" IdentifierTextColor="Black" IdentifierFont="Courier New, 10pt" OperatorTextColor="Black" OperatorFont="Courier New, 10pt" ReservedWordTextColor="Fuchsia" ReservedWordFont="Courier New, 10pt" PouTextColor="BlueViolet" PouFont="Courier New, 10pt" NumberTextColor="Firebrick" NumberFont="Courier New, 10pt" StringTextColor="Gray" StringFont="Courier New, 10pt" EditorTextAreaBackgroundColor="White" EditorFont="Courier New, 10pt" Index="0" />
</Root>

View File

@@ -0,0 +1,63 @@
FUNCTION FlowRateUnits
IF integerValue = 241 THEN
FlowRateUnits := 'B31/sec';
ELSIF integerValue = 242 THEN
FlowRateUnits := 'B31/min';
ELSIF integerValue = 243 THEN
FlowRateUnits := 'B31/hour';
ELSIF integerValue = 244 THEN
FlowRateUnits := 'B31/day';
ELSIF integerValue = 132 THEN
FlowRateUnits := 'B42/sec';
ELSIF integerValue = 133 THEN
FlowRateUnits := 'B42/min';
ELSIF integerValue = 134 THEN
FlowRateUnits := 'B42/hour';
ELSIF integerValue = 135 THEN
FlowRateUnits := 'B42/day';
ELSIF integerValue = 248 THEN
FlowRateUnits := 'cm3/sec';
ELSIF integerValue = 26 THEN
FlowRateUnits := 'ft3/sec';
ELSIF integerValue = 15 THEN
FlowRateUnits := 'ft3/min';
ELSIF integerValue = 130 THEN
FlowRateUnits := 'ft3/hour';
ELSIF integerValue = 27 THEN
FlowRateUnits := 'ft3/day';
ELSIF integerValue = 28 THEN
FlowRateUnits := 'm3/sec';
ELSIF integerValue = 131 THEN
FlowRateUnits := 'm3/min';
ELSIF integerValue = 19 THEN
FlowRateUnits := 'm3/hour';
ELSIF integerValue = 29 THEN
FlowRateUnits := 'm3/day';
ELSIF integerValue = 22 THEN
FlowRateUnits := 'gal/sec';
ELSIF integerValue = 16 THEN
FlowRateUnits := 'gal/min';
ELSIF integerValue = 136 THEN
FlowRateUnits := 'gal/hour';
ELSIF integerValue = 235 THEN
FlowRateUnits := 'gal/day';
ELSIF integerValue = 137 THEN
FlowRateUnits := 'gal (Imp.)/sec';
ELSIF integerValue = 18 THEN
FlowRateUnits := 'gal (Imp.)/min';
ELSIF integerValue = 30 THEN
FlowRateUnits := 'gal (Imp.)/hour';
ELSIF integerValue = 31 THEN
FlowRateUnits := 'gal (Imp.)/day';
ELSIF integerValue = 24 THEN
FlowRateUnits := 'L/sec';
ELSIF integerValue = 17 THEN
FlowRateUnits := 'L/min';
ELSIF integerValue = 138 THEN
FlowRateUnits := 'L/hour';
ELSIF integerValue = 240 THEN
FlowRateUnits := 'L/day';
ELSE
FlowRateUnits := 'Unknown';
END_IF;
END_FUNCTION

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Root Version="6">
<LanguageContainerStyle CommentTextColor="Green" CommentFont="Courier New, 10pt" PonctuationTextColor="Black" PonctuationFont="Courier New, 10pt" IdentifierTextColor="Black" IdentifierFont="Courier New, 10pt" OperatorTextColor="Black" OperatorFont="Courier New, 10pt" ReservedWordTextColor="Fuchsia" ReservedWordFont="Courier New, 10pt" PouTextColor="BlueViolet" PouFont="Courier New, 10pt" NumberTextColor="Firebrick" NumberFont="Courier New, 10pt" StringTextColor="Gray" StringFont="Courier New, 10pt" EditorTextAreaBackgroundColor="White" EditorFont="Courier New, 10pt" Index="0" />
</Root>

View File

@@ -0,0 +1,21 @@
FUNCTION FlowTotalUnits
IF integerInput = 40 THEN
FlowTotalUnits := 'Gallons';
ELSIF integerInput = 41 THEN
FlowTotalUnits := 'Liters';
ELSIF integerInput = 42 THEN
FlowTotalUnits := 'Imp. Gallons';
ELSIF integerInput = 43 THEN
FlowTotalUnits := 'Cubic Meters';
ELSIF integerInput = 46 THEN
FlowTotalUnits := 'BBL42';
ELSIF integerInput = 112 THEN
FlowTotalUnits := 'Cubic Feet';
ELSIF integerInput = 246 THEN
FlowTotalUnits := 'Cubic cm';
ELSIF integerInput = 247 THEN
FlowTotalUnits := 'BBL31';
ELSE
FlowTotalUnits := 'Unknown';
END_IF;
END_FUNCTION

View File

@@ -1,2 +1,5 @@
FLOWMETERMB(147):F,WORDSTOREAL(148);
WATCHDOG(149):
FLOWRATEUNITS(150):
FLOWMETERMB(147):F,WORDSTOREAL(148);F,FLOWRATEUNITS(150);F,FLOWTOTALUNITS(151);
WORDSTOREAL(148):
FLOWTOTALUNITS(151):

View File

@@ -1,10 +1,10 @@
[MEMORY]
Offset0=0x1044
Offset1=0x1844
Offset2=0x1844
Offset3=0x1844
Memory Usage Estimate(Code)=0x8D8
Memory Usage Estimate(Data)=0x3A24
Memory Usage Estimate(Retain)=0x10
Memory Usage Estimate(Temporary variables)=0x1DC
Offset0=0x19D8
Offset1=0x21D8
Offset2=0x21D8
Offset3=0x21D8
Memory Usage Estimate(Code)=0x193C
Memory Usage Estimate(Data)=0x4B64
Memory Usage Estimate(Retain)=0x2D
Memory Usage Estimate(Temporary variables)=0x988
Offset4=0x414

View File

@@ -0,0 +1,10 @@
[MEMORY]
Offset0=0x19D8
Offset1=0x21D8
Offset2=0x21D8
Offset3=0x21D8
Memory Usage Estimate(Code)=0x193C
Memory Usage Estimate(Data)=0x4B64
Memory Usage Estimate(Retain)=0x2D
Memory Usage Estimate(Temporary variables)=0x988
Offset4=0x414

View File

@@ -5,12 +5,12 @@ ON_LINE=N
TBL_CONF=Y
CRC_ORG=0x0
CRC_OLD=
CRC_NEW=0xB340F0E7
CRC_NEW=0x61395B12
DAT_ORG=0
DAT_OLD=0
DAT_NEW=1515783534
DAT_NEW=1517002116
VER_ORG=0
VER_OLD=0
VER_NEW=1
VER_NEW=23
CRC_ALL_OLD=
CRC_ALL_NEW=0x0ED94E07
CRC_ALL_NEW=0x7C3289A7

View File

@@ -1,9 +1,9 @@
[MEMORY]
Memory Usage Estimate(Temporary variables)=0x1DC
Memory Usage Estimate(Temporary variables)=0x988
Biggest online change user variable memory block size=0x800
Currently added user variables=0x0
Total data size=0x1220
User variables size=0x1044
Maximum size for temporary variables=0x21DC
Memory Usage Estimate(Data)=0x3A20
Total data size=0x2360
User variables size=0x19D8
Maximum size for temporary variables=0x2988
Memory Usage Estimate(Data)=0x4B60
Free memory for user variables=0x800

View File

@@ -0,0 +1,9 @@
[MEMORY]
Memory Usage Estimate(Temporary variables)=0x988
Biggest online change user variable memory block size=0x800
Currently added user variables=0x0
Total data size=0x2360
User variables size=0x19D8
Maximum size for temporary variables=0x2988
Memory Usage Estimate(Data)=0x4B60
Free memory for user variables=0x800

View File

@@ -1,4 +1,10 @@
<INPUT>,MODBUSTIMER@FLOWMETERMB,TON,IN,__TMPB__TON__IN,BOOL,PT,MODBUSSCANRATE,TIME
<INPUT>,MBS_FLOWTOTALPOS_MSG@FLOWMETERMB,MSG_MODBUS,IN,__TMPB__MSG_MODBUS__IN,BOOL,CANCEL,MBS_CANCEL@FLOWMETERMB,BOOL,LOCALCFG,<NOT USED>,MODBUSLOCPARA,TARGETCFG,<NOT USED>,MODBUSTARPARA,LOCALADDR,<NOT USED>,MODBUSLOCADDR,__ADI_LOCALADDR,<NOT USED>,UINT
<INPUT>,MBS_FLOWTOTALNEG_MSG@FLOWMETERMB,MSG_MODBUS,IN,__TMPB__MSG_MODBUS__IN,BOOL,CANCEL,MBS_CANCEL@FLOWMETERMB,BOOL,LOCALCFG,<NOT USED>,MODBUSLOCPARA,TARGETCFG,<NOT USED>,MODBUSTARPARA,LOCALADDR,<NOT USED>,MODBUSLOCADDR,__ADI_LOCALADDR,<NOT USED>,UINT
<INPUT>,MBS_FLOWGROSS_MSG@FLOWMETERMB,MSG_MODBUS,IN,__TMPB__MSG_MODBUS__IN,BOOL,CANCEL,MBS_CANCEL@FLOWMETERMB,BOOL,LOCALCFG,<NOT USED>,MODBUSLOCPARA,TARGETCFG,<NOT USED>,MODBUSTARPARA,LOCALADDR,<NOT USED>,MODBUSLOCADDR,__ADI_LOCALADDR,<NOT USED>,UINT
<INPUT>,MBS_FLOWRATE_MSG@FLOWMETERMB,MSG_MODBUS,IN,__TMPB__MSG_MODBUS__IN,BOOL,CANCEL,MBS_CANCEL@FLOWMETERMB,BOOL,LOCALCFG,<NOT USED>,MODBUSLOCPARA,TARGETCFG,<NOT USED>,MODBUSTARPARA,LOCALADDR,<NOT USED>,MODBUSLOCADDR,__ADI_LOCALADDR,<NOT USED>,UINT
<INPUT>,MBS_FLOWTOTALIZERA_MSG@FLOWMETERMB,MSG_MODBUS,IN,__TMPB__MSG_MODBUS__IN,BOOL,CANCEL,MBS_CANCEL@FLOWMETERMB,BOOL,LOCALCFG,<NOT USED>,MODBUSLOCPARA,TARGETCFG,<NOT USED>,MODBUSTARPARA,LOCALADDR,<NOT USED>,MODBUSLOCADDR,__ADI_LOCALADDR,<NOT USED>,UINT
<INPUT>,MBS_FLOWTOTALIZERB_MSG@FLOWMETERMB,MSG_MODBUS,IN,__TMPB__MSG_MODBUS__IN,BOOL,CANCEL,MBS_CANCEL@FLOWMETERMB,BOOL,LOCALCFG,<NOT USED>,MODBUSLOCPARA,TARGETCFG,<NOT USED>,MODBUSTARPARA,LOCALADDR,<NOT USED>,MODBUSLOCADDR,__ADI_LOCALADDR,<NOT USED>,UINT
<INPUT>,MBS_FLOWTOTALIZERC_MSG@FLOWMETERMB,MSG_MODBUS,IN,__TMPB__MSG_MODBUS__IN,BOOL,CANCEL,MBS_CANCEL@FLOWMETERMB,BOOL,LOCALCFG,<NOT USED>,MODBUSLOCPARA,TARGETCFG,<NOT USED>,MODBUSTARPARA,LOCALADDR,<NOT USED>,MODBUSLOCADDR,__ADI_LOCALADDR,<NOT USED>,UINT
<INPUT>,MBS_STATUS_MSG@FLOWMETERMB,MSG_MODBUS,IN,__TMPB__MSG_MODBUS__IN,BOOL,CANCEL,MBS_CANCEL@FLOWMETERMB,BOOL,LOCALCFG,<NOT USED>,MODBUSLOCPARA,TARGETCFG,<NOT USED>,MODBUSTARPARA,LOCALADDR,<NOT USED>,MODBUSLOCADDR,__ADI_LOCALADDR,<NOT USED>,UINT
<INPUT>,MBS_RESETTOTALIZER_MSG@FLOWMETERMB,MSG_MODBUS,IN,CMD_RESETTOTALIZER@FLOWMETERMB,BOOL,CANCEL,MBS_CANCEL@FLOWMETERMB,BOOL,LOCALCFG,<NOT USED>,MODBUSLOCPARA,TARGETCFG,<NOT USED>,MODBUSTARPARA,LOCALADDR,<NOT USED>,MODBUSLOCADDR,__ADI_LOCALADDR,<NOT USED>,UINT
<INPUT>,WAIT_TO_RESET_TON@FLOWMETERMB,TON,IN,CMD_CLEARRESETTOTALIZER@FLOWMETERMB,BOOL,PT,PAR_TIMETOWAITTOCLEARRESETTOTALIZER@FLOWMETERMB,TIME
<INPUT>,MBS_CLEARRESETTOTALIZER_MSG@FLOWMETERMB,MSG_MODBUS,IN,__TMPB__MSG_MODBUS__IN,BOOL,CANCEL,MBS_CANCEL@FLOWMETERMB,BOOL,LOCALCFG,<NOT USED>,MODBUSLOCPARA,TARGETCFG,<NOT USED>,MODBUSTARPARA,LOCALADDR,<NOT USED>,MODBUSLOCADDR,__ADI_LOCALADDR,<NOT USED>,UINT
<INPUT>,MBS_UNITS_MSG@FLOWMETERMB,MSG_MODBUS,IN,__TMPB__MSG_MODBUS__IN,BOOL,CANCEL,MBS_CANCEL@FLOWMETERMB,BOOL,LOCALCFG,<NOT USED>,MODBUSLOCPARA,TARGETCFG,<NOT USED>,MODBUSTARPARA,LOCALADDR,<NOT USED>,MODBUSLOCADDR,__ADI_LOCALADDR,<NOT USED>,UINT

View File

@@ -1,22 +1,54 @@
[BEGIN FB INPUTS]
I1=micro820.micro820.flowmetermb/modbustimer.in,0x1845,BOOL
I2=micro820.micro820.flowmetermb/modbustimer.pt,0x4BC,TIME
I3=micro820.micro820.flowmetermb/mbs_flowtotalpos_msg.in,0x1846,BOOL
I4=micro820.micro820.flowmetermb/mbs_flowtotalpos_msg.cancel,0x455,BOOL
I5=micro820.micro820.flowmetermb/mbs_flowtotalpos_msg.localcfg,0xFFFFFFFF,MODBUSLOCPARA
I6=micro820.micro820.flowmetermb/mbs_flowtotalpos_msg.targetcfg,0xFFFFFFFF,MODBUSTARPARA
I7=micro820.micro820.flowmetermb/mbs_flowtotalpos_msg.localaddr,0xFFFFFFFF,MODBUSLOCADDR
I8=micro820.micro820.flowmetermb/mbs_flowtotalpos_msg.__adi_localaddr,0xFFFFFFFF,UINT
I9=micro820.micro820.flowmetermb/mbs_flowtotalneg_msg.in,0x1846,BOOL
I10=micro820.micro820.flowmetermb/mbs_flowtotalneg_msg.cancel,0x455,BOOL
I11=micro820.micro820.flowmetermb/mbs_flowtotalneg_msg.localcfg,0xFFFFFFFF,MODBUSLOCPARA
I12=micro820.micro820.flowmetermb/mbs_flowtotalneg_msg.targetcfg,0xFFFFFFFF,MODBUSTARPARA
I13=micro820.micro820.flowmetermb/mbs_flowtotalneg_msg.localaddr,0xFFFFFFFF,MODBUSLOCADDR
I14=micro820.micro820.flowmetermb/mbs_flowtotalneg_msg.__adi_localaddr,0xFFFFFFFF,UINT
I15=micro820.micro820.flowmetermb/mbs_flowgross_msg.in,0x1846,BOOL
I16=micro820.micro820.flowmetermb/mbs_flowgross_msg.cancel,0x455,BOOL
I17=micro820.micro820.flowmetermb/mbs_flowgross_msg.localcfg,0xFFFFFFFF,MODBUSLOCPARA
I18=micro820.micro820.flowmetermb/mbs_flowgross_msg.targetcfg,0xFFFFFFFF,MODBUSTARPARA
I19=micro820.micro820.flowmetermb/mbs_flowgross_msg.localaddr,0xFFFFFFFF,MODBUSLOCADDR
I20=micro820.micro820.flowmetermb/mbs_flowgross_msg.__adi_localaddr,0xFFFFFFFF,UINT
I1=micro820.micro820.flowmetermb/modbustimer.in,0x21D9,BOOL
I2=micro820.micro820.flowmetermb/modbustimer.pt,0x4EC,TIME
I3=micro820.micro820.flowmetermb/wait_to_reset_ton.in,0x45B,BOOL
I4=micro820.micro820.flowmetermb/wait_to_reset_ton.pt,0x4F0,TIME
I5=micro820.micro820.flowmetermb/mbs_flowrate_msg.in,0x21DA,BOOL
I6=micro820.micro820.flowmetermb/mbs_flowrate_msg.cancel,0x459,BOOL
I7=micro820.micro820.flowmetermb/mbs_flowrate_msg.localcfg,0xFFFFFFFF,MODBUSLOCPARA
I8=micro820.micro820.flowmetermb/mbs_flowrate_msg.targetcfg,0xFFFFFFFF,MODBUSTARPARA
I9=micro820.micro820.flowmetermb/mbs_flowrate_msg.localaddr,0xFFFFFFFF,MODBUSLOCADDR
I10=micro820.micro820.flowmetermb/mbs_flowrate_msg.__adi_localaddr,0xFFFFFFFF,UINT
I11=micro820.micro820.flowmetermb/mbs_flowtotalizera_msg.in,0x21DA,BOOL
I12=micro820.micro820.flowmetermb/mbs_flowtotalizera_msg.cancel,0x459,BOOL
I13=micro820.micro820.flowmetermb/mbs_flowtotalizera_msg.localcfg,0xFFFFFFFF,MODBUSLOCPARA
I14=micro820.micro820.flowmetermb/mbs_flowtotalizera_msg.targetcfg,0xFFFFFFFF,MODBUSTARPARA
I15=micro820.micro820.flowmetermb/mbs_flowtotalizera_msg.localaddr,0xFFFFFFFF,MODBUSLOCADDR
I16=micro820.micro820.flowmetermb/mbs_flowtotalizera_msg.__adi_localaddr,0xFFFFFFFF,UINT
I17=micro820.micro820.flowmetermb/mbs_flowtotalizerb_msg.in,0x21DA,BOOL
I18=micro820.micro820.flowmetermb/mbs_flowtotalizerb_msg.cancel,0x459,BOOL
I19=micro820.micro820.flowmetermb/mbs_flowtotalizerb_msg.localcfg,0xFFFFFFFF,MODBUSLOCPARA
I20=micro820.micro820.flowmetermb/mbs_flowtotalizerb_msg.targetcfg,0xFFFFFFFF,MODBUSTARPARA
I21=micro820.micro820.flowmetermb/mbs_flowtotalizerb_msg.localaddr,0xFFFFFFFF,MODBUSLOCADDR
I22=micro820.micro820.flowmetermb/mbs_flowtotalizerb_msg.__adi_localaddr,0xFFFFFFFF,UINT
I23=micro820.micro820.flowmetermb/mbs_flowtotalizerc_msg.in,0x21DA,BOOL
I24=micro820.micro820.flowmetermb/mbs_flowtotalizerc_msg.cancel,0x459,BOOL
I25=micro820.micro820.flowmetermb/mbs_flowtotalizerc_msg.localcfg,0xFFFFFFFF,MODBUSLOCPARA
I26=micro820.micro820.flowmetermb/mbs_flowtotalizerc_msg.targetcfg,0xFFFFFFFF,MODBUSTARPARA
I27=micro820.micro820.flowmetermb/mbs_flowtotalizerc_msg.localaddr,0xFFFFFFFF,MODBUSLOCADDR
I28=micro820.micro820.flowmetermb/mbs_flowtotalizerc_msg.__adi_localaddr,0xFFFFFFFF,UINT
I29=micro820.micro820.flowmetermb/mbs_status_msg.in,0x21DA,BOOL
I30=micro820.micro820.flowmetermb/mbs_status_msg.cancel,0x459,BOOL
I31=micro820.micro820.flowmetermb/mbs_status_msg.localcfg,0xFFFFFFFF,MODBUSLOCPARA
I32=micro820.micro820.flowmetermb/mbs_status_msg.targetcfg,0xFFFFFFFF,MODBUSTARPARA
I33=micro820.micro820.flowmetermb/mbs_status_msg.localaddr,0xFFFFFFFF,MODBUSLOCADDR
I34=micro820.micro820.flowmetermb/mbs_status_msg.__adi_localaddr,0xFFFFFFFF,UINT
I35=micro820.micro820.flowmetermb/mbs_resettotalizer_msg.in,0x45A,BOOL
I36=micro820.micro820.flowmetermb/mbs_resettotalizer_msg.cancel,0x459,BOOL
I37=micro820.micro820.flowmetermb/mbs_resettotalizer_msg.localcfg,0xFFFFFFFF,MODBUSLOCPARA
I38=micro820.micro820.flowmetermb/mbs_resettotalizer_msg.targetcfg,0xFFFFFFFF,MODBUSTARPARA
I39=micro820.micro820.flowmetermb/mbs_resettotalizer_msg.localaddr,0xFFFFFFFF,MODBUSLOCADDR
I40=micro820.micro820.flowmetermb/mbs_resettotalizer_msg.__adi_localaddr,0xFFFFFFFF,UINT
I41=micro820.micro820.flowmetermb/mbs_clearresettotalizer_msg.in,0x21DA,BOOL
I42=micro820.micro820.flowmetermb/mbs_clearresettotalizer_msg.cancel,0x459,BOOL
I43=micro820.micro820.flowmetermb/mbs_clearresettotalizer_msg.localcfg,0xFFFFFFFF,MODBUSLOCPARA
I44=micro820.micro820.flowmetermb/mbs_clearresettotalizer_msg.targetcfg,0xFFFFFFFF,MODBUSTARPARA
I45=micro820.micro820.flowmetermb/mbs_clearresettotalizer_msg.localaddr,0xFFFFFFFF,MODBUSLOCADDR
I46=micro820.micro820.flowmetermb/mbs_clearresettotalizer_msg.__adi_localaddr,0xFFFFFFFF,UINT
I47=micro820.micro820.flowmetermb/mbs_units_msg.in,0x21DA,BOOL
I48=micro820.micro820.flowmetermb/mbs_units_msg.cancel,0x459,BOOL
I49=micro820.micro820.flowmetermb/mbs_units_msg.localcfg,0xFFFFFFFF,MODBUSLOCPARA
I50=micro820.micro820.flowmetermb/mbs_units_msg.targetcfg,0xFFFFFFFF,MODBUSTARPARA
I51=micro820.micro820.flowmetermb/mbs_units_msg.localaddr,0xFFFFFFFF,MODBUSLOCADDR
I52=micro820.micro820.flowmetermb/mbs_units_msg.__adi_localaddr,0xFFFFFFFF,UINT
[END]

View File

@@ -0,0 +1,60 @@
[__DEFIO_CPXDVC]
Nb = 1
NotMDF = 0, 1, AB_, OPTIMUS_, IO_Base
MDF = -1
RIdx = 0
[__DEFIO_SPLDVC]
Nb = 4
NotMDF = 0, 0, 1, AB_, OPTIMUS_, digitOut_Base
MDF = -1
RIdx = 0, 0
NotMDF = 0, 1, 1, AB_, OPTIMUS_, digitIn_Base
MDF = -1
RIdx = 0, 0
NotMDF = 0, 2, 1, AB_, OPTIMUS_, analogIn_Base
MDF = -1
RIdx = 0, 0
NotMDF = 0, 3, 1, AB_, OPTIMUS_, analogOut_Base
MDF = -1
RIdx = 0, 0
[__DEFIO_CHAN]
RIdx = 0, 0, 0
Nb = 7
MDF = 1\1, 1, 0, 0, -1, _IO_EM_DO_00
MDF = 1\1, 1, 0, 1, -1, _IO_EM_DO_01
MDF = 1\1, 1, 0, 2, -1, _IO_EM_DO_02
MDF = 1\1, 1, 0, 3, -1, _IO_EM_DO_03
MDF = 1\1, 1, 0, 4, -1, _IO_EM_DO_04
MDF = 1\1, 1, 0, 5, -1, _IO_EM_DO_05
MDF = 1\1, 1, 0, 6, -1, _IO_EM_DO_06
RIdx = 0, 0, 1
Nb = 12
MDF = 1\1, 1, 0, 0, -1, _IO_EM_DI_00
MDF = 1\1, 1, 0, 1, -1, _IO_EM_DI_01
MDF = 1\1, 1, 0, 2, -1, _IO_EM_DI_02
MDF = 1\1, 1, 0, 3, -1, _IO_EM_DI_03
MDF = 1\1, 1, 0, 4, -1, _IO_EM_DI_04
MDF = 1\1, 1, 0, 5, -1, _IO_EM_DI_05
MDF = 1\1, 1, 0, 6, -1, _IO_EM_DI_06
MDF = 1\1, 1, 0, 7, -1, _IO_EM_DI_07
MDF = 1\1, 1, 0, 8, -1, _IO_EM_DI_08
MDF = 1\1, 1, 0, 9, -1, _IO_EM_DI_09
MDF = 1\1, 1, 0, 10, -1, _IO_EM_DI_10
MDF = 1\1, 1, 0, 11, -1, _IO_EM_DI_11
RIdx = 0, 0, 2
Nb = 4
MDF = 1\1, 1, 0, 0, -1, _IO_EM_AI_00
MDF = 1\1, 1, 0, 1, -1, _IO_EM_AI_01
MDF = 1\1, 1, 0, 2, -1, _IO_EM_AI_02
MDF = 1\1, 1, 0, 3, -1, _IO_EM_AI_03
RIdx = 0, 0, 3
Nb = 1
MDF = 1\1, 1, 0, 0, -1, _IO_EM_AO_00
[__READONLY_VALUES]
Nb = 0

View File

@@ -0,0 +1,9 @@
__TMPB1 := WATCHDOG_INT = WATCHDOG_INT_PREV
__TMPB1 := _NOT __TMPB1
_IF _NOT __TMPB1 _GOTO __LAB1
__TMPINT1 := WATCHDOG_INT - __CINT00000001
WATCHDOG_INT := __TMPINT1
WATCHDOG_INT_PREV := WATCHDOG_INT
_GOTO __LAB2
__LAB1 :
__LAB2 :

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Root Version="6">
<LanguageContainerStyle CommentTextColor="Green" CommentFont="Courier New, 10pt" PonctuationTextColor="Black" PonctuationFont="Courier New, 10pt" IdentifierTextColor="Black" IdentifierFont="Courier New, 10pt" OperatorTextColor="Black" OperatorFont="Courier New, 10pt" ReservedWordTextColor="Fuchsia" ReservedWordFont="Courier New, 10pt" PouTextColor="BlueViolet" PouFont="Courier New, 10pt" NumberTextColor="Firebrick" NumberFont="Courier New, 10pt" StringTextColor="Gray" StringFont="Courier New, 10pt" EditorTextAreaBackgroundColor="White" EditorFont="Courier New, 10pt" Index="0" />
</Root>

View File

@@ -0,0 +1,6 @@
PROGRAM Watchdog
IF NOT (watchdog_INT = watchdog_INT_prev) THEN
watchdog_INT := watchdog_INT - 1;
watchdog_INT_prev := watchdog_INT;
END_IF;
END_PROGRAM

View File

@@ -1,2 +1,2 @@
[RMDManager]
TASK=BUILD
TASK=REBUILD

View File

@@ -1,43 +0,0 @@
Controller.Micro820.Micro820.skid_Latitude
Controller.Micro820.Micro820.skid_Longitude
Controller.Micro820.Micro820.FlowMeterMb.mbs_FlowTotalPos_MSG
Controller.Micro820.Micro820.FlowMeterMb.mbs_Enable
Controller.Micro820.Micro820.FlowMeterMb.mbs_Cancel
Controller.Micro820.Micro820.FlowMeterMb.mbs_FlowTotalPos_LocalCfg
Controller.Micro820.Micro820.FlowMeterMb.mbs_FlowTotalPos_TargetCfg
Controller.Micro820.Micro820.FlowMeterMb.mbs_FlowTotalPos_Data
Controller.Micro820.Micro820.FlowMeterMb.mbs_FlowTotalNeg_MSG
Controller.Micro820.Micro820.FlowMeterMb.mbs_FlowTotalNeg_LocalCfg
Controller.Micro820.Micro820.FlowMeterMb.mbs_FlowTotalNeg_TargetCfg
Controller.Micro820.Micro820.FlowMeterMb.mbs_FlowTotalNeg_Data
Controller.Micro820.Micro820.FlowMeterMb.mbs_FlowGross_LocalCfg
Controller.Micro820.Micro820.FlowMeterMb.mbs_FlowGross_TargetCfg
Controller.Micro820.Micro820.FlowMeterMb.mbs_FlowGross_Data
Controller.Micro820.Micro820.FlowMeterMb.mbs_FlowGross_MSG
Controller.Micro820.Micro820.FlowMeterMb.READ_CMD
Controller.Micro820.Micro820.FlowMeterMb.mbs_TriggerType
Controller.Micro820.Micro820.FlowMeterMb.ModbusTimer
Controller.Micro820.Micro820.WordsToReal.WordsToReal
Controller.Micro820.Micro820.WordsToReal.Word1
Controller.Micro820.Micro820.WordsToReal.Word2
Controller.Micro820.Micro820.WordsToReal.Output_sign
Controller.Micro820.Micro820.WordsToReal.Output_expt
Controller.Micro820.Micro820.WordsToReal.Output_mantissa
Controller.Micro820.Micro820.WordsToReal.temp_exponent
Controller.Micro820.Micro820.WordsToReal.exponent
Controller.Micro820.Micro820.WordsToReal.mantissa
Controller.Micro820.Micro820.WordsToReal.index
Controller.Micro820.Micro820.WordsToReal.index_exp
Controller.Micro820.Micro820.WordsToReal.index_add
Controller.Micro820.Micro820.WordsToReal.mantissa_result
Controller.Micro820.Micro820.WordsToReal.exponent_real
Controller.Micro820.Micro820.WordsToReal.Input1
Controller.Micro820.Micro820.WordsToReal.Input2
Controller.Micro820.Micro820.val_FlowTotalPos
Controller.Micro820.Micro820.val_FlowTotalNeg
Controller.Micro820.Micro820.val_FlowGross
Controller.Micro820.Micro820.ModbusScanRate
Controller.Micro820.Micro820.cfg_Flowmeter_ModbusNode
Controller.Micro820.Micro820.cfg_FlowTotalPos_Register
Controller.Micro820.Micro820.cfg_FlowTotalNeg_Register
Controller.Micro820.Micro820.cfg_FlowGross_Register

Binary file not shown.

View File

@@ -1,7 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<ProjectElements>
<AcfElementGuid Guid="1f8f27de-e718-45df-9429-35b1463a9e4e" />
<AcfElementGuid Guid="23b6cc54-7135-422a-8743-f460b52a26b3" />
<AcfElementGuid Guid="3e90d2bb-e548-4dc3-a89b-4dede9914c73" />
<AcfElementGuid Guid="4abfa14a-9a16-4913-a742-278fd478b028" />
<AcfElementGuid Guid="6baaf1eb-2019-4bda-b9e7-8119676bf9bd" />
<AcfElementGuid Guid="985f9591-f3ba-4dcb-837f-f4a3058ef166" />
<AcfElementGuid Guid="b347dfd1-4943-49d5-9124-df6855433dbd" />
<AcfElementGuid Guid="d9cd1c27-0f51-4f96-b960-a629f4aa554a" />
</ProjectElements>

View File

@@ -2,4 +2,5 @@
<ProjectElements>
<AcfElementGuid Guid="4abfa14a-9a16-4913-a742-278fd478b028" />
<AcfElementGuid Guid="b347dfd1-4943-49d5-9124-df6855433dbd" />
<AcfElementGuid Guid="d9cd1c27-0f51-4f96-b960-a629f4aa554a" />
</ProjectElements>

View File

@@ -3,7 +3,16 @@
<AcfElementGuid Guid="1f8f27de-e718-45df-9429-35b1463a9e4e">
<File>WordsToReal.AcfMlge</File>
</AcfElementGuid>
<AcfElementGuid Guid="23b6cc54-7135-422a-8743-f460b52a26b3">
<File>FlowTotalUnits.AcfMlge</File>
</AcfElementGuid>
<AcfElementGuid Guid="6baaf1eb-2019-4bda-b9e7-8119676bf9bd">
<File>FlowRateUnits.AcfMlge</File>
</AcfElementGuid>
<AcfElementGuid Guid="b347dfd1-4943-49d5-9124-df6855433dbd">
<File>FlowMeterMb.AcfMlge</File>
</AcfElementGuid>
<AcfElementGuid Guid="d9cd1c27-0f51-4f96-b960-a629f4aa554a">
<File>Watchdog.AcfMlge</File>
</AcfElementGuid>
</ProjectElements>

View File

@@ -0,0 +1 @@
PV800_PioneerFracMeter;2711R-T4T;\\Mac\Home\GitHub\Henry-Pump\Pioneer-GhostMeters\Pioneer Ghost Meters\PVc Project

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{99999999-9999-9999-9999-999999999999}</ProjectGuid>
<OutputType>Exe</OutputType>
<RootNamespace>MyRootNamespace</RootNamespace>
<AssemblyName>MyAssemblyName</AssemblyName>
<EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
<CAMProjectFile>Library.pvc</CAMProjectFile>
<UniqueProjectId>{99999999-9999-9999-9999-999999999999}</UniqueProjectId>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Online' " />
<Import Project="$(DevEnvDir)\PackagesToLoad\Targets\ISaGRAF.ISaGRAF5.targets" />
</Project>

View File

@@ -0,0 +1 @@
<module>Alerts</module>

View File

@@ -0,0 +1,42 @@
<div class="row row-flex box-me">
<div class="col-md-6 text-center">
<h2 class="uppercase">Public IP Address</h2>
<p><%= channels["pioneerfracskid.public_ip_address"].value %><p>
</div>
</div>
<style>
.uppercase {
text-transform: uppercase;
font-size: 14px;
color: #666;
font-weight: 400;
letter-spacing: 1px;
z-index: 100;
}
.box-me {
position: relative;
padding: 0.5em;
padding-bottom: 1.5em;
border: 1px solid #eee;
/*margin: 1em 0;*/
}
.row-flex {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
flex-wrap: wrap;
}
.row-flex > [class*='col-'] {
display: flex;
flex-direction: column;
}
p {
font-size: 1.25em;
}
</style>

View File

@@ -0,0 +1,6 @@
<div class='col-xs-1'>
<div class="<%= nodecolors.statuscolor %> nodecolor"></div>
</div>
<div class='col-xs-6'>
<h3><%= node.vanityname %></h3>
</div>

View File

@@ -0,0 +1,31 @@
<style>
.header h4 {
position: relative;
top: 0.9em;
}
.header h2 {
text-transform: uppercase;
font-size: 14px;
color: #aaa;
margin: 0.75em 0;
}
.header p {
font-size: 24px;
color: black;
font-weight: 600;
}
</style>
<div class="row header">
<div class="col-xs-1">
<div class="<%= nodecolors.statuscolor %> nodecolor"></div>
</div>
<div class="col-xs-2">
<img src="<%= nodeimgurl %>" />
</div>
<div class="col-xs-4">
<h4><%= node.vanityname %></h4>
</div>
</div>

View File

@@ -0,0 +1,121 @@
<div class="row row-flex box-me">
<div class="col-xs-12 text-center">
<h1>HEADER 1</h1>
</div>
<div class="col-xs-4 text-center">
<h2>CHANNEL 1</h2>
<div class="gauge-box">
<div data-labelheight="10"
style="height: 170px; background: transparent; margin: 0 auto;"
id="gauge-channel_1"
data-chart="solidgauge"
data-nodename="pioneerfracskid.channel_1"
data-units="UNITS"
data-min="0"
data-max="100"
data-decimalplaces="2"
data-colors="0.1:#DF5353,0.5:#DDDF0D,0.9:#55BF3B"
data-valuefontsize="18px">
</div>
<div class- "timestamp-box">
<a href="#" data-channelId="<%= channels['pioneerfracskid.channel_1'].channelId %>" class="data-table" title="Download Channel History">
<i class="fa fa-download"></i>
</a>
</div>
<span data-timeupdate="channel_1">
<%= channels["pioneerfracskid.channel_1"].timestamp %>
</span>
</div>
</div>
</div>
<style>
.box-me {
position: relative;
padding: 0.5em;
padding-bottom: 1.5em;
border: 1px solid #eee;
/*margin: 1em 0;*/
}
.box-me .gauge-box {
margin-top: -0.25em;
}
.pad15 {
margin: 15px 15px;
}
.box-me h2 {
text-transform: uppercase;
font-size: 14px;
color: #666;
font-weight: 400;
letter-spacing: 1px;
z-index: 100;
}
.dynamic-chart-form {
background-color: whiteSmoke;
padding: 1em 0.5em;
margin-top: 1em;
}
.row-flex {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
flex-wrap: wrap;
}
.row-flex > [class*='col-'] {
display: flex;
flex-direction: column;
}
#systemStatusTimelineContainer h2 {
text-transform: uppercase;
font-size: 14px;
color: #666;
font-weight: 400;
letter-spacing: 1px;
z-index: 100;
}
.slice.node-detail hr {
border-color: #ccc;
}
.slice.node-detail #alarms li {
margin-bottom: 1em;
padding: 0.5em;
}
.slice.node-detail #alarms li:nth-child(even){
background-color: whiteSmoke;
}
.slice.node-detail #alarms li span {
margin-left: 1em;
color: #aaa;
}
</style>
<script>
$('.val_box').each(function(topLevel){
$(this).change(function(){
var id = "#" + $(this).closest(".entry-top-level").attr('id');
if (id !== "#undefined"){
var val = $(id).find('.val_box').val();
var tag = $(id).find('.setstatic').attr('data-staticsend', val);
console.log($(id).find('.setstatic').attr('data-staticsend'));
}
});
});
</script>

View File

@@ -0,0 +1,15 @@
<a href="#"
data-channelId="<%= channels["pioneerfracskid.log"].channelId %>"
class="data-table btn-block btn btn-theme animated"
title="Device Log"><i style='margin-left: 0.5em; cursor: pointer' class="fa fa-th-list icon-theme"></i> Device Log</a>
<a href="#"
data-refreshpause="1"
data-staticsend="1"
data-channelId="<%= channels["pioneerfracskid.sync"].channelId %>"
data-techname="<%=channels["pioneerfracskid.sync"].techName %>"
data-name="<%= channels["pioneerfracskid.sync"].name%>"
data-nodechannelcurrentId="<%= channels["pioneerfracskid.sync"].nodechannelcurrentId %>"
id="<%= channels["pioneerfracskid.sync"].channelId %>"
class="btn btn-large btn-block btn-theme animated setstatic mqtt">
<i class="icon-repeat icon-white mqtt" ></i>Sync All Data</a>

View File

@@ -0,0 +1,37 @@
<div class='col-xs-12' style="padding-top: 1em; margin-bottom: 1em;">
<div class="input-daterange input-group" id="datepicker">
<input data-chartid="dynamicChart" id="fromDate" data-daysofhistory="7" type="text" class="form-control" name="start">
<span class="input-group-addon">to</span>
<input class="form-control" data-chartid="dynamicChart" id="toDate" type="text" name="end">
<span class='input-group-btn'>
<a href="#!" data-chartid="dynamicChart" data-otherchartids="statusTimeline" class="btn chart-update btn-theme">Run</a>
</span>
</div>
</div>
<hr>
<div class='clearfix col-xs-12'
style='height: 450px'
id="dynamicChart"
data-chart="dynamicchart"
data-daysofhistory="7"
data-chartlabel="Data"
data-ylabel=""
data-xlabel="Date"
data-units=""
data-channelnames="pioneerfracskid.channel_1,">
</div>
<style>
.dynamic-chart-form {
background-color: whiteSmoke;
padding: 1em 0.5em;
margin-top: 1em;
}
#systemStatusTimelineContainer h2 {
text-transform: uppercase;
font-size: 14px;
color: #666;
font-weight: 400;
letter-spacing: 1px;
z-index: 100;
}
</style>

View File

@@ -0,0 +1,285 @@
"""Define Meshify channel class."""
from pycomm.ab_comm.clx import Driver as ClxDriver
from pycomm.cip.cip_base import CommError, DataError
import time
def binarray(intval):
"""Split an integer into its bits."""
bin_string = '{0:08b}'.format(intval)
bin_arr = [i for i in bin_string]
bin_arr.reverse()
return bin_arr
def read_tag(addr, tag, plc_type="CLX"):
"""Read a tag from the PLC."""
direct = plc_type == "Micro800"
c = ClxDriver()
try:
if c.open(addr, direct_connection=direct):
try:
v = c.read_tag(tag)
return v
except DataError as e:
c.close()
print("Data Error during readTag({}, {}): {}".format(addr, tag, e))
except CommError:
# err = c.get_status()
c.close()
print("Could not connect during readTag({}, {})".format(addr, tag))
# print err
except AttributeError as e:
c.close()
print("AttributeError during readTag({}, {}): \n{}".format(addr, tag, e))
c.close()
return False
def read_array(addr, tag, start, end, plc_type="CLX"):
"""Read an array from the PLC."""
direct = plc_type == "Micro800"
c = ClxDriver()
if c.open(addr, direct_connection=direct):
arr_vals = []
try:
for i in range(start, end):
tag_w_index = tag + "[{}]".format(i)
v = c.read_tag(tag_w_index)
# print('{} - {}'.format(tag_w_index, v))
arr_vals.append(round(v[0], 4))
# print(v)
if len(arr_vals) > 0:
return arr_vals
else:
print("No length for {}".format(addr))
return False
except Exception:
print("Error during readArray({}, {}, {}, {})".format(addr, tag, start, end))
err = c.get_status()
c.close()
print err
pass
c.close()
def write_tag(addr, tag, val, plc_type="CLX"):
"""Write a tag value to the PLC."""
direct = plc_type == "Micro800"
c = ClxDriver()
if c.open(addr, direct_connection=direct):
try:
cv = c.read_tag(tag)
wt = c.write_tag(tag, val, cv[1])
return wt
except Exception:
print("Error during writeTag({}, {}, {})".format(addr, tag, val))
err = c.get_status()
c.close()
print err
c.close()
class Channel(object):
"""Holds the configuration for a Meshify channel."""
def __init__(self, mesh_name, data_type, chg_threshold, guarantee_sec, map_=False, write_enabled=False):
"""Initialize the channel."""
self.mesh_name = mesh_name
self.data_type = data_type
self.last_value = None
self.value = None
self.last_send_time = 0
self.chg_threshold = chg_threshold
self.guarantee_sec = guarantee_sec
self.map_ = map_
self.write_enabled = write_enabled
def __str__(self):
"""Create a string for the channel."""
return "{}\nvalue: {}, last_send_time: {}".format(self.mesh_name, self.value, self.last_send_time)
def check(self, new_value, force_send=False):
"""Check to see if the new_value needs to be stored."""
send_needed = False
send_reason = ""
if self.data_type == 'BOOL' or self.data_type == 'STRING':
if self.last_send_time == 0:
send_needed = True
send_reason = "no send time"
elif self.value is None:
send_needed = True
send_reason = "no value"
elif not (self.value == new_value):
if self.map_:
if not self.value == self.map_[new_value]:
send_needed = True
send_reason = "value change"
else:
send_needed = True
send_reason = "value change"
elif (time.time() - self.last_send_time) > self.guarantee_sec:
send_needed = True
send_reason = "guarantee sec"
elif force_send:
send_needed = True
send_reason = "forced"
else:
if self.last_send_time == 0:
send_needed = True
send_reason = "no send time"
elif self.value is None:
send_needed = True
send_reason = "no value"
elif abs(self.value - new_value) > self.chg_threshold:
send_needed = True
send_reason = "change threshold"
elif (time.time() - self.last_send_time) > self.guarantee_sec:
send_needed = True
send_reason = "guarantee sec"
elif force_send:
send_needed = True
send_reason = "forced"
if send_needed:
self.last_value = self.value
if self.map_:
try:
self.value = self.map_[new_value]
except KeyError:
print("Cannot find a map value for {} in {} for {}".format(new_value, self.map_, self.mesh_name))
self.value = new_value
else:
self.value = new_value
self.last_send_time = time.time()
print("Sending {} for {} - {}".format(self.value, self.mesh_name, send_reason))
return send_needed
def read(self):
"""Read the value."""
pass
def identity(sent):
"""Return exactly what was sent to it."""
return sent
class ModbusChannel(Channel):
"""Modbus channel object."""
def __init__(self, mesh_name, register_number, data_type, chg_threshold, guarantee_sec, channel_size=1, map_=False, write_enabled=False, transformFn=identity):
"""Initialize the channel."""
super(ModbusChannel, self).__init__(mesh_name, data_type, chg_threshold, guarantee_sec, map_, write_enabled)
self.mesh_name = mesh_name
self.register_number = register_number
self.channel_size = channel_size
self.data_type = data_type
self.last_value = None
self.value = None
self.last_send_time = 0
self.chg_threshold = chg_threshold
self.guarantee_sec = guarantee_sec
self.map_ = map_
self.write_enabled = write_enabled
self.transformFn = transformFn
def read(self, mbsvalue):
"""Return the transformed read value."""
return self.transformFn(mbsvalue)
class PLCChannel(Channel):
"""PLC Channel Object."""
def __init__(self, ip, mesh_name, plc_tag, data_type, chg_threshold, guarantee_sec, map_=False, write_enabled=False):
"""Initialize the channel."""
super(PLCChannel, self).__init__(mesh_name, data_type, chg_threshold, guarantee_sec, map_, write_enabled)
self.plc_ip = ip
self.mesh_name = mesh_name
self.plc_tag = plc_tag
self.data_type = data_type
self.last_value = None
self.value = None
self.last_send_time = 0
self.chg_threshold = chg_threshold
self.guarantee_sec = guarantee_sec
self.map_ = map_
self.write_enabled = write_enabled
def read(self):
"""Read the value."""
plc_value = None
if self.plc_tag and self.plc_ip:
read_value = read_tag(self.plc_ip, self.plc_tag)
if read_value:
plc_value = read_value[0]
return plc_value
class BoolArrayChannels(Channel):
"""Hold the configuration for a set of boolean array channels."""
def __init__(self, ip, mesh_name, plc_tag, data_type, chg_threshold, guarantee_sec, map_=False, write_enabled=False):
"""Initialize the channel."""
self.plc_ip = ip
self.mesh_name = mesh_name
self.plc_tag = plc_tag
self.data_type = data_type
self.last_value = None
self.value = None
self.last_send_time = 0
self.chg_threshold = chg_threshold
self.guarantee_sec = guarantee_sec
self.map_ = map_
self.write_enabled = write_enabled
def compare_values(self, new_val_dict):
"""Compare new values to old values to see if the values need storing."""
send = False
for idx in new_val_dict:
try:
if new_val_dict[idx] != self.last_value[idx]:
send = True
except KeyError:
print("Key Error in self.compare_values for index {}".format(idx))
send = True
return send
def read(self, force_send=False):
"""Read the value and check to see if needs to be stored."""
send_needed = False
send_reason = ""
if self.plc_tag:
v = read_tag(self.plc_ip, self.plc_tag)
if v:
bool_arr = binarray(v[0])
new_val = {}
for idx in self.map_:
try:
new_val[self.map_[idx]] = bool_arr[idx]
except KeyError:
print("Not able to get value for index {}".format(idx))
if self.last_send_time == 0:
send_needed = True
send_reason = "no send time"
elif self.value is None:
send_needed = True
send_reason = "no value"
elif self.compare_values(new_val):
send_needed = True
send_reason = "value change"
elif (time.time() - self.last_send_time) > self.guarantee_sec:
send_needed = True
send_reason = "guarantee sec"
elif force_send:
send_needed = True
send_reason = "forced"
if send_needed:
self.value = new_val
self.last_value = self.value
self.last_send_time = time.time()
print("Sending {} for {} - {}".format(self.value, self.mesh_name, send_reason))
return send_needed

Binary file not shown.

View File

@@ -0,0 +1,12 @@
{
"files": {
"file3": "persistence.py",
"file2": "utilities.py",
"file1": "fracskid.py",
"file4": "Channel.py"
},
"deviceName": "fracskid",
"driverId": "0200",
"releaseVersion": "1",
"driverFileName": "fracskid.py"
}

View File

@@ -0,0 +1,12 @@
{
"name": "fracskid",
"driverFilename": "fracskid.py",
"driverId": "0000",
"additionalDriverFiles": [
"utilities.py",
"persistence.py",
"Channel.py"
],
"version": 1,
"s3BucketName": "fracskid"
}

View File

@@ -0,0 +1,142 @@
"""Driver for fracskid"""
import threading
import sys
from device_base import deviceBase
from Channel import Channel, read_tag, write_tag
import persistence
from random import randint
from utilities import get_public_ip_address
import json
import time
import logging
# LOGGING SETUP
from logging.handlers import RotatingFileHandler
_ = None
log_formatter = logging.Formatter('%(asctime)s %(levelname)s %(funcName)s(%(lineno)d) %(message)s')
logFile = './fracskid.log'
my_handler = RotatingFileHandler(logFile, mode='a', maxBytes=500*1024, backupCount=2, encoding=None, delay=0)
my_handler.setFormatter(log_formatter)
my_handler.setLevel(logging.INFO)
logger = logging.getLogger('fracskid')
logger.setLevel(logging.INFO)
logger.addHandler(my_handler)
console_out = logging.StreamHandler(sys.stdout)
console_out.setFormatter(log_formatter)
logger.addHandler(console_out)
logger.info("fracskid startup")
# GLOBAL VARIABLES
WATCHDOG_SEND_PERIOD = 3600 # Seconds, the longest amount of time before sending the watchdog status
PLC_IP_ADDRESS = "10.20.4.40"
CHANNELS = []
# PERSISTENCE FILE
persist = persistence.load()
class start(threading.Thread, deviceBase):
"""Start class required by Meshify."""
def __init__(self, name=None, number=None, mac=None, Q=None, mcu=None, companyId=None, offset=None, mqtt=None, Nodes=None):
"""Initialize the driver."""
threading.Thread.__init__(self)
deviceBase.__init__(self, name=name, number=number, mac=mac, Q=Q, mcu=mcu, companyId=companyId, offset=offset, mqtt=mqtt, Nodes=Nodes)
self.daemon = True
self.version = "1"
self.finished = threading.Event()
self.forceSend = False
threading.Thread.start(self)
# this is a required function for all drivers, its goal is to upload some piece of data
# about your device so it can be seen on the web
def register(self):
"""Register the driver."""
# self.sendtodb("log", "BOOM! Booted.", 0)
pass
def run(self):
"""Actually run the driver."""
global persist
wait_sec = 60
for i in range(0, wait_sec):
print("fracskid driver will start in {} seconds".format(wait_sec - i))
time.sleep(1)
logger.info("BOOM! Starting fracskid driver...")
public_ip_address = get_public_ip_address()
self.sendtodbDev(1, 'public_ip_address', public_ip_address, 0, 'fracskid')
watchdog = self.fracskid_watchdog()
self.sendtodbDev(1, 'watchdog', watchdog, 0, 'fracskid')
watchdog_send_timestamp = time.time()
send_loops = 0
watchdog_loops = 0
watchdog_check_after = 5000
while True:
if self.forceSend:
logger.warning("FORCE SEND: TRUE")
gps = self.mcu.gps.split(',')
latitude = float(gps[0])
longitude = float(gps[1])
write_tag(PLC_IP_ADDRESS, "skid_latitude", latitude, plc_type="Micro800")
write_tag(PLC_IP_ADDRESS, "skid_longitude", longitude, plc_type="Micro800")
logger.info("Wrote {},{} to PLC at {}.".format(latitude, longitude, PLC_IP_ADDRESS))
if self.forceSend:
if send_loops > 2:
logger.warning("Turning off forceSend")
self.forceSend = False
send_loops = 0
else:
send_loops += 1
watchdog_loops += 1
if (watchdog_loops >= watchdog_check_after):
test_watchdog = self.fracskid_watchdog()
if not test_watchdog == watchdog or (time.time() - watchdog_send_timestamp) > WATCHDOG_SEND_PERIOD:
self.sendtodbDev(1, 'watchdog', test_watchdog, 0, 'fracskid')
watchdog = test_watchdog
test_public_ip = get_public_ip_address()
if not test_public_ip == public_ip_address:
self.sendtodbDev(1, 'public_ip_address', test_public_ip, 0, 'fracskid')
public_ip_address = test_public_ip
watchdog_loops = 0
time.sleep(10)
def fracskid_watchdog(self):
"""Write a random integer to the PLC and then 1 seconds later check that it has been decremented by 1."""
randval = randint(0, 32767)
write_tag(str(PLC_IP_ADDRESS), 'watchdog_INT', randval)
time.sleep(1)
watchdog_val = read_tag(str(PLC_IP_ADDRESS), 'watchdog_INT')
try:
return (randval - 1) == watchdog_val[0]
except (KeyError, TypeError):
return False
def fracskid_sync(self, name, value):
"""Sync all data from the driver."""
self.forceSend = True
# self.sendtodb("log", "synced", 0)
return True
def fracskid_writeplctag(self, name, value):
"""Write a value to the PLC."""
new_val = json.loads(str(value).replace("'", '"'))
tag_n = str(new_val['tag']) # "cmd_Start"
val_n = new_val['val']
w = write_tag(str(PLC_IP_ADDRESS), tag_n, val_n)
print("Result of fracskid_writeplctag(self, {}, {}) = {}".format(name, value, w))
if w is None:
w = "Error writing to PLC..."
return w

View File

@@ -0,0 +1,21 @@
"""Data persistance functions."""
# if more advanced persistence is needed, use a sqlite database
import json
def load(filename="persist.json"):
"""Load persisted settings from the specified file."""
try:
with open(filename, 'r') as persist_file:
return json.load(persist_file)
except Exception:
return False
def store(persist_obj, filename="persist.json"):
"""Store the persisting settings into the specified file."""
try:
with open(filename, 'w') as persist_file:
return json.dump(persist_obj, persist_file)
except Exception:
return False

View File

@@ -0,0 +1,54 @@
"""Utility functions for the driver."""
import socket
import struct
def get_public_ip_address():
"""Find the public IP Address of the host device."""
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
ip = s.getsockname()[0]
s.close()
return ip
def int_to_float16(int_to_convert):
"""Convert integer into float16 representation."""
bin_rep = ('0' * 16 + '{0:b}'.format(int_to_convert))[-16:]
sign = 1.0
if int(bin_rep[0]) == 1:
sign = -1.0
exponent = float(int(bin_rep[1:6], 2))
if exponent == 30:
fraction = float(int("1" + bin_rep[7:17], 2))
else:
fraction = float(int(bin_rep[7:17], 2))
if exponent == float(0b00000):
return sign * 2 ** -14 * fraction / (2.0 ** 10.0)
elif exponent == float(0b11111):
if fraction == 0:
return sign * float("inf")
else:
return float("NaN")
else:
frac_part = 1.0 + fraction / (2.0 ** 10.0)
return sign * (2 ** (exponent - 15)) * frac_part
def ints_to_float(int1, int2):
"""Convert 2 registers into a floating point number."""
mypack = struct.pack('>HH', int1, int2)
f = struct.unpack('>f', mypack)
print("[{}, {}] >> {}".format(int1, int2, f[0]))
return f[0]
def degf_to_degc(temp_f):
"""Convert deg F to deg C."""
return (temp_f - 32.0) * (5.0/9.0)
def degc_to_degf(temp_c):
"""Convert deg C to deg F."""
return temp_c * 1.8 + 32.0

Binary file not shown.