2021-6-17 plc连接
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using HslCommunication;
using HslCommunication.ModBus;
using HslCommunication.Profinet.Omron; namespace BatteryDetectWorkA
{
public class HslPLC
{
private OmronFinsNet omronFinsNet;
private bool isConnect = false; public bool connection()
{
isConnect = true;
try
{
omronFinsNet = new OmronFinsNet(Config.App.PLCIP, int.Parse(Config.App.PLCPort));
// omronFinsNet.LogNet = new HslCommunication.LogNet.LogNetSingle("omron.log.txt");
omronFinsNet.SA1 = (byte)Convert.ToInt16(Config.App.PCNet); //0x0D; // PC网络号,PC的IP地址的最后一个数
omronFinsNet.DA1 = (byte)Convert.ToInt16(Config.App.PLCNet);// 0x10; // PLC网络号,PLC的IP地址的最后一个数
omronFinsNet.DA2 = 0x00; // PLC单元号,通常为0 OperateResult connect = omronFinsNet.ConnectServer();
if (connect.IsSuccess)
{
isConnect = true; }
else
{
MessageBox.Show("PLC连接失败");
isConnect = false;
}
}
catch (Exception ex)
{
isConnect = false;
}
return isConnect;
} public bool GetPlcState()
{
return isConnect;
}
public bool isConnected()
{
if (isConnect) return true;
OperateResult connect = omronFinsNet.ConnectServer();
isConnect = connect.IsSuccess;
return isConnect;
} public void close()
{
omronFinsNet.ConnectClose();
isConnect = false;
}
public string readString(string add)
{
if (!isConnect) return "PLC未连接";
var ret = omronFinsNet.ReadString(add, 20);// 读取D100-D104组成的ASCII字符串数据
isConnect = ret.IsSuccess;
if (ret.IsSuccess)
{
byte[] returnBytes = Encoding.Default.GetBytes(ret.Content);
for (int i = 0; i < returnBytes.Length; i = i + 2)
{
byte buffer = returnBytes[i];
returnBytes[i] = returnBytes[i + 1];
returnBytes[i + 1] = buffer;
}
return Encoding.ASCII.GetString(returnBytes, 0, returnBytes.Length).Replace('\0', ' ').Trim();
}
else
{
return (ret.Message);
} } public int readInt(string add)
{
if (!isConnect) return -99;
var ret = omronFinsNet.ReadInt32(add);
isConnect = ret.IsSuccess;
if (ret.IsSuccess)
return ret.Content;
else
return -99;
} public bool writeString(string add, string v)
{
if (!isConnect) return false;
omronFinsNet.Write(add, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0");
string strTemp = "";
if (v.Length % 2 == 1)
strTemp = v + "\0";
else
strTemp = v;
byte[] writeByte = Encoding.Default.GetBytes(strTemp);
for (int i = 0; i < writeByte.Length; i = i + 2)
{
byte buffer = writeByte[i];
writeByte[i] = writeByte[i + 1];
writeByte[i + 1] = buffer;
}
strTemp = Encoding.ASCII.GetString(writeByte, 0, writeByte.Length)/*.Replace('\0', ' ').Trim()*/;
OperateResult result = omronFinsNet.Write(add, strTemp);// 写ASCII字符串
return result.IsSuccess;
} public bool writeInt(string add, int v)
{
if (!isConnect) return false;
OperateResult result = omronFinsNet.Write(add, v);
return result.IsSuccess;
}
} //Addr950 登录2/注销3
//Addr952 账号 1操作员 2管理员 3工程师
//Addr962 密码 1(49),2(50),3(51) public class TourchHsl
{
private ModbusTcpNet modbusTcpNet;
private bool isConnect = false;
public bool connection()
{
isConnect = true;
try
{
modbusTcpNet = new ModbusTcpNet(Config.App.TourchIp, Config.App.TourchPort,Convert.ToByte("1"));
modbusTcpNet.AddressStartWithZero = Config.App.StartAddr;
//modbusTcpNet = new ModbusTcpNet("127.0.0.1", Config.App.TourchPort);
OperateResult connect = modbusTcpNet.ConnectServer();
if (connect.IsSuccess)
{
isConnect = true; }
else
{
MessageBox.Show("触摸屏连接失败!");
isConnect = false;
}
}
catch (Exception ex)
{
isConnect = false;
}
return isConnect;
}
public bool GetTourchState()
{
return isConnect;
} public bool isConnected()
{
if (isConnect) return true;
OperateResult connect = modbusTcpNet.ConnectServer();
isConnect = connect.IsSuccess;
return isConnect;
}
public bool writeInt(string add, ushort v)
{
if (!isConnect) return false;
OperateResult result = modbusTcpNet.Write(add, v);
return result.IsSuccess;
} public bool writeCoil(string add, bool v)
{
if (!isConnect) return false;
OperateResult result = modbusTcpNet.WriteCoil(add, v);
return result.IsSuccess;
} public int readInt16(string add)
{
if (!isConnect) return -99;
var ret = modbusTcpNet.ReadInt16(add);
isConnect = ret.IsSuccess;
if (ret.IsSuccess)
return ret.Content;
else
return -99;
}
public int readInt32(string add)
{
if (!isConnect) return -99;
var ret = modbusTcpNet.ReadInt32(add);
isConnect = ret.IsSuccess;
if (ret.IsSuccess)
return ret.Content;
else
return -99;
} }
}
2021-6-17 plc连接的更多相关文章
- 2021.07.17 题解 CF1385E Directing Edges(拓扑排序)
2021.07.17 题解 CF1385E Directing Edges(拓扑排序) CF1385E Directing Edges - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) ...
- 2021.07.17 P4170 染色(区间DP)
2021.07.17 P4170 染色(区间DP) [P4170 CQOI2007]涂色 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.目标状态可以由哪些状态转移过来. ...
- 2021.07.17 P3177 树上染色(树形DP)
2021.07.17 P3177 树上染色(树形DP) [P3177 HAOI2015]树上染色 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.dp思想是需要什么,维护 ...
- 17 nginx连接memcached
一:配置php扩展memcached wget http://memcached.googlecode.com/files/memcached-1.4.9.tar.gz # tar zvxf memc ...
- 台达PLC开发笔记(一):台达PLC连接介绍,分别使用485、网口与台达PLC建立连接
前言 台达AS系列,型号为AS322P. 物理设备连接 使用WPL Editor连接PLC 使用RS485口当作RS232口连接PLC 注意: ...
- Noip模拟8 2021.6.17
T1 星际旅行 仔细一看,发现像一个欧拉路(简称一笔画). 满足"可以一笔画"的条件是: 1.所有点都有偶数条连边; 2.有偶数个点连奇数条边; 满足以上两个条件的任意一个即可一笔 ...
- 2021.6.17考试总结[NOIP模拟8]
T1 星际旅行 其实就是求两条只走一遍的边的方案数. 考场上第一眼就感觉不可做,后来画了几个图,发现好像只要两个边是相连的就可以只走一遍,居然还真拿了30.. 其实是一道欧拉路的题,把每条非自环的边看 ...
- day18 17.c3p0连接池使用
连接池时间长不用空闲着,dbcp是不回收的,性能可能有些问题.c3p0是可以自动回收.实际开发中c3p的生产力比dbcp强,性能上更强. package cn.itcast.datasource; i ...
- DTU是怎么与PLC连接通信的
数据采集是生产制造中最实际最频繁的需求,不管智能设备制造发展到何种程度它都是工业4.0的先决条件,也在数字化工厂当中,工人更多地是处理异常情况,调整设备.但数据采集一直是困扰着所有制造工厂的传统痛点, ...
- Noip模拟79 2021.10.17(题目名字一样)
T1 F 缩点缩成个$DAG$,然后根据每个点的度数计算期望值 1 #include<cstdio> 2 #include<cstring> 3 #include<vec ...
随机推荐
- Job for nginx.service failed because the control process exited with error code.
1. nginx启动报错: Job for nginx.service failed because the control process exited with error code. See & ...
- [C++提高编程] 3.2 vector容器
文章目录 3.2 vector容器 3.2.1 vector基本概念 3.2.2 vector构造函数 3.2.3 vector赋值操作 3.2.4 vector容量和大小 3.2.5 vector插 ...
- [Pytorch框架] 1.7 数据并行
数据并行(选读) Authors: Sung Kim and Jenny Kang 在这个教程里,我们将学习如何使用 DataParallel 来使用多GPU. PyTorch非常容易就可以使用多GP ...
- Crackme逆向分析365例-001
[Crackme逆向分析365例-001] 表哥是神,误落凡尘 说明:本篇练习是表哥逆向分析365系列的第1例,所使用的CrackMe本体来自于网站:https://crackmes.one/, ...
- 大三ACM第一次开会
现在是2020.9.12,单说时间的话可能感知不太强,那么换个时间, 现在是大三上.按照设想,我应该已经退役. 会上,老李的语气不再激昂,满含着无奈与沧桑.面对围在桌前的大三们,终究还是提出了那个问题 ...
- MAX30102采集心率数据
一个100行的代码调试都可能会让程序员遇到很多挫折,所以,面对挫折,我们永远不能低头. 关于MAX30102驱动配置程序,网上搜索博客有一堆资料,c/c++写的驱动代码都有, 可参考博客: MAX30 ...
- ODOO13之 八:Odoo 13开发之业务逻辑 – 业务流程的支持
在前面的文章中,我们学习了模型层.如何创建应用数据结构以及如何使用 ORM API 来存储查看数据.本文中我们将利用前面所学的模型和记录集知识实现应用中常用的业务逻辑模式. 本文的主要内容有: 以单据 ...
- MySQL之视图,索引,存储过程,触发器--实操
一.视图 什么是视图? 视图是一个虚拟表,其内容由查询定义. 同真实的表一样,视图包含系列带有名称的列和行数据. 行和列数据来自定义视图的查询所引用的表,并且在引用视图时动态生成. 简单的来说视图是由 ...
- Java Websocket 02: 原生模式通过 Websocket 传输文件
目录 Java Websocket 01: 原生模式 Websocket 基础通信 Java Websocket 02: 原生模式通过 Websocket 传输文件 Websocket 原生模式 传输 ...
- 2023-06-19:讲一讲Redis分布式锁的实现?
2023-06-19:讲一讲Redis分布式锁的实现? 答案2023-06-19: Redis分布式锁最简单的实现 要实现分布式锁,确实需要使用具备互斥性的Redis操作.其中一种常用的方式是使用SE ...