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连接的更多相关文章

  1. 2021.07.17 题解 CF1385E Directing Edges(拓扑排序)

    2021.07.17 题解 CF1385E Directing Edges(拓扑排序) CF1385E Directing Edges - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) ...

  2. 2021.07.17 P4170 染色(区间DP)

    2021.07.17 P4170 染色(区间DP) [P4170 CQOI2007]涂色 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.目标状态可以由哪些状态转移过来. ...

  3. 2021.07.17 P3177 树上染色(树形DP)

    2021.07.17 P3177 树上染色(树形DP) [P3177 HAOI2015]树上染色 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.dp思想是需要什么,维护 ...

  4. 17 nginx连接memcached

    一:配置php扩展memcached wget http://memcached.googlecode.com/files/memcached-1.4.9.tar.gz # tar zvxf memc ...

  5. 台达PLC开发笔记(一):台达PLC连接介绍,分别使用485、网口与台达PLC建立连接

    前言   台达AS系列,型号为AS322P.     物理设备连接            使用WPL Editor连接PLC 使用RS485口当作RS232口连接PLC             注意: ...

  6. Noip模拟8 2021.6.17

    T1 星际旅行 仔细一看,发现像一个欧拉路(简称一笔画). 满足"可以一笔画"的条件是: 1.所有点都有偶数条连边; 2.有偶数个点连奇数条边; 满足以上两个条件的任意一个即可一笔 ...

  7. 2021.6.17考试总结[NOIP模拟8]

    T1 星际旅行 其实就是求两条只走一遍的边的方案数. 考场上第一眼就感觉不可做,后来画了几个图,发现好像只要两个边是相连的就可以只走一遍,居然还真拿了30.. 其实是一道欧拉路的题,把每条非自环的边看 ...

  8. day18 17.c3p0连接池使用

    连接池时间长不用空闲着,dbcp是不回收的,性能可能有些问题.c3p0是可以自动回收.实际开发中c3p的生产力比dbcp强,性能上更强. package cn.itcast.datasource; i ...

  9. DTU是怎么与PLC连接通信的

    数据采集是生产制造中最实际最频繁的需求,不管智能设备制造发展到何种程度它都是工业4.0的先决条件,也在数字化工厂当中,工人更多地是处理异常情况,调整设备.但数据采集一直是困扰着所有制造工厂的传统痛点, ...

  10. Noip模拟79 2021.10.17(题目名字一样)

    T1 F 缩点缩成个$DAG$,然后根据每个点的度数计算期望值 1 #include<cstdio> 2 #include<cstring> 3 #include<vec ...

随机推荐

  1. Typora 隐藏侧边栏图片文件夹

    前言 在使用 Typora 的时候,我将图片的保存路径设置为了如下所示: 这样设置是为了更方便的管理笔记中的图片,但图片文件夹却也显示在了侧边栏中,随着笔记增多,我的侧边栏越来越乱... 难道要忍气吞 ...

  2. golang中一种不常见的switch语句写法

    最近翻开源代码的时候看到了一种很有意思的switch用法,分享一下. 注意这里讨论的不是typed switch,也就是case语句后面是类型的那种. 直接看代码: func (s *systemd) ...

  3. 一文吃透Tomcat核心知识点

    架构 首先,看一下整个架构图.最全面的Java面试网站 接下来简单解释一下. Server:服务器.Tomcat 就是一个 Server 服务器. Service:在服务器中可以有多个 Service ...

  4. 【深入浅出 Yarn 架构与实现】6-3 NodeManager 分布式缓存

    不要跳过这部分知识,对了解 NodeManager 本地目录结构,和熟悉 Container 启动流程有帮助. 一.分布式缓存介绍 主要作用就是将用户应用程序执行时,所需的外部文件资源下载缓存到各个节 ...

  5. 2022-06-06:大妈一开始手上有x个鸡蛋,她想让手上的鸡蛋数量变成y, 操作1 : 从仓库里拿出1个鸡蛋到手上,x变成x+1个, 操作2 : 如果手上的鸡蛋数量是3的整数倍,大妈可以直接把三分之

    2022-06-06:大妈一开始手上有x个鸡蛋,她想让手上的鸡蛋数量变成y, 操作1 : 从仓库里拿出1个鸡蛋到手上,x变成x+1个, 操作2 : 如果手上的鸡蛋数量是3的整数倍,大妈可以直接把三分之 ...

  6. 2021-02-15:给定一个整型数组arr,代表数值不同的纸牌排成一条线。玩家A和玩家B依次拿走每张纸牌,规定玩家A先拿,玩家B后拿。但是每个玩家每次只能拿走最左或最右的纸牌,玩家A和玩家B都绝顶聪明。请返回最后获胜者的分数。

    2021-02-15:给定一个整型数组arr,代表数值不同的纸牌排成一条线.玩家A和玩家B依次拿走每张纸牌,规定玩家A先拿,玩家B后拿.但是每个玩家每次只能拿走最左或最右的纸牌,玩家A和玩家B都绝顶聪 ...

  7. AHB2APB bridge IP简介

    背景介绍 AMBA总线规范是由ARM公司提出的一种开放性的片上总线标准,它独立于处理器和工艺技术,具有高速度.低功耗等特点.AMBA规范中包括了AHB系统总线和APB外设总线. AHB主要用于高性能模 ...

  8. Pyhton F字符串引起的invalid syntax

    事发现场 偶然运行到之前写的爬虫,发现运行不了,报错invalid syntax,于是来找bug 报错截图: 原因: 这样用法称之为 f-string f-string,亦称为格式化字符串常量(for ...

  9. Vue+Element中Table懒加载,新增、删除操作后手动更新

    Vue+Element中Table懒加载,新增.删除操作后手动更新 今天开发一个自动分类管理系统中行业类型管理,使用table tree 进行节点懒加载,遇到的问题是:使用load 进行懒加载后在ta ...

  10. PlayWright(二)

      上篇我们已经安装好了playwright和各个浏览器,那么现在我们直接开始吧   1.怎么使用palywright?   我们需要先导入sync_playwright,然后用start启动,sto ...