前段时间用西门子提供的Prodave5.5开发了基于YFIOServer的驱动程序,很可惜以太网方式它不支持,所以只好用西门子的softnet来开发相应的驱动了。
SoftNet的服务程序
目前采用的是同步方式的读写,可支持自恢复功能。
(采用异步方式初次读写可以成功,下次在读写时却失败,不是很明白!)
读写核心代码:
int fix_field_read(int Addr,int intNum,BYTE *bDataValue,long lngMode,int blockno)
{
struct S7_READ_PARA read_para;
int32 iRet;
ord16 orderid=0;
long lngTimeNum=0;
long lngOK=1;
read_para.access=S7_ACCESS_SYMB_ADDRESS;
switch(lngMode)
{
case MODE_I:
sprintf(read_para.var_name,"IB%d,%d",Addr,intNum);
break;
case MODE_Q:
sprintf(read_para.var_name,"QB%d,%d",Addr,intNum);
break;
case MODE_M:
sprintf(read_para.var_name,"MB%d,%d",Addr,intNum);
break;
case MODE_DB:
sprintf(read_para.var_name,"DB%d,B%d,%d",blockno,Addr,intNum);
break;
}
//IOF->ShowMessage(1,1,read_para.var_name,"--");
iRet=s7_read_req(cp_descr,cp_cref,0,&read_para);
if(iRet!=S7_OK)
{
//IOF->ShowMessage(1,1,read_para.var_name,"s7_read_req");
return 1000;
}
do
{
iRet=s7_receive(cp_descr,&cp_cref,&orderid);
switch(iRet)
{
case S7_READ_CNF:
{
//--------------------------------
if(s7_get_read_cnf(( void *)0,(ord16 *)&intNum,(void *)bDataValue)!=S7_OK)
{
return 1001;
}
lngTimeNum=IOD->Overtime+1;
//----------------------------------
lngOK=0;
}
break;
default:
Sleep(1); //等待1ms
break;
}
} while(lngTimeNum++<iod->Overtime && iRet!=S7_ABORT_IND);<br><br>return lngOK;<br>}</iod->
int fix_field_write(int Addr,int intNum,BYTE *bDataValue,long lngMode,int blockno)
{
struct S7_WRITE_PARA write_para;
int32 iRet;
ord16 orderid=0;
long lngTimeNum=0;
long lngOK=1,i;
write_para.access=S7_ACCESS_SYMB_ADDRESS;
switch(lngMode)
{
case MODE_I:
return 999;
break;
case MODE_Q:
sprintf(write_para.var_name,"QB%d,%d",Addr,intNum);
break;
case MODE_M:
sprintf(write_para.var_name,"MB%d,%d",Addr,intNum);
break;
case MODE_DB:
sprintf(write_para.var_name,"DB%d,B%d,%d",blockno,Addr,intNum);
//IOF->ShowMessage(1,1,write_para.var_name,"fix_field_write");
break;
}
write_para.var_length=intNum;
for(i=0;i<intnum></intnum>{
write_para.value[i]=bDataValue[i];
}
iRet=s7_write_req(cp_descr,cp_cref,0,&write_para,(void *)0);
if(iRet!=S7_OK)
{
//IOF->ShowMessage(1,1,"Error:s7_write_req","fix_field_write");
return 1000;
}
do
{
iRet=s7_receive(cp_descr,&cp_cref,&orderid);
switch(iRet)
{
case S7_WRITE_CNF:
{
//--------------------------------
if(s7_get_write_cnf()!=S7_OK)
{
return 1001;
}
lngTimeNum=IOD->Overtime+1;
//----------------------------------
lngOK=0;
}
break;
default:
Sleep(1); //等待1ms
break;
}
} while(lngTimeNum++<iod->Overtime && iRet!=S7_ABORT_IND);<br><br>return lngOK;<br>}</iod->
注意:I和Q变量不知为什么,读写失败。
<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>
相关推荐
SIMATIC NET PG/PC - 工业以太网 SOFTNET-IE RNA - 操作说明[手册]pdf,
#资源达人分享计划#
西门子工业以太网系统接口技术问题1pdf,西门子工业以太网系统接口技术问题1:如何通过固件加载工具下载固件到工业以太网模块S7-300的CP和S7-400的CP?此说明描述了如何通过固件加载工具下载固件到工业以太网模块S7-...
语言:polski 应用程序在浏览器中使用合格的签名。 允许您使用合格的签名(其中一个波兰供应商:KIR,SIGILLUM,UNIZETO,CENCERT,EUROCERT)以及授权和公司电子银行系统SoftNet上的身份验证。
v2013.12.01 add some info for Softnet Security Client v4.0 v2013.05.26 add some info for WinCC v7.2 v2013.03.08 fix 1 key for TIA Portal v12 v2013.03.03 add TIA Portal v12, S7-Technology, fix Unicode ...
这个 Java 类库是各种项目中经常需要的工具的集合,但遗憾的是没有进入标准 Java API。 这些实用程序用于 SourceForge 上的几个可用项目。
s7-200 驱动 用于和s7-200和WICC链接,采集术数据,
工业以太网安全-安全基础知识和应用-配置手册
S7-400H培训资料-冗余I/Orar,S7-400H培训资料-冗余I/O
在虚拟环境下,如何通过普通网卡实现WinCC和S7-400H的冗余连接?...从V8.2开始,SIMATIC NET支持SOFTNET- IE S7 REDCONNECT VM ,即普 通网卡都可以在虚拟机环境中使用并建立 WinCC和S7- 400H 的容错连接。
UMI复制工具,内含一些狗数据,可以直接写狗。
基于稀疏自动编码器和softmax回归的心室早搏诊断新方法
1122 NSIESE71 SIFLNSIESE0701 NET Industrial Ethernet SOFTNET-S7 Power Pack v7.1 1123 NSIESL71 SIFLNSIESL0701 NET Industrial Ethernet SOFTNET-S7 Lean v7.1 1124 NSPBDP71 SIFLNSPBDP0701 ...
softnet_data Structure XX数据结构 Chapter 10. Frame Reception 帧接收 Section 10.1. Interactions with Other Features 与其它特性交互 Section 10.2. Enabling and Disabling a Device 设备的使能与去使能 ...
/proc/net/softnet_stat 网络事件已处理 时间挤压事件 掉落事件 /proc/net/tcp 套接字队列(发送和接收)深度 在试图跟踪高吞吐量流量情况下的数据包丢失源时,监视这些指标可能很有用。 如何使用? Angler最简单...