SECS/GEM编程
金南瓜SECS/GEM SDK开发 |
广州金南瓜科技 |
1. 简介
该手册介绍SECS/GEM Demo代码阅读和测试,SECS/GEM代码的入口、控制、操作、回调响应等
2. C++ EquipViewApp
以下介绍代码阅读和使用
软件目录清单
2.1 SECS/GEM初始化
SECS/GEM函数代码:
BOOL CEquipViewAppDlg::OnInitDialog()
{
CMyDialogEx::OnInitDialog();
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
SetName();
ShowWindow(SW_SHOWNOACTIVATE);
SetNewCreateType(false); // 设置参数:本类非new方式创建的
// 初始化连接 SECS
InitConnect();
InitChildArea();
AddView();
InitTree();
// 初始化子窗口
InitCtrl();
InitChildView();
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
讲解:
1. SECS/GEM代码的入口在窗口类CEquipViewAppDlg的OnInitDialog()函数中
2. 首先初始化SECS类的通讯: InitConnect();
2.1 SECS/GEM创建通讯对象
try
{
m_pSecs = new CSecsEquip();
}
catch (...)
{
m_pSecs = nullptr;
}
2.2 初始化SECS DLL模块
RcResult rc = m_pSecs->Start();
2.3 设置各项SECS/GEM的参数
rc = m_pSecs->SetIP(g_appdata.m_pAddress);
rc = m_pSecs->SetPort(g_appdata.m_nPort);
rc = m_pSecs->SetPassive(g_appdata.m_bPassive);
rc = m_pSecs->SetDeviceID(g_appdata.m_nDeviceID);
rc = m_pSecs->SetMDLN(g_appdata.m_pInterfaceName);
rc = m_pSecs->SetEnableLog(g_appdata.m_bEnableLog);
rc = m_pSecs->SetT1(g_appdata.m_nTimeout[0]);
rc = m_pSecs->SetT2(g_appdata.m_nTimeout[1]);
rc = m_pSecs->SetT3(g_appdata.m_nTimeout[2]);
rc = m_pSecs->SetT4(g_appdata.m_nTimeout[3]);
rc = m_pSecs->SetT5(g_appdata.m_nTimeout[4]);
rc = m_pSecs->SetT6(g_appdata.m_nTimeout[5]);
rc = m_pSecs->SetT7(g_appdata.m_nTimeout[6]);
// SECS/GEM设置回调
m_pSecs->SetClientData(this);
m_pSecs->m_pTerminalCallback = ::OnTerminalProc;
m_pSecs->m_pStateChangeCallback = ::OnStateChangeProc;
m_pSecs->m_pRemoteCallback = ::OnRemoteProc;
// 示例的回调
m_pSecs->m_pConstantsChangeCallback = ::OnConstantChangeProc;
m_pSecs->m_pVarValueProc = ::OnVarValueProc;
m_pSecs->m_pConstantValueProc = ::OnVarValueProc;
m_pSecs->m_pPPNameListProc = ::OnPPNameListProc;
m_pSecs->m_pPPEventProc = ::OnSecsPPEventProc;
rc = m_pSecs->SetControlMode((CONTROL_MODE)g_appdata.m_nControlMode);
2.4 开始SECS/GEM的通讯
rc = m_pSecs->CommEnable();
2.2 Communication、Control状态获取改变
代码:
注册回调函数
m_pSecs->m_pStateChangeCallback = ::OnStateChangeProc;
处理代码
void OnStateChangeProc(CSecsEquip* pSH, const char* varname, int nState)
{
CEquipViewAppDlg* pHV = (CEquipViewAppDlg* )pSH->GetClientData();
if(pHV != nullptr)
{
string pType = varname;
if(pType == "comm_state")
{
pHV->PostMsgToView("Connect", ON_COMM_CHANGE, eCommStateChange, nState);
pHV->PostMsgToView("Event", ON_COMM_CHANGE, eCommStateChange, nState);
pHV->PostMsgToView("Variable", ON_COMM_CHANGE, eCommStateChange, nState);
pHV->SendMessage(ON_COMM_CHANGE, eCommStateChange, nState);
}
else if(pType == "control_state")
{
pHV->PostMsgToView("Connect", ON_CONTROL_CHANGE, eControlStateChange, nState);
pHV->SendMessage(ON_CONTROL_CHANGE, eControlStateChange, nState);
}
}
}
讲解:
1. 何时调用:
当SECS/GEM的通讯状态、控制状态发生改变的时候,SDK将会调用该函数通知最新状态。
2. 关联行:
初始化的时候,把该函数添加到回调中。
m_pSecs->m_pStateChangeCallback = ::OnStateChangeProc;
3. PostMsgToView的作用
上边函数收到状态信息后,将该数据通知到各个窗口里面。
4. 所需工作
显示到主界面中,显示实时的SECS/GEM状态在设备软件上
2.3 远程控制接收
代码:
注册回调函数
m_pSecs->m_pRemoteCallback = ::OnRemoteProc;
处理代码
LRESULT CAutoSimpleView::OnRemoteProc(WPARAM wp, LPARAM lp)
{
REMOTE_DATA rd = *((REMOTE_DATA*)lp);
if(rd.pRCMD == "PP-SELECT")
{
const char* pRecipeName = rd.GetValue("RecipeName");
if (pRecipeName == nullptr)
{
// 找不到recipe名称参数
return ::eCOMMAND_PARAMETER_IS_INVALID;
}
// 调用切换recipe函数
// ChangeRecipe(pRecipeName)
// 发送切换完成事件
// 发送事件函数一般放在ChangeRecipe里面
m_pSecs->EventPos(ChangeRecipeStartedSimple);
SleepEx();
string pName = "Recipe:";
pName += pRecipeName;
m_staticRecipe.SetWindowText(pName.c_str());
m_pSecs->EventPos(ChangeRecipeCompleteSimple);
//处理成功
return eCOMMAND_PERFORMED;
}
return eCOMMAND_PERFORMED;
}
讲解:
1. 何时调用:
当SECS/GEM收到远程命令时候,SDK将会调用该函数通知设备处理。
2. 关联行:
初始化的时候,把该函数添加到回调中。
m_pSecs->m_pRemoteCallback = ::OnRemoteProc;
3. PostMsgToView的作用
上边函数收到状态信息后,将该数据通知到各个窗口里面。
4. SECS/GEM所需工作
根据处理远程指令,设备做出对应的处理。
2.4 变量更新
代码:
2.5 警报发送
1. 找到下边的界面,双击界面的Set或Clear按钮,进入代码
2. 警报发生的时候,只需将“警报ID”和“true状态”发送。
3. 警报清除后,只需将“警报ID”和“false状态”发送。
2.6 事件发送
1. 找到下边的界面,双击界面的“发送事件”按钮,进入代码
2. 事件发生的时候,只需发送对应的事件ID
3. C#版本 Equip C#
3.1 初始化
函数代码:
// SECS
void InitSecs(string IP, long nPort, bool bPassive, int nDeviceID)
{
RcResult rc = m_pSecs.start(/*"127.0.0.1"*/);
if (rc.rc != 0)
{
MessageBox.Show("连接SECS错误:" + rc.ToString());
}
m_pSecs.SetIP(IP);
m_pSecs.SetPort((int)nPort);
m_pSecs.SetPassive(bPassive);
m_pSecs.SetDeviceID(nDeviceID);
m_pSecs.LoadDataByCsvFile();
m_pSecs.SetRecipeDirectory("D://");
m_pSecs.SetEnableLog(true);
m_pSecs.SetControlMode(CONTROL_MODE.eCONTROL_MODE_OFFLINE);
m_pSecs.SetWinrarPath("C:/Program Files/WinRAR/WinRAR.exe");
// 回调、委托
m_pSecs.m_pOnCommState = OnCommStateEventHandler;
m_pSecs.m_pOnControlState = OnControlStateEventHandler;
m_pSecs.m_pOnRemoteCommand = OnRemoteCommandEventHandler;
m_pSecs.m_pVarValueCallback = OnVariableValueHandler;
m_pSecs.m_pOnTerminal = OnTerminalEventHandler;
m_pSecs.m_pPPChangeNotifyProc = OnPPChangeNotifyEvent;
// m_pSecs.m_pOnClock 该函数已经内置设置
}
讲解:
代码在SecsAppView.cs中,该类是窗口对象
3.2 Communication、Control状态获取改变
注册委托函数:
m_pSecs.m_pOnCommState = OnCommStateEventHandler;
m_pSecs.m_pOnControlState = OnControlStateEventHandler;
代码:
将状态显示到界面上
// 状态
[Description("控制状态改变")]
void OnCommStateEventHandler(object sender, CommStateEventArgs e)
{
BeginInvoke(m_commState, sender, e);
}
void OnCommStateEventShow(object sender, CommStateEventArgs e)
{
labelCommState.Text = CSecsAssist.GetCommunicationText(e.nState);
}
[Description("通讯状态改变")]
void OnControlStateEventHandler(object sender, ControlStateEventArgs e)
{
BeginInvoke(m_controlState, sender, e);
}
void OnControlStateEventShow(object sender, ControlStateEventArgs e)
{
labelControlState.Text = CSecsAssist.GetControlText(e.nState);
}
SECS/GEM编程相关推荐
- PLC SECS/GEM解决方案,设计与应用
1 适用性 金南瓜SECS是最适应于全自动智能设备的选择. 适用行业:半导体.光伏.PCB等 全面支持E5.E30.E37.E40.E87.E90.E94.E116 PLC SECS/GEM具有怪兽级 ...
- SECS/GEM通信协议学习之报文
SECS/GEM通信协议学习笔记之报文格式 转载自他山之石 一.HSMS报文格式 HSMS 报文消息长度用一个 4 字节无符号整数表示,它表示消息头部和消息文本的总字节数,在传输过程中,高字节在前,低 ...
- EAP通讯基础之SECS/GEM/GEM300mm
EAP系统用于控制半导体设备进行自动化生产.与MES系统整合,校验产品信息,自动做账,同时收集产品生产过程中的制程数据和设备参数数据,帮助提高半导体工厂的生产效率,避免人工操作失误,提高产品良率. 而 ...
- 半导体通讯标准EAP、SECS/GEM视频介绍
GEM(或SECS / GEM)是由半导体设备材料倡议制定的一组连接标准.这些标准用于定义自动化设备与主机工厂网络之间的通信,从而实现智能工厂制造. SECS是半导体设备通信标准的首字母缩写.GEM是 ...
- SECS/GEM/GEM300/EAP 讲解(三)半导体协议
来自secs/gem网站 www.secsgem.cn 第一章 介绍 第二章 GEM 收集事件 第三章 数据轮询 第四章 GEM 工厂应用支持 第五章 报警 第六章 配方管理 第七章 文档 第八章 设 ...
- SECS/GEM EAP 设备自动化功能原理和设计方案
半导体EAP(Equipment Automation Programming)实现了对生产线上机台的实时监控,是工厂自动化不可缺少的控制系统.EAP系统与FAB中的机台紧密相关,系统的设计与开发必须 ...
- SECS/GEM之SECS Driver开发源代码
1 简介 1. Secs Driver 由金南瓜科技提供,适用于半导体.光伏.面板.PCB等行业 支持C.C++.C#等编程语言(C#对应C#DLL库) 2. SECS Driver集成E5,E37的 ...
- SECS/GEM使用
1. 介绍 金南瓜SECS是最适应于全自动智能设备的选择. DMS SECS具有怪兽级的强劲性能,全面升级的高适应性,易用友好的SECS工具,利于快速开发部署. 金南瓜SECS兼容运行在独自工控机,或 ...
- SECS/GEM 半导体设备通讯标准学习笔记
1. SECS/GEM简介 SEMI:Semiconductor Equipment and Materials International 国际半导体设备与材料产业协会 SECS:Semicondu ...
- HSMS/SECS/GEM/GEM300半导体通讯协议介绍
HSMS/SECS/GEM/GEM300半导体通讯协议解决方案介绍 目录 SECS/GEM协议通讯 1 目录 2 1.介绍 3 1.1 产品概述 3 1.1.1 高扩展性 4 1.2 通讯实现 4 1 ...
最新文章
- 1000+ 常用 Python 库一览
- 安装nvidia-docker2
- 计算两个日期相差的小时差
- HTTP通信协议的组成
- WM_Paint 消息疑问解析
- python生成配置文件config_Python configparser模块封装及构造配置文件
- linux18.04循环登陆,ubuntu18.04 循环登陆
- 正则翻译工具_PythonBasics 中文系列教程 · 翻译完成
- 【ubuntu安装交叉编译器】安装交叉编译器
- Hue中Sqoop导数报错Could not load db driver class: com.mysql.jdbc.Driver
- Palindrome Number之Java实现
- 十二款硬盘数据恢复软件,百分之九十五的人没听过!
- java word 添加图片_java – 在word文档中插入图片
- python 汉字转拼音拼音转汉字
- 原生JavaScript实现jQuery中的fadeIn和fadeOut淡入/出效果
- android ipad 传视频播放器,三种将本地视频导入到iPad中的方法
- SVN(subversion )服务端和客户端的下载安装使用
- 深度探索C++对象模型笔记
- 堪比 007 电影!通过一张照片找到拍照者的精确位置
- 如何读一个JavaWeb项目源代码