[netMarketing类库] SiemensProtocol:西门子PLC通讯类

命名空间:PLCLibrary.SiemensProtocol

功能:西门子PLC通讯类


功能详细说明:
这个类经测试可以支持S7 300, S7 1200, S7 1500等西门子PLC,勇哥已经经过实际项目的检验,高度可靠,大家可以放心使用。


常用函数列表:

public string BrandPLCModel { get; }
public bool ConnStatus { get; }
public bool DataChangeBusy { get; }
public int EndCode { get; }
public Dictionary<string, byte> Memory { get; }
public int Port { get; }
public bool PortChangeAvailable { get; }
public string SequenceINT16 { get; }
public string SequenceINT32 { get; }

public bool CpuModel(out string cpuModel);
//关闭连接plc
public void TcpClose();
//连接plc
public bool TcpConnect(string plcIPAddress, int plcPort = 102);
//读plc内存,范型
public bool TcpRead<T>(byte eMemory, int offset, int readLength, out List<T> readData, int bOffset = 0, int dbNo = 0);
//写plc内存,范型
public bool TcpWrite<T>(byte eMemory, int offset, int writeLength, List<T> writeData, int bOffset = 0, int dbNo = 0);



参考例子:

这个例子是从一个项目中截取的,演示了连接plc, 读写plc的基本方法。

int mareaBeginAddr = 0;
bool isReadMArea = false;
List<short> data = new List<short>();
List<float> Mdata = new List<float>();
float[] dataWrite = new float[16];
var simens = new PLCLibrary.SiemensProtocol(0);
IPAddress ipAddress;
IPAddress.TryParse(Program.setting.ServerIPAddress, out ipAddress);  //"192.168.22.10"
if (simens.TcpConnect(Program.setting.ServerIPAddress))
{
     conn = true;
     swHeart.Restart();
}
else
{
     OutErrInfo("plc连接失败!检查原因后需要重启程序!");
     return;
}
int beginAddr = int.Parse(addr[0]), offset = int.Parse(addr[1]);  //offset = 0; beginAddr = 15;
mareaBeginAddr = offset / 4;
if (isReadMArea)
      flag2 = simens.TcpRead((byte)PLCLibrary.eSiemensMemory.M, mareaBeginAddr, 14, out Mdata);
else
      flag2 = simens.TcpRead((byte)PLCLibrary.eSiemensMemory.DB, 0, 28, out data, offset, beginAddr);
if (!flag2)
{
     throw new ArgumentNullException("read plc error!");
}
if (isReadMArea)
{
      if (!simens.TcpWrite((byte)PLCLibrary.eSiemensMemory.M,  mareaBeginAddr, 16, dataWrite.ToList()))
               sb2.Append("写plc err!");
}
else
{
       //write db
       List<float> data1 = new List<float>();
       if (!simens.TcpWrite((byte)PLCLibrary.eSiemensMemory.DB,16 * 4, 15, dataWrite.ToList(), 0, int.Parse(addr[0])))
              sb2.Append("写plc err!");
}


下面是勇哥在一个项目中定义的和PLC通讯的地址表。

其中第二项为0的是读取的地址,为1的是写入的地址, Single在plc那边表示32位浮点数。

204是一个db块,注意这个db块要求plc在定义时编号最好不要超过800(具体多少勇哥记不清,但是有限制)。

另外,plc那边需要做一些设置,比如要开放远程读写权限,否则可能只能连接上plc,但是无法读写。

这方面请看勇哥的另一篇经验贴子:


工控机与西门子S7 1500PLC通讯出现的问题总结


204.0|0|Single|当前速度(m/min)
204.4|0|Single|轧压机状态(停止/运行)
204.8|0|Single|传动侧压力
204.12|0|Single|操作侧压力
204.16|0|Single|传动侧上预弯力
204.20|0|Single|操作上预弯力
204.24|0|Single|传动侧下预弯力
204.28|0|Single|操作下预弯力
204.32|0|Single|收卷张力1
204.36|0|Single|收卷张力2
204.40|0|Single|收卷除皱张力
204.44|0|Single|放卷张力
204.48|0|Single|入牵除皱张力
204.52|0|Single|split张力
204.64|1|Single|极片标准值
204.68|1|Single|传动侧厚度
204.72|1|Single|操作侧厚度
204.76|1|Single|上限
204.80|1|Single|下限
204.84|1|Single|心跳包
204.88|1|Single|运行状态
204.92|1|Single|MES断网
204.96|1|Single|辊压机停机
204.100|1|Single|未使用
204.104|1|Single|未使用
204.108|1|Single|扫描完成标志
204.112|1|Single|未使用
204.116|1|Single|未使用
204.120|1|Single|未使用



--------------------- 

作者:hackpig
来源:
www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!

返回类库功能说明目录




本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864