之前介绍仪器控制启动是按维护的调用M和仪器ID组串直接j启动进程,进程在调用Start启动TCP。
组装执行M串用j启动进程
启动TCP通道,成功之后就到f的死循环了
死循环这里容易有个误解,以为Stop是停止仪器接口的。其实这个Stop是判断要不要退出死循环的,返回需要退出循环就q。然后程序往下执行就执行完了。等于停止了仪器控制。
Stop逻辑并不是停止,只是每轮循环检测仪器表是否标记要停止接口。标记不启动就返回1,退出死循环,让仪器接口执行到结束。
为什么接口异常会停止仪器控制。并不是控制了停止,而是异常导致执行跳出for循环后往下执行到尾了。所有确保逻辑不跳出for循环就是不停接口。比如给Main捕获异常,吃掉异常。
为什么仪器控制界面停止接口好使就是设置仪器标识变量。然后让接口下一轮退出死循环。停止慢的原因也是要等待接口逻辑运行到下一轮的Stop判断。如果接口本身就没执行死循环和Stop,那种这种停止是没效果的,他依赖程序自己跳出for循环。
下面这个接口正常停止时间可能就长达到10秒,改停止标识前正好开始Main,然后等待R的10秒超时或者仪器正在传数据,等把数据处理完,数据处理慢的话可能时间就更不可控了。正常停止有个好处就是不会破坏通讯完整性,比如通讯执行一半被强行结束(比如上传通道到一半或者接收一半数据等),是在完整一轮退出的。
强制停止快的原因是直接杀进程了。如果仪器表存的进程号本身就不对或者不在那么强制停止也是不好使的。比如仪器启动在1号ECP上的998进程,这时候仪器表存的进程号是998.如果把仪器启动Webservice地址改2号ECP,这时候去停止仪器控制是有用的,因为它是改仪器表运行标识,等接口自己退出死循环的。但这时候强制停止是不行的,因为在2号ECP998进程可能不存在。存在也不是仪器接口的。
总结就是在接口正常运行的情况普通停止是客户忽略不同ECP的。只要能更新仪器表标识就能。而强制停止如果执行停止逻辑ECP和启动ECP不同就停不了,而且会误杀其他进程。正常停止不了的情况应该是接口在for循环的Main里面卡住了,Main内部死循环**(Main逻辑有死循环就不用指望能正常停止,一般正常停止不了也要注意接口可能写死循环了)**,一直没有调用Stop的机会。这时候如果启动地址变化导致强制停止服务器不同的话就只能一个个ECP找仪器锁^MILOCK然后停止进程去了。
1.Main内部死循环会导致无法正常停止,这时候可以强制停止,建议能正常停止的还是正常停止,确保通讯完整性。
2.如果这时候还改仪器启动配置了,导致强制停下杀进程不对就找^MILOCK结束进程