Forum Replies Created
-
AuthorPosts
-
zzz
ParticipantSql version control tools: https://dbmstools.com/categories/version-control-tools/postgresql
-
This reply was modified 4 years, 6 months ago by
zzz.
zzz
ParticipantHowever, I know one guy ported configuration database to PostgreSQL and integrated it with the existing Agent service to upload projects to Rapid SCADA runtime.
That sounds very helpful, especially for data analysis in my project.
I’ve seen SQL script in the repositories for schema initalization.
Many python Flask projects do so. It’t not at uncommon.It seems a trend that many enterprise choose to employ BI system for business logic analysis and process optimization. They cost a lot and are more powerful.
External RDBMS will make it so easy to integrate with existing project.
The dat files are very efficient in performance, xml files are [fill in strong points here, I really can’t think of much], but they can’t be used with existing platforms.Another advantage, it’s much easier to manipulate in batch and validate with manual sql queries. In my current proejct, manually creating all the channels, lines, in the UI, is very tedious. Though they come in groups and share many similarity. Writing scripts to manipulate XML & validate relations directly, is much more work than doing it in a RDBMS workbanch tool.
Maybe SQLite could be a portable local choice? I have a WinCE handheld project communicating with remote SQLServer and use local SQLite as config/info cache storage. The CRUD operations are identical. I am not familiar with C#4+. The desktop RDBMS driver can only do better I suppose.
Pros:
To modify multiple channels, it can be done with text editor supports regular expression on any pc. I have been modifying the InCnl.xml in text editor more than the administrator app.
User may need to build many projects, or modify a project many times.If the config is a SQLite db, and you have a lightweighted RDBMS workbanch tool e.g. SQLWorkbanch/J. + SQLite driver. I bet you will list this as a Con point for XML.
Plus it’s easier to search, validate data cross table with queries to ensure that they are consistent.zzz
ParticipantHi Mikhail,
Just checking back to see if RS has any progress on this?
This is preventing us from puting RS into serious use at scale.
The instablity makes it infeasible for reliable sync at anything 1s sync rate.I mean adding a delay to a command in the module settings, not to request. If delay is added, commands are added to a queue instead of being sent directly. The queue should protect the server app from hanging.
Just curious, is this queue per output channel, per communication-line, per rule or per module?
zzz
Participant@MikHail: I have sent you the img via email. Unless someone has some not-yet-blocked less-known image hosting to recommend. I’v nowhere public to upload img.
@123abc56: You may be right about the racing condition. But anyhow, I guess we need thatcurrent data
table at that moment to inspect the problem. Too bad I didn’t snapshot that file.zzz
ParticipantNot that I don’t want to provide, but all file hosting service here require registration with cellphone which is now required by law, almost all foreign free img hosting are blocked.
zzz
Participant> How often does the problem occur?
Can’t say, sometimes it run fine for days w/o problem. Maybe could continue if not restarted? Sometimes it dies silently hours after restart.Yesterday moring, I found it stopped working around 01/19/23:30, about 6 hours after a restart. I can’t find the log anymore, it’s been overwritten. But everytime the server is restart after the silent death, it always give the
ThreadAbortException
message like shown in the above logs.I suspect some of the values in the channels got AutoControl crazy.
Every time I restart the ServerSrv w/ autocontrol disabled, I have to wait for the communicator to fully work. Or the next restsart with ServerSrv w/ autocontrol enabled, will usually fail. Pity, I just thought about this, can’t find snapshot of those values anymore. The archive is at 30 secs interval.
Mybe this could be an option for some troubleshoot feature to save a snapshot of current values.Could you shad some light, how could autocontrol module block the server thread processing communicator communiations?
> What is your scenario of using Auto Control Module?
– Sync data from sensor bus line to PLC bus lines.
– Unified control for process metrics.
– Execution of control message from production system.AutoControl Rules
<TrGroup active="true" name="F14"> <Trigger id="9" active="true" name="F14 WtReached" type="CnlDataTrigger"> <CnlDataTriggerProps> <CnlNum>11410</CnlNum> <ChkCnlVal>true</ChkCnlVal> <CnlValCond> <CompareOperator1>GreaterThan</CompareOperator1> <CompareArgument1>905</CompareArgument1> <LogicalOperator>None</LogicalOperator> <CompareOperator2>LessThan</CompareOperator2> <CompareArgument2>0</CompareArgument2> </CnlValCond> <Deadband>0</Deadband> <ChkCnlStat>false</ChkCnlStat> <CnlStat /> <Delay>0</Delay> <Repeat>1</Repeat> <RepeatCnt>2</RepeatCnt> </CnlDataTriggerProps> <Commands> <Command cmdTypeID="0"> <KPNum>0</KPNum> <CmdNum>4</CmdNum> <CtrlCnlNum>1405</CtrlCnlNum> <UserID>0</UserID> <Delay>0</Delay> <SendOnFiring>true</SendOnFiring> <SendOnNorm>false</SendOnNorm> <CopyCmdVal>false</CopyCmdVal> <CmdVal>1</CmdVal> </Command> </Commands> </Trigger> <Trigger id="3" active="true" name="Reset MCounter & MES CtrlBits On PreStart" type="EvTrigger"> <EvTriggerProps> <ChkObjNum>false</ChkObjNum> <ObjNum>2</ObjNum> <ChkKPNum>false</ChkKPNum> <KPNum>114</KPNum> <ChkParamID>false</ChkParamID> <ParamID>0</ParamID> <ChkCnlNum>true</ChkCnlNum> <CnlNum>11404</CnlNum> <ChkNewCnlVal>true</ChkNewCnlVal> <NewCnlValCond> <CompareOperator1>Equal</CompareOperator1> <CompareArgument1>1</CompareArgument1> <LogicalOperator>None</LogicalOperator> <CompareOperator2>LessThan</CompareOperator2> <CompareArgument2>0</CompareArgument2> </NewCnlValCond> <ChkCnlStat>false</ChkCnlStat> <NewCnlStat>0</NewCnlStat> <DescrCompareOper>None</DescrCompareOper> <Descr /> <DataCompareOper>None</DataCompareOper> <Data>1</Data> </EvTriggerProps> <Commands> <Command cmdTypeID="0"> <KPNum>0</KPNum> <CmdNum>1</CmdNum> <CtrlCnlNum>1401</CtrlCnlNum> <UserID>0</UserID> <Delay>0</Delay> <SendOnFiring>true</SendOnFiring> <SendOnNorm>false</SendOnNorm> <CopyCmdVal>false</CopyCmdVal> <CmdVal>1</CmdVal> </Command> <Command cmdTypeID="0"> <KPNum>0</KPNum> <CmdNum>1</CmdNum> <CtrlCnlNum>1402</CtrlCnlNum> <UserID>0</UserID> <Delay>0</Delay> <SendOnFiring>true</SendOnFiring> <SendOnNorm>false</SendOnNorm> <CopyCmdVal>false</CopyCmdVal> <CmdVal>0</CmdVal> </Command> <Command cmdTypeID="0"> <KPNum>0</KPNum> <CmdNum>1</CmdNum> <CtrlCnlNum>1403</CtrlCnlNum> <UserID>0</UserID> <Delay>0</Delay> <SendOnFiring>true</SendOnFiring> <SendOnNorm>false</SendOnNorm> <CopyCmdVal>false</CopyCmdVal> <CmdVal>0</CmdVal> </Command> </Commands> </Trigger> <Trigger id="16" active="true" name="F14 Flow" type="CnlDataTrigger"> <CnlDataTriggerProps> <CnlNum>1403</CnlNum> <ChkCnlVal>true</ChkCnlVal> <CnlValCond> <CompareOperator1>LessThan</CompareOperator1> <CompareArgument1>*00</CompareArgument1> <LogicalOperator>None</LogicalOperator> <CompareOperator2>LessThan</CompareOperator2> <CompareArgument2>0</CompareArgument2> </CnlValCond> <Deadband>1</Deadband> <ChkCnlStat>false</ChkCnlStat> <CnlStat /> <Delay>60</Delay> <Repeat>0</Repeat> <RepeatCnt>0</RepeatCnt> </CnlDataTriggerProps> <Commands> <Command cmdTypeID="0"> <KPNum>0</KPNum> <CmdNum>1</CmdNum> <CtrlCnlNum>1403</CtrlCnlNum> <UserID>0</UserID> <Delay>0</Delay> <SendOnFiring>true</SendOnFiring> <SendOnNorm>false</SendOnNorm> <CopyCmdVal>false</CopyCmdVal> <CmdVal>9</CmdVal> </Command> <Command cmdTypeID="1"> <KPNum>0</KPNum> <CmdNum>1</CmdNum> <CtrlCnlNum>1404</CtrlCnlNum> <UserID>0</UserID> <Delay>0</Delay> <SendOnFiring>true</SendOnFiring> <SendOnNorm>false</SendOnNorm> <CopyCmdVal>false</CopyCmdVal> <EditMode>Str</EditMode> <CmdDataStr>Flow overlimit</CmdDataStr> </Command> </Commands> </Trigger> <Trigger id="18" active="true" name="F14 Temp" type="CnlDataTrigger"> <CnlDataTriggerProps> <CnlNum>1407</CnlNum> <ChkCnlVal>true</ChkCnlVal> <CnlValCond> <CompareOperator1>LessThan</CompareOperator1> <CompareArgument1>*00</CompareArgument1> <LogicalOperator>Or</LogicalOperator> <CompareOperator2>GreaterThan</CompareOperator2> <CompareArgument2>*00</CompareArgument2> </CnlValCond> <Deadband>1</Deadband> <ChkCnlStat>false</ChkCnlStat> <CnlStat /> <Delay>60</Delay> <Repeat>0</Repeat> <RepeatCnt>0</RepeatCnt> </CnlDataTriggerProps> <Commands> <Command cmdTypeID="0"> <KPNum>0</KPNum> <CmdNum>1</CmdNum> <CtrlCnlNum>1403</CtrlCnlNum> <UserID>0</UserID> <Delay>0</Delay> <SendOnFiring>true</SendOnFiring> <SendOnNorm>false</SendOnNorm> <CopyCmdVal>false</CopyCmdVal> <CmdVal>9</CmdVal> </Command> <Command cmdTypeID="1"> <KPNum>0</KPNum> <CmdNum>1</CmdNum> <CtrlCnlNum>1404</CtrlCnlNum> <UserID>0</UserID> <Delay>0</Delay> <SendOnFiring>true</SendOnFiring> <SendOnNorm>false</SendOnNorm> <CopyCmdVal>false</CopyCmdVal> <EditMode>Str</EditMode> <CmdDataStr>Temp over limit</CmdDataStr> </Command> </Commands> </Trigger> <Trigger id="19" active="true" name="F14 Temp2" type="CnlDataTrigger"> <CnlDataTriggerProps> <CnlNum>1406</CnlNum> <ChkCnlVal>true</ChkCnlVal> <CnlValCond> <CompareOperator1>LessThan</CompareOperator1> <CompareArgument1>*0</CompareArgument1> <LogicalOperator>Or</LogicalOperator> <CompareOperator2>GreaterThan</CompareOperator2> <CompareArgument2>*0</CompareArgument2> </CnlValCond> <Deadband>1</Deadband> <ChkCnlStat>false</ChkCnlStat> <CnlStat /> <Delay>60</Delay> <Repeat>0</Repeat> <RepeatCnt>0</RepeatCnt> </CnlDataTriggerProps> <Commands> <Command cmdTypeID="0"> <KPNum>0</KPNum> <CmdNum>1</CmdNum> <CtrlCnlNum>1403</CtrlCnlNum> <UserID>0</UserID> <Delay>0</Delay> <SendOnFiring>true</SendOnFiring> <SendOnNorm>false</SendOnNorm> <CopyCmdVal>false</CopyCmdVal> <CmdVal>9</CmdVal> </Command> <Command cmdTypeID="1"> <KPNum>0</KPNum> <CmdNum>1</CmdNum> <CtrlCnlNum>1404</CtrlCnlNum> <UserID>0</UserID> <Delay>0</Delay> <SendOnFiring>true</SendOnFiring> <SendOnNorm>false</SendOnNorm> <CopyCmdVal>false</CopyCmdVal> <EditMode>Str</EditMode> <CmdDataStr>Temp2 over limit</CmdDataStr> </Command> </Commands> </Trigger> <Trigger id="21" active="true" name="F14 PH3" type="CnlDataTrigger"> <CnlDataTriggerProps> <CnlNum>1402</CnlNum> <ChkCnlVal>true</ChkCnlVal> <CnlValCond> <CompareOperator1>LessThan</CompareOperator1> <CompareArgument1>6</CompareArgument1> <LogicalOperator>None</LogicalOperator> <CompareOperator2>LessThan</CompareOperator2> <CompareArgument2>0</CompareArgument2> </CnlValCond> <Deadband>0</Deadband> <ChkCnlStat>false</ChkCnlStat> <CnlStat /> <Delay>90</Delay> <Repeat>0</Repeat> <RepeatCnt>0</RepeatCnt> </CnlDataTriggerProps> <Commands> <Command cmdTypeID="0"> <KPNum>0</KPNum> <CmdNum>1</CmdNum> <CtrlCnlNum>1403</CtrlCnlNum> <UserID>0</UserID> <Delay>0</Delay> <SendOnFiring>true</SendOnFiring> <SendOnNorm>false</SendOnNorm> <CopyCmdVal>false</CopyCmdVal> <CmdVal>9</CmdVal> </Command> <Command cmdTypeID="1"> <KPNum>0</KPNum> <CmdNum>1</CmdNum> <CtrlCnlNum>1404</CtrlCnlNum> <UserID>0</UserID> <Delay>0</Delay> <SendOnFiring>true</SendOnFiring> <SendOnNorm>false</SendOnNorm> <CopyCmdVal>false</CopyCmdVal> <EditMode>Str</EditMode> <CmdDataStr>PH3 over limit</CmdDataStr> </Command> </Commands> </Trigger> <Trigger id="5" active="true" name="F14 MCnt Sync" type="CnlDataChangeTrigger"> <CnlDataChangeTriggerProps> <CnlNum>1410</CnlNum> </CnlDataChangeTriggerProps> <Commands> <Command cmdTypeID="0"> <KPNum>0</KPNum> <CmdNum>1</CmdNum> <CtrlCnlNum>1402</CtrlCnlNum> <UserID>0</UserID> <Delay>0</Delay> <SendOnFiring>true</SendOnFiring> <SendOnNorm>false</SendOnNorm> <CopyCmdVal>true</CopyCmdVal> <CmdVal>0</CmdVal> </Command> </Commands> </Trigger> <Trigger id="14" active="true" name="CCuMix AccWt Sync" type="CnlDataChangeTrigger"> <CnlDataChangeTriggerProps> <CnlNum>19001</CnlNum> </CnlDataChangeTriggerProps> <Commands> <Command cmdTypeID="0"> <KPNum>0</KPNum> <CmdNum>1</CmdNum> <CtrlCnlNum>9001</CtrlCnlNum> <UserID>0</UserID> <Delay>0</Delay> <SendOnFiring>true</SendOnFiring> <SendOnNorm>false</SendOnNorm> <CopyCmdVal>true</CopyCmdVal> <CmdVal>0</CmdVal> </Command> </Commands> </Trigger> </TrGroup>
zzz
ParticipantIt’s this error.
The exact word isBrowsing archive is available only locally
zzz
Participantsigh, takes some fiddling…
Solution:
Creating an Empty project and download server profile. Then the events under Server>Archive becomes available again.Loading the old project, also choose download profile won’t solved the problem for old project. Comparing the path settings in UIs mentioned above, show no difference.
zzz
ParticipantAs said previously, I tried both CalcReal and Real for
– In Generator, set a data point channel=60000, value=200, state=1, Nothing happend – In Generator, set a data point channel=60000, value=200, state=200 Nothing happend
.
Previous to this test case,
I have a calculated channel configured similarly. asSomeFormula(CnlVal);Val()>905? 200:1
The customized event type id=200, color=green.
I can see the numbers turn to green in WebStation table number display.
But the event type trigger in Auto Control is never fired.
Since I can’t open the any log under Server/Archive/ from RSAdmin,
I was unable to verify if the event has fired.
But the test case involving Generator seems to suggest AutoControl didn’t pick up customized eventtype.zzz
ParticipantI am not sure where to upload the screenshot to.
But no particular log, all logs under server\archive\*, The notifce is the same as in remote RSAdmin.-
This reply was modified 4 years, 9 months ago by
zzz.
December 29, 2020 at 8:02 am in reply to: Launch external code editor and/or store project code in cs file #7874zzz
ParticipantWhat is the format of this database, SQLite ?
zzz
Participantiirc, this happens after I tried to connect to server with a remote rsadmin setup. I copied the local project folder to remote machine and did some modificatino on the remote admin. After I realized the remote ones cant access the log, I abandoned the remote admin. (well, this may be irrelevant, I have no idea.)
-
This reply was modified 4 years, 9 months ago by
zzz.
zzz
ParticipantTried
CnlVal; CnlVal>10?200:1
with bothCalculated Real
andReal
none worked for the previously mentioned latter 2 cases.-
This reply was modified 4 years, 9 months ago by
zzz.
zzz
ParticipantPS:
Instance>Server>Common Parameters>Directories
also have the right path.
Plus, clicking theBrowse
Button on the above two locations opens the folder dialog, in which the specified folder is automatically located in the folder tree correctly.zzz
ParticipantThis is a Calcuated channel. Not sure why can’t Val() be used?
-
This reply was modified 4 years, 6 months ago by
-
AuthorPosts