WCF-流程编写IDEA
WCF-工业自动化开源框架:https://blog.csdn.net/u014608071/article/details/106757607
WCF-矩阵IDEA:https://blog.csdn.net/u014608071/article/details/107031863
源码下载地址:https://github.com/jiliwei/WCF
运行介绍:
在运行的目录内有一个存放流程的文件夹:AutoScript
A共用参数.txt的内容
B模拟上料.txt的内容
C模拟飞达.txt的内容
D模拟取料.txt的内容
E模拟贴合.txt的内容
F模拟下料.txt的内容
开发相关:
使用到:C#脚本引擎 CS-Script,CS-Script是个开源的脚本引擎,许可证为MIT,MIT是相对宽松的软件授权条款。所有是可以使用的。
添加CS-Script,有两种方法:
- VS2015+ 通过选中引用,鼠标右键“管理NuGet程序包”添加。
以上的步骤后等待下载并安装完成即可。这里说下,这样做是那个成功,但会引用很多个DLL,并且整个项目会增加200M到300M大小的相关文件。建议用个空项目这样添加好后再按照方法二来给正常使用的项目添加CS-Script;
- 直接把CSScriptLibrary.dll复制到项目,然后引用。
代码相关:
- using CSScriptLibrary;
- 增加Panel控件命名为panelAsProcess
- 创建加载的代码
TabControl tabCont = new TabControl();
string rootPath = Directory.GetCurrentDirectory();//获取应用程序的当前工作目录。
string[] files = Directory.GetFiles(rootPath + "\\AutoScript", "*.txt");//读取指定文件夹的所有TXT文件
foreach (string itemFile in files)
{
string strName = Path.GetFileNameWithoutExtension(itemFile);
TabPage tpPage = new TabPage();//增加选项卡
tpPage.Name = "tp" + strName;
tpPage.Text = strName;
tpPage.Dock = DockStyle.Fill;
RichTextBox rtbPara = new RichTextBox();//增加编辑器
rtbPara.Name = "rtb" + strName;
rtbPara.Dock = DockStyle.Fill;
StreamReader sr = new StreamReader(itemFile, Encoding.Default);
rtbPara.Text = sr.ReadToEnd();//给编辑器添加内容
sr.Close();
tpPage.Controls.Add(rtbPara);
tabCont.Controls.Add(tpPage);//子项添加到选项卡
}
tabCont.Name = "tcProcess";
tabCont.Dock = DockStyle.Fill;
panelAsProcess.Controls.Clear();
panelAsProcess.Controls.Add(tabCont);
- 运行按钮的代码
if (lTask.Count <= 0)
{
string scriptCode = "using System;\n" +
"using System.Windows.Forms;\n" +
"using WCF.WCFScript;\n" +
"public class AutoScript\n" +
"{\n";
string rootPath = Directory.GetCurrentDirectory();
string[] files = Directory.GetFiles(rootPath + "\\AutoScript", "*.txt");
TabControl tabCont = (TabControl)panelAsProcess.Controls["tcProcess"];//获取到选项卡控件
List<string> runNames = new List<string>();
foreach (string itemFile in files)
{
string strName = Path.GetFileNameWithoutExtension(itemFile);
TabPage tpCont = (TabPage)tabCont.Controls["tp" + strName];//获取到选项卡控件
RichTextBox rtbCont = (RichTextBox)tpCont.Controls["rtb" + strName];//获取到选项卡控件
scriptCode += rtbCont.Text;
if (!strName.Contains("共用参数"))
{
runNames.Add(strName);
}
}
scriptCode += "}";
helper = new AsmHelper(CSScript.LoadCode(scriptCode, null, false));
foreach (string item in runNames)
{
Thread thread = new Thread(new ParameterizedThreadStart(workRun));
thread.Start((object)item);
lTask.Add(thread);
}
btnAsRun.Text = "结束";
}
else
{
foreach (Thread item in lTask) { item.Abort(); }
lTask.Clear();
btnAsRun.Text = "运行";
}
public void workRun(object runName)
{
//应该是cs-script的异常,设置为不出异常才能启动另一个线程才能每次都能启动成功
//否则出现异常的概率会很大
autoRestart:
try
{
helper.Invoke("AutoScript." + runName.ToString());
}
catch (Exception e)
{
goto autoRestart;
}
}
具体代码可以下载源码查看自定义控件WCFAutoScript.cs的代码