个人从事工控(PLC),PLC与VS的扫描和刷新方式不同,
在上百条任务同时执行时,PLC占据优势,整体扫描整体刷新,
而VS就个人接触,均为单任务扫描(VS开上百条进程不知道CPU会如何表现),
而PLC在大批数据高级运算字符信息处理通讯等方面编程难度和价位成倍提升,
所以想引入VS控制方式,而多任务执行又成为解决问题的首要问题。
假设系统环境要求如下:
1.此系统有:报警、手动、自动、复位 四种状态
a.报警:系统驱动执行某个任务,而等待N秒后发现此任务还未执行完成,这时候我需要界面提示出来
b.手动:系统在通过界面操作执行某个单独的任务
c.自动:系统复位完成并且无故障时,可以通过操作某个触发机制,上百个工站按照事先编辑好的任务同时执行,而每个工站内依次有若干任务,执行过程中如有执行任务超时需立即暂停所有自动运行任务,自动运行如无故障,单个工站的任务可循环执行,直到按下暂停按钮,所有自动任务暂停执行。
d.复位:系统在没有自动运行而且没有警报的情况下按照事先编辑好的任务依次执行。
系统任务如上所述,PLC执行此类任务毫无压力,而VS编程如何处理多任务刷新小弟暂时还没有完美的方案,还请各位大侠支招,只求思路,执行框架即可。
在上百条任务同时执行时,PLC占据优势,整体扫描整体刷新,
而VS就个人接触,均为单任务扫描(VS开上百条进程不知道CPU会如何表现),
而PLC在大批数据高级运算字符信息处理通讯等方面编程难度和价位成倍提升,
所以想引入VS控制方式,而多任务执行又成为解决问题的首要问题。
假设系统环境要求如下:
1.此系统有:报警、手动、自动、复位 四种状态
a.报警:系统驱动执行某个任务,而等待N秒后发现此任务还未执行完成,这时候我需要界面提示出来
b.手动:系统在通过界面操作执行某个单独的任务
c.自动:系统复位完成并且无故障时,可以通过操作某个触发机制,上百个工站按照事先编辑好的任务同时执行,而每个工站内依次有若干任务,执行过程中如有执行任务超时需立即暂停所有自动运行任务,自动运行如无故障,单个工站的任务可循环执行,直到按下暂停按钮,所有自动任务暂停执行。
d.复位:系统在没有自动运行而且没有警报的情况下按照事先编辑好的任务依次执行。
系统任务如上所述,PLC执行此类任务毫无压力,而VS编程如何处理多任务刷新小弟暂时还没有完美的方案,还请各位大侠支招,只求思路,执行框架即可。
PLC中开关一个继电器也算一个任务. 对照PC来说,只是设置一个逻辑变量为0或1而已.
二是记录任务完成时间.
三是记录任务完成状态.
四是判断任务执行时间,用于判定超时. 实现这几个关键点,其它的就非常好做了,而这几个关键点使用一个结构就好做了,如下:private type TaskType
TaskID as long '任务ID
StartTime as long '开始时间
FinishTime as long '完成时间
State as long '0=停止,1=执行,2=错误
RunningTime as long '执行时间
TimeOutValue as long '超时时间
end type
定义一个上面类型的动态数组,在你添加任务时增加一个与任务相关的成员,写入相关的参数(超时时间,关联的任务ID等),并在任务开始时记录当时的时间戳(使用GetTickCount函数).然后你肯定会有一个主循环或类似的机制判断每个任务的状态,在得到任务状态后,写入State.然后再次调用GetTickCount将当前值写入RunningTime中.然后就可以判断当前的任务的经过时间(RunningTime - StartTime),与当前任务的超时时间(TimeOutValue)比较,就能知道是否超时.而判断State就能得到当前任务的状态,根据不同状态触发不同的处理方式,比如State=1并且上面的判断没超时,就继续下一个任务判断;State=2的话就设置所有任务为停止状态,并通知界面,XX号任务超时中止.其它的处理就与此类似了,很简单吧嘿嘿.