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 ...
随机推荐
- Pwn系列之Protostar靶场 Stack2题解
(gdb) disass main Dump of assembler code for function main: 0x08048494 <main+0>: push ebp 0x08 ...
- stl------stack与queue
stack与queue 一.stack 二.queue 例题:详见我的另一篇博文: 栈------表达式求值 http://www.cnblogs.com/Cloud-king/p/8453703.h ...
- 2023-03-10:YUV420P像素数据编码为JPEG图片,请用go语言实现。
2023-03-10:YUV420P像素数据编码为JPEG图片,请用go语言实现. 答案2023-03-10: 方法一.使用 github.com/moonfdd/ffmpeg-go 库,基于雷霄骅的 ...
- 2022-11-25:连续出现的数字。编写一个 SQL 查询,查找所有至少连续出现三次的数字。 答案是输出1,原因是1是唯一连续出现三次的数字。 DROP TABLE IF EXISTS logs;
2022-11-25:连续出现的数字.编写一个 SQL 查询,查找所有至少连续出现三次的数字. 答案是输出1,原因是1是唯一连续出现三次的数字. DROP TABLE IF EXISTS logs; ...
- 2021-05-25:给定一个矩阵matrix,值有正、负、
2021-05-25:给定一个矩阵matrix,值有正.负.0,蛇可以空降到最左列的任何一个位置,初始增长值是0,蛇每一步可以选择右上.右.右下三个方向的任何一个前进,沿途的数字累加起来,作为增长值: ...
- vue工程内下载路由
一.路由Router Vue Router 是Vue.js官方的路由管理器.它和Vue.js的核心深度集成,加速构建单页面应用.包含功能有: 1 嵌套的路由/视图表 2 模块化的.基于组件的路由配置 ...
- Flutter热更新技术探索
一,需求背景: APP发布到市场后,难免会遇到严重的BUG阻碍用户使用,因此有在不发布新版本APP的情况下使用热更新技术立即修复BUG需求.原生APP(例如:Android & IOS)的热更 ...
- 【最佳实践】如何设计 RESTful API ?
良好的 API 设计是一个经常被提及的话题,特别是对于那些试图完善其 API 策略的团队来说.一个设计良好的 API 的好处包括:改进开发者体验.更快速地编写文档以及更高效地推广你的 API.但是,到 ...
- SQL后半部和JDBC
SQL后半部 排序order by asc 升序desc 降序select *from 表名 order by 列名 asc ; select *from 表名 order by 列名 asc , 列 ...
- go语言编写算法
1.冒泡排序 // 冒泡排序 a := []uint8{9, 20, 10, 23, 7, 22, 88, 102} for i := 0; i < len(a); i++ { for k := ...