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 ...
随机推荐
- 2023 Hubei Provincial Collegiate Programming Contest题解 C F H I J K M
补题链接:https://codeforces.com/gym/104337 原文链接:https://www.eriktse.com/algorithm/1136.html M. Different ...
- 解决PaddlePaddle飞桨在迁移学习使用预训练模型时更改num_classes参数出现警告
当我们使用 PaddlePaddle 进行迁移学习的时候,直接导入模型虽然是可以的,但是总是会有个警告 如直接用官方的 resnet101 并加载预训练模型的话 model = paddle.visi ...
- 2022-09-28:以下go语言代码输出什么?A:1 1;B:1 2;C:2 2;D:不确定。 package main import ( “fmt“ ) func main() { var
2022-09-28:以下go语言代码输出什么?A:1 1:B:1 2:C:2 2:D:不确定. package main import ( "fmt" ) func main() ...
- 2022-03-04:爱吃香蕉的珂珂。 珂珂喜欢吃香蕉。这里有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 H 小时后回来。 珂珂可以决定她吃香蕉的速度 K (单位:根
2022-03-04:爱吃香蕉的珂珂. 珂珂喜欢吃香蕉.这里有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉.警卫已经离开了,将在 H 小时后回来. 珂珂可以决定她吃香蕉的速度 K (单位:根 ...
- 2021-09-28:合并区间。以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠
2021-09-28:合并区间.以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] .请你合并所有重叠的区间,并返回一个不重叠 ...
- vue全家桶进阶之路28:项目仓库Gitee
Gitee(之前称为GitCafe)是一种基于web的Git仓库托管服务,在中国很受欢迎.它为开发人员提供了一个平台,可以托管他们的Git仓库,与其他开发人员协作,并管理他们的代码. https:// ...
- vue小坑之Vetur报错:相对路径报错
话不多说先上图 俗话说:面向百度编程,这话是没错滴,找不到相同问题的博客至少你还可以找谷歌翻译 以上图片问题就是:你导入的组件的相对路径不对.(有可能是你手动敲进去的,然后vetur这边检测不到) 解 ...
- 【Java】Java代码拷贝文件的速度
Java代码拷贝文件的速度究竟有多快? 前言 最近学习Java到了流处理,其中有种流叫FileInputStream和FileOutputStream,简单来说,就是操作文件的,老师给我们示范了一个非 ...
- celery笔记二之建立celery项目、配置及几种加载方式
本文首发于公众号:Hunter后端 原文链接:celery笔记二之建立celery项目.配置及几种加载方式 接下来我们创建一个 celery 项目,文件夹及目录如下: proj/__init__.py ...
- flutter系列之:做一个会飞的菜单
目录 简介 定义一个菜单项目 让menu动起来 添加菜单内部的动画 总结 简介 flutter中自带了drawer组件,可以实现通用的菜单功能,那么有没有一种可能,我们可以通过自定义动画来实现一个别样 ...