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. 封装统一请求状态返回Result

    1.测试数据 public class Test { public static void main(String[] args){ System.out.println("Response ...

  2. Vue的生命周期的详解

    Vue的生命周期   Vue的生命周期是每个使用Vue框架的前端人员都需要掌握的知识,以此作为记录.   Vue的生命周期就是vue实例从创建到销毁的全过程,也就是new Vue() 开始就是vue生 ...

  3. SQL Server 2005递归查询

    WHIT XXX(列1,列2....) AS ( SELECT 列1,列2... FROM 表WHERE ID=xxxxxx UNION ALL SELECT 列1,列2.... FROM 表 WHE ...

  4. springMVC中注解

    其中常见注解: 1.@RequestMapping:用于请求url路径,可用于类和方法上,用于类上,则表示类中所有响应请求的方法都是以该路径作为父路径. 2.@RequestBody:注解实现接收 h ...

  5. Spring AOP 分享

    初级篇 AOP是什么? Aspect-oriented Programming (AOP) 即面向切面编程.简单来说,AOP 是一种编程范式,允许我们模块化地定义横跨多个对象的行为.AOP 可以帮助我 ...

  6. 2022-03-13:golang项目代码push到gogs上,如何自动编译、打镜像、k8s上运行?

    2022-03-13:golang项目代码push到gogs上,如何自动编译.打镜像.k8s上运行? 答案2022-03-13: 2022-02-23:如何搭建k8s单机环境(用k3s),并且搭建da ...

  7. 2022-03-09:我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字。 你来猜我选了哪个数字。 如果你猜到正确的数字,就会 赢得游戏 。 如果你猜错了,那么我会告诉你,我选

    2022-03-09:我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字. 你来猜我选了哪个数字. 如果你猜到正确的数字,就会 赢得游戏 . 如果你猜错了,那么我会告诉你,我选 ...

  8. CU002HModel matching query does not exist.

    问题描述:CU002HModel matching query does not exist. 问题分析:匹配的查询不存在.顾名思义就是什么数据都没有. 原因是get查询时没有结果会报错,所以有两个选 ...

  9. phalApi非常好用的php-api框架

    偶然的一天,在开源中国,找到了phalApi,看到了介绍,我一下子被吸引了,这正是我一直要找的后端生成json的API框架,有了这个造数据的系统,我前端做得更得心应手了,渐渐我有了全栈开发的想法!

  10. MAC 打开.bash_profile

    1.开启终端(terminal)[左下角启动台(图标)> 其他] 2.进入当前用户目录 $ cd ~ 3.打开profile文件 $ open -e .bash_profile 就会弹出.bas ...