西门子smart模块6es7288-3ar02-0aa0 西门子smart模块6es7288-3ar02-0aa0 西门子smart模块6es7288-3ar02-0aa0
上海赞国自动化科技有限公司(西门子分销商)
上海赞国自动化科技有限公司
联系人: 颜工
电话(Tel):-021-31129695
传真(Fax):-021-67633621
联系QQ :983991865
24小时销售技术服务热线 :15000708648
地址(Add):上海市松江区思贤路1855弄91号
我公司只销售西门子原装 免费一年保修
【信誉 、诚信交易】【长期销售、安全稳定}
【称心满意、服务动力】【真诚面对、沟通无限】
【服务 、一诺千金】【质量承诺、客户满意】
现货库存;大量全新库存,款到48小时发货,无须漫长货期。
承诺一:1、 保证全新原装进口
承诺二:2、 保证安全准时发货
承诺三:3、 保证售后服务质量
流程一:1、客户确认所需采购产品型号
流程二:2、我方会根据询价单型号查询价格以及交货期,拟一份详细正规报价单
流程三:3,客户收到报价单并确认型号无误后订购产品
流程四:4、报价单负责人根据客户提供型号以及数量拟份销售合同
流程五:5、客户收到合同查阅同意后盖章回传并按照合同销售额汇款到公司开户行
流程六:6、我公司财务查到款后,业务员安排发货并通知客户跟踪运单
西门子网上总代理. .西门子网上代理 ..西门子代理. .西门子总代理 ..
西门子全球总代理. .西门子亚洲总代理.. 西门子中国总代理. .西门子上海总代理
西门子松江总代理.. 西门子工业总代理 ..西门子工业自动化总代理.. 西门子驱动技术总代理
西门子工业自动化产品商务总代理.. 西门子总代理旗舰代理商. .西门子授权指定总代理
西门子推荐 中国总代理.. 西门子总代理 经销商. .西门子 合作伙伴.. 西门子plc总代理
西门子simatic s7 系列总代理.. 西门子逻辑控制模块logo!总代理.
西门子s系列直流电源总代理24v dc.. 西门子hmi 触摸屏总代理.. 西门子交流变频器总代理..
西门子全数字直流调速装置总代理 西门子数控总代理 西门子伺服总代理 西门子总代理
西门子代理.. 西门子总代理旗舰代理商 ..西门子电缆总代理
西门子s7-200plc s7-20销售订货型号大全:
s7-200cpu
6es7 211-0aa23-0b0 cpu221 dc/dc/dc,6输入/4输出
6es7 211-0ba23-0b0 cpu221 继电器输出,6输入/4输出
6es7 212-1ab23-0b8 cpu222 dc/dc/dc,8输入/6输出
6es7 212-1bb23-0b8 cpu222 继电器输出,8输入/6输出
6es7 214-1ad23-0b8 cpu224 dc/dc/dc,14输入/10输出
6es7 214-1bd23-0b8 cpu224 继电器输出,14输入/10输出
6es7 214-2ad23-0b8 cpu224xp dc/dc/dc,14di/10do,2ai/1ao(pnp)
6es7 214-2as23-0b8 cpu224xpsi dc/dc/dc,14di/10do,2ai/1ao(npn)
6es7 214-2bd23-0b8 cpu224xp 继电器输出,14di/10do,2ai/1ao
6es7 216-2ad23-0b8 cpu226 dc/dc/dc,24输入/16输出
6es7 216-2bd23-0b8 cpu226 继电器输出,24输入/16输出
s7-200扩展模块
6es7 221-1bh22-0a8 em221 16入 24vdc,开关量
6es7 221-1bf22-0a8 em221 8入 24vdc,开关量
6es7 221-1ef22-0a0 em221 8入 120/230vac,开关量
6es7 222-1bf22-0a8 em222 8出 24vdc,开关量
6es7 222-1ef22-0a0 em222 8出 120v/230vac,0. 开关量
6es7 222-1hf22-0a8 em222 8出 继电器
6es7 222-1bd22-0a0 em222 4出 24vdc 固态-mosfet
6es7 222-1hd22-0a0 em222 4出 继电器 干触点
6es7 223-1bf22-0a8 em223 4入/4出 24vdc,开关量
6es7 223-1hf22-0a8 em223 4入 24vdc/4出 继电器
6es7 223-1bh22-0a8 em223 8入/8出 24vdc,开关量
6es7 223-1ph22-0a8 em223 8入 24vdc/8出 继电器
6es7 223-1bl22-0a8 em223 16入/16出 24vdc,开关量
6es7 223-1pl22-0a8 em223 16入 24vdc/16出 继电器
6es7 223-1bm22-0a8 em223 32入/32出 24vdc,开关量
6es7 223-1pm22-0a8 em223 32入 24vdc/32出 继电器
6es7 231-0hc22-0a8 em231 4入*12位精度,模拟量
6es7 231-0hf22-0a0 em231 8入*12位精度,模拟量
6es7 231-7pb22-0a8 em231 2入*热电阻,模拟量
6es7 231-7pc22-0a0 em231 4入*热电阻,模拟量
6es7 231-7pd22-0a8 em231 4入*热电偶,模拟量
6es7 231-7pf22-0a0 em231 8入*热电偶,模拟量
6es7 232-0hb22-0a8 em232 2出*12位精度,模拟量
6es7 232-0hd22-0a0 em232 4出*12位精度,模拟量
6es7 235-0kd22-0a8 em235 4入/1出*12位精度,模拟量
6es7 277-0aa22-0a0 em277 profi-dp接口模块
6es7 253-1aa22-0a0 em253 位控模块
6es7 241-1aa22-0a0 em241 调制解调器模块
6gk7 243-1ex01-0e0 cp243-1 工业以太网模块
6gk7 243-1gx00-0e0 cp243-1it 工业以太网模块
s7-200附件
6es7 291-8gf23-0a0 mc291,新cpu22x存储器盒,64k
6es7 297-1aa23-0a0292,cpu22x时钟/日期电池盒
6es7 291-8ba20-0a0 bc293,cpu22x电池盒
6es7 290-6aa20-0a0 扩展电缆,i/o扩展,0.8米,cpu22x/em
6es7 901-3cb30-0a0 编程/通讯电缆,pc/ppi,带光电隔离,5-开关,5m
6es7 901-3db30-0a0 编程/通讯电缆,pc/ppi,带光电隔离b接口,5-开关
6es7 292-1ad20-0aa0 cpu22x/em端子连接器块,7个端子,可拆卸
6es7 292-1ae20-0aa0 cpu22x/em端子连接器块,12个端子,可拆卸
6es7 292-1ag20-0aa0 cpu22x/em连接器块,18个端子,可拆卸
6av6 640-0aa00-0ax0 td400c文本显示器
6ep1 332-1sh31 专为s7-200 设计电源,24v/3. 可并联5个
6es7 810-03-0yx0 step 7-micro/win32 v4.0 包含sp6升级包
当plc投入运行后,其工作过程一般分为三个阶段,即输入采样、用户程序执行和输出刷新三个阶段。完成上述三个阶段称作一个扫描周期。在整个运行期间,plc的cpu以一定的扫描速度重复执行上述三个阶段。
输入采样 折叠
在输入采样阶段,plc以扫描方式依次地读入所有输入状态和数据,并将它们存入i/o映象区中的相应得单元内。输入采样结束后,转入用户程序执行和输出刷新阶段。在这两个阶段中,即使输入状态和数据发生变化,i/o映象区中的相应单元的状态和数据也不会改变。因此,如果输入是脉冲信号,则该脉冲信号的宽度必须大于一个扫描周期,才能保证在任何情况下,该输入均能被读入。
用户程序执行 折叠
在用户程序执行阶段,plc总是按由上而下的顺序依次地扫描用户程序(梯形图)。在扫描每一条梯形图时,又总是先扫描梯形图左边的由各触点构成的控制线路,并按先左后右、先上后下的顺序对由触点构成的控制线路进行逻辑运算,然后根据逻辑运算的结果,刷新该逻辑线圈在系统ram存储区中对应位的状态;或者刷新该输出线圈在i/o映象区中对应位的状态;或者确定是否要执行该梯形图所规定的特殊功能指令。
即,在用户程序执行过程中,只有输入点在i/o映象区内的状态和数据不会发生变化,而其他输出点和软设备在i/o映象区或系统ram存储区内的状态和数据都有可能发生变化,而且排在上面的梯形图,其程序执行结果会对排在下面的凡是用到这些线圈或数据的梯形图起作用;相反,排在下面的梯形图,其被刷新的逻辑线圈的状态或数据只能到下一个扫描周期才能对排在其上面的程序起作用。
输出刷新 折叠
当扫描用户程序结束后,plc就进入输出刷新阶段。在此期间,cpu按照i/o映象区内对应的状态和数据刷新所有的输出锁存电路,再经输出电路驱动相应的外设。这时,才是plc的真正输出。
同样的若干条梯形图,其排列次序不同,执行的结果也不同。另外,采用扫描用户程序的运行结果与继电器控制装置的硬逻辑并行运行的结果有所区别。当然,如果扫描周期所占用的时间对整个运行来说可以忽略,那么二者之间就没有什么区别了。
承诺一:1、 保证全新原装进口
承诺二:2、 保证安全准时发货
承诺三:3、 保证售后服务质量
流程一:1、客户确认所需采购产品型号
流程二:2、我方会根据询价单型号查询价格以及交货期,拟一份详细正规报价单
流程三:3,客户收到报价单并确认型号无误后订购产品
流程四:4、报价单负责人根据客户提供型号以及数量拟份销售合同
流程五:5、客户收到合同查阅同意后盖章回传并按照合同销售额汇款到公司开户行
流程六:6、我公司财务查到款后,业务员安排发货并通知客户跟踪运单
rtserver 选件进行模块化扩展,以便在各种 simatic hmi 系统之间进行通讯和进行远程维护
运用vc#编程通过opc方式实现pc机与西门子plc通讯
1、 配置opc服务器
对于服务器的配置与同步通讯的配置一样,这里不需再讲解,若有不清楚的,可以参阅之前发布的<运用vc#编程通过opc方式实现pc机与西门子plc通讯>
2、 opc编程
变量组、项的命名规则与同步通讯的一样,这里不再描叙,下面主要就开发一个异步通讯类 asynserver来讲解如何编程。
<1>、引用
在vc#开发环境中添加对opcrcw.da库以及opcrcwn库的引用,该库属于库,不属库,西门子虽然编写了类库,以提供对平台的支持,但这些类库仍然难于编程,里面包含了大量的在托管和非托管区传输数据,因此我们需要在它的基础上再开发一个类库,以简化以后的编程,首先在类的开头使用命名空间:
<2>、编程
异步编程的原理就是在opc服务器那边检测当前活动的变量组,一但检测到某一个变量,譬如变量q0.0从1变成0,就会执行一个回调函数,以实现针对变量发生变化时需要实现的动作,在这里可以采用委托来实现该功能。
1、 在命名空间的内部、类 asynserver声明之前添加委托的申明:
// 定义用于返回发生变化的项的值和其对应的客户句柄
public delegate void datachange(object[] values,int[] itemsid);
2、 该类继承于西门子提供的库接口iopcdatacallback
public class asynserver:iopcdatacallback
在类的开头部分声明变量:
struct groupstru
{
public int groupid;
public object groupobj;
}
internal const int locale_id = 0x407; //本地语言
private guid iidrequiredinterface;
private string servertype="";
private int hclientgroup = 0; //客户组号
private int nsvrgroupid; // server group handle for the added group
private hashtable hashgroup; //用于把组收集到一起
private int hclientitem=0; //item号
3、编写构造函数,接收委托参数已确定当数据发生变化时需要执行的方法入口点:
//创建服务器
//svrtype 服务器类型的枚举
//datachange 提供用于在数据发生变化时需要执行的函数入口
public asynserver(servertype svrtype,datachange datachange)
{
switch(svrtype)
{
case servertype.opc_simatichmi_ptpr
servertype="opc.simatichmi.ptpro";break;
case servertype.opc_simati:
servertype="opc.simati";break;
case servertype.opc_simati_dp:
servertype="opc.simati.dp";break;
case servertype.opc_simati_pd:
servertype="opc.simati.pd";break;
case servertype.opcserver_wi:
servertype="opcserver.wi";break;
}
hashgroup=new hashtable(11);
dtchange=datachange;
}
4、创建服务器
// 创建一个opc server接口
//error 返回错误信息
//若为true,创建成功,否则创建失败
public bool open(out string error)
{
error="";bool sess=true;
type svponenttyp ;
//获取 opc server 接口
iidrequiredinterface = typeof(iopcitemmgt).guid;
svponenttyp = system.type.gettypefromprogid(servertype);
try
{
//创建接口
piopcserver =(iopcserver)system.activator.createinstance(svponenttyp);
error="";
}
catch (system.exception err) //捕捉失败信息
{
error="错误信息:"+err.message;sess=false;
}
return sess;
}
5、 编写添加group的函数
///
/// 添加组
///
/// 组名
/// /创建时,组是否被激活
/// //组的刷新频率,以ms为单位
/// 返回错误信息
/// 若为true,添加成功,否则添加失败
public bool addgroup(string groupname,int bactive,int updaterate,out string error)
{
error="";bool sess=true;
int dwlcid = 0x407; //本地语言为英语
int prevupdaterate;
float deadband = 0;
// 处理非托内存
gchandle hdeadband;
intptr ptimebias = intptr.zero;
hdeadband = gchandle.alloc(deadband,gchandletype.pinned);
try
{
piopcserver.addgroup(groupname, //组名
bactive, //创建时,组是否被激活
updaterate, //组的刷新频率,以ms为单位
hclientgroup, //客户号
ptimebias, //这里不使用
(intptr)hdeadband,
dwlcid, //本地语言
out nsvrgroupid, //移去组时,用到的组id号
out prevupdaterate, //返回组中的变量改变时的 短通知时间间隔
ref iidrequiredinterface,
out pobjgroup1); //指向要求的接口
hclientgroup=hclientgroup+1;
groupstru grp=new groupstru();
grp.groupid=nsvrgroupid;grp.groupobj=pobjgroup1;
this.hashgroup.add(groupname,grp);//储存组信息
// 对异步操作设置回调,初始化接口
piconnectionpointcontainer = (iconnectionpointcontainer)pobjgroup1;
guid iid = typeof(iopcdatacallback).guid;
piconnectionpointcontainer.findconnectionpoint(ref iid,out piconnectionpoint);
piconnectionpoint.advise(this,out dwcookie);
}
catch (system.exception err) //捕捉失败信息
{
error="错误信息:"+err.message;sess=false;
}
finally
{
if (hdeadband.isallocated) hdeadband.free();
}
return sess;
}
6、 编写激活、或者取消激活组的函数
在同步编程中对于组的激活或者取消激活没有实质的意义,但在异步通讯编程中却异常重要,这是因为opc服务器只对当前处于活动状态的组中的变量进行监控,同时这也是很有必要的,因为我们可以把不同界面中的变量编程不同的组,即同一界面中的变量规成一个组,而在某一时刻提供给用户的只有一个界面,让该界面中用到的组处于活动状态,这样执行委托调用时只会执行于该界面中有关的变量检测,而如果让所有的组处于活动状态,则当前没有显示给用户的界面用到的变量若发生变化也会触发对委托函数的调用,这根本是没有必要的,同时会大大降低程序的性能,请严格控制组的激活。
///
/// 激活或者取消激活组
///
/// 指定组名
/// true为激活,false为取消激活
/// 若有错误,返回错误信息
/// 若为true,添加成功,否则添加失败
public bool acivegroup(string groupname,bool toactive,out string error)
{
error="";bool sess=true;
//通过名称获取组
object grp=((groupstru)hashgroup[groupname]).groupobj;
iopcgroupstatemgt groupstatemgt=(iopcgroupstatemgt)grp;
//初始化传递参数
intptr prequestedupdaterate = intptr.zero; //由客户指定的item更新间隔时间
int nrevupdaterate = 0; //由服务器返回的能够更新的 短时间间隔
intptr hclientgroup = intptr.zero; //客户组
intptr ptimebias = intptr.zero;
intptr pdeadband = intptr.zero;
intptr plcid = intptr.zero;
// 激活或者取消激活组
int nactive = 0;
gchandle hactive = gchandle.alloc(nactive,gchandletype.pinned);
if(toactive)
hactive.target = 1;
else
hactive.target = 0;
try
{
groupstatemgt.setstate(prequestedupdaterate,out nrevupdaterate,hactive.addrofpinnedobject(),ptimebias,pdeadband,plcid,hclientgroup);
}
catch(system.exception err)
{
error="错误信息:"+err.message;sess=false;
}
finally
{
hactive.free();
}
return sess;
}
7、 向指定的组中添加变量的函数
///
/// 向指定的组添加一系列项
///
/// 指定组名
/// 完整的item名数组
/// 由服务器返回读写数据时需要使用的item号
/// 无错误,返回true,否则返回false
public bool additems(string groupname,string[] itemsname,int[] itemsid)
{
bool sess=true;
opcitemdef[] itemdefarray=new opcitemdef[itemsname.length];
for(int i=0;i {
hclientitem=hclientitem+1; //客户项自动加1
itemdefarray[i].szesspath = ""; // 可选的通道路径,对于simatiic不需要。
itemdefarray[i].szitemid = itemsname[i]; // itemid, see above
itemdefarray[i].bactive = 1; // item is active
itemdefarray[i].hclient = hclientitem; // client handle ,在ondatachange中会用到
itemdefarray[i].dwblobsize = 0; // blob size
itemdefarray[i].pblob = intptr.zero; // pointer to blob
itemdefarray[i].vtrequesteddatatype = 4; //dword数据类型
}
//初始化输出参数
intptr presults = intptr.zero;
intptr perrors = intptr.zero;
try
{
// 添加项到组
object grp=((groupstru)hashgroup[groupname]).groupobj;
((iopcitemmgt)grp).additems(itemsname.length,itemdefarray,out presults,out perrors);
int[] errors = new int[itemsname.length];
intptr pos = presults;
marshal.copy(perrors, errors, 0,itemsname.length);
for(int i=0;i {
if (errors[i] == 0)
{
opcitemresult result = (opcitemresult)marshal.ptrtostructure(pos, typeof(opcitemresult));
itemsid[i] = result.hserver;
pos = new intptr(pos.toint32() + marshal.sizeof(typeof(opcitemresult)));
}
else
{
string pstrerror;
piopcserver.geterrorstring(errors[0],0x407,out pstrerror);
sess=false;
break;
}
}
setitenclient(groupname,itemsid,itemsid); //要求始终只有一个组被激活,才不会引起冲突。
}
catch (system.exception err) // catch for error in adding items.
{
sess=false;
//error="错误信息:"+error+err.message;
}
finally
{


