Commit 57e1ada7 刘韬

兼容泥人IO

1 个父辈 c9d259dc
正在显示 77 个修改的文件 包含 1442 行增加61 行删除
此文件类型无法预览
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<configuration> <configuration>
<startup> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
</startup> </startup>
</configuration> </configuration>
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
<OutputType>WinExe</OutputType> <OutputType>WinExe</OutputType>
<RootNamespace>CodeSplice</RootNamespace> <RootNamespace>CodeSplice</RootNamespace>
<AssemblyName>CodeSplice</AssemblyName> <AssemblyName>CodeSplice</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion> <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic> <Deterministic>true</Deterministic>
......
...@@ -19,7 +19,7 @@ namespace CodeSplice.Properties { ...@@ -19,7 +19,7 @@ namespace CodeSplice.Properties {
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。 // (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources { internal class Resources {
...@@ -47,8 +47,8 @@ namespace CodeSplice.Properties { ...@@ -47,8 +47,8 @@ namespace CodeSplice.Properties {
} }
/// <summary> /// <summary>
/// 重写当前线程的 CurrentUICulture 属性 /// 重写当前线程的 CurrentUICulture 属性,对
/// 重写当前线程的 CurrentUICulture 属性 /// 使用此强类型资源类的所有资源查找执行重写
/// </summary> /// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture { internal static global::System.Globalization.CultureInfo Culture {
......
...@@ -12,7 +12,7 @@ namespace CodeSplice.Properties { ...@@ -12,7 +12,7 @@ namespace CodeSplice.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.6.0.0")] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.5.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
......
...@@ -288,6 +288,12 @@ namespace CodeSplice ...@@ -288,6 +288,12 @@ namespace CodeSplice
/// </summary> /// </summary>
private void InitLightPort() private void InitLightPort()
{ {
if (Common.Config.IOType == BLL.IOType.NIREN)
{
Common.IO.WriteDO(Common.Config.IOLight, BLL.Status.On);
BtnLight.Visible = false;
return;
}
try try
{ {
string s; string s;
......
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
...@@ -9,9 +9,10 @@ ...@@ -9,9 +9,10 @@
<AppDesignerFolder>Properties</AppDesignerFolder> <AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>MES</RootNamespace> <RootNamespace>MES</RootNamespace>
<AssemblyName>MES</AssemblyName> <AssemblyName>MES</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion> <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic> <Deterministic>true</Deterministic>
<TargetFrameworkProfile />
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols> <DebugSymbols>true</DebugSymbols>
......
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
<AppDesignerFolder>Properties</AppDesignerFolder> <AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Interface</RootNamespace> <RootNamespace>Interface</RootNamespace>
<AssemblyName>MES_Interface</AssemblyName> <AssemblyName>MES_Interface</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion> <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic> <Deterministic>true</Deterministic>
<TargetFrameworkProfile /> <TargetFrameworkProfile />
......
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
8c85762f11b49ef08ee603e3bef382fb9a1cbd1b 04482e0df1cb9e6ee974458e685da7aa0f4bc1ea
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
<AppDesignerFolder>Properties</AppDesignerFolder> <AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>MES</RootNamespace> <RootNamespace>MES</RootNamespace>
<AssemblyName>MES</AssemblyName> <AssemblyName>MES</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion> <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic> <Deterministic>true</Deterministic>
<TargetFrameworkProfile /> <TargetFrameworkProfile />
......
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
<OutputType>Library</OutputType> <OutputType>Library</OutputType>
<RootNamespace>MES</RootNamespace> <RootNamespace>MES</RootNamespace>
<AssemblyName>MES</AssemblyName> <AssemblyName>MES</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion> <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic> <Deterministic>true</Deterministic>
<TargetFrameworkProfile /> <TargetFrameworkProfile />
......
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
f74ee2ebfe3dde84ecbe7946d84a4a33430f13e9 daab1ec8116181890b342cc3539844dc7cafb2b5
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections> </configSections>
<startup> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" /> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
</startup> </startup>
<log4net> <log4net>
<appender name="SmartCode" type="log4net.Appender.RollingFileAppender"> <appender name="SmartCode" type="log4net.Appender.RollingFileAppender">
...@@ -29,8 +29,8 @@ ...@@ -29,8 +29,8 @@
</appender>--> </appender>-->
<logger name="SmartCode"> <logger name="SmartCode">
<level value="Debug" /> <level value="Debug"/>
<appender-ref ref="SmartCode" /> <appender-ref ref="SmartCode"/>
</logger> </logger>
<!--<logger name="ShelfRFID"> <!--<logger name="ShelfRFID">
<level value="Info" /> <level value="Info" />
......
...@@ -232,6 +232,9 @@ namespace BLL ...@@ -232,6 +232,9 @@ namespace BLL
/// IO的IP地址 /// IO的IP地址
/// </summary> /// </summary>
public string IOAddress { get; private set; } public string IOAddress { get; private set; }
public IOType IOType { get; private set; }
public int IOLight { get; private set; }
public int IOTouch { get; private set; }
public string MES { get; private set; } public string MES { get; private set; }
/// <summary> /// <summary>
...@@ -354,6 +357,20 @@ namespace BLL ...@@ -354,6 +357,20 @@ namespace BLL
Language = _node.InnerText; Language = _node.InnerText;
_node = _root.SelectSingleNode("IOIP"); _node = _root.SelectSingleNode("IOIP");
IOAddress = _node.InnerText; IOAddress = _node.InnerText;
_node = _root.SelectSingleNode("IOTYPE");
if (_node.InnerText.ToLower() == "niren")
{
IOType = IOType.NIREN;
int.TryParse(_root.SelectSingleNode("IOTouch").InnerText, out int it);
IOTouch= it;
int.TryParse(_root.SelectSingleNode("IOLight").InnerText, out it);
IOLight = it;
}
else
IOType = IOType.KND;
_node = _root.SelectSingleNode("MES"); _node = _root.SelectSingleNode("MES");
MES = _node.InnerText; MES = _node.InnerText;
...@@ -370,5 +387,9 @@ namespace BLL ...@@ -370,5 +387,9 @@ namespace BLL
} }
public enum IOType
{
KND,
NIREN
}
} }
\ No newline at end of file \ No newline at end of file
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BLL
{
public class IOManage : IO_Interface
{
IO_Interface iom;
public IOManage(string ip,IOType iOType) {
if (iOType== IOType.KND)
iom = new KND_IO(ip);
else
iom = new NiRenIO(ip);
iom.DI_Changed_Event += Iom_DI_Changed_Event;
}
private void Iom_DI_Changed_Event(Status[] sta)
{
DI_Changed_Event?.Invoke(sta);
}
/// <summary>
/// 自动读取DI委托
/// </summary>
/// <param name="sta">状态</param>
public delegate void DI_Changed(Status[] sta);
public string IP { get=>iom.IP; set=>iom.IP=value; }
public bool IsConn { get => iom.IsConn;}
public int Port { get => iom.Port; set => iom.Port = value; }
public event DI_Changed DI_Changed_Event;
public void Close()
{
iom.Close();
}
public bool Connect()
{
return iom.Connect();
}
public bool ReadDI(Addr add, out Status sta)
{
return iom.ReadDI(add, out sta);
}
public bool ReadDO(Addr add, out Status sta)
{
return iom.ReadDO(add, out sta);
}
public bool WriteDO(int add, Status sta)
{
return iom.WriteDO(add, sta);
}
}
}
namespace BLL
{
public interface IO_Interface
{
//string ErrInfo { get; }
//string Gateway { get; set; }
string IP { get; set; }
bool IsConn { get; }
//string Mask { get; set; }
int Port { get; set; }
event IOManage.DI_Changed DI_Changed_Event;
void Close();
bool Connect();
//bool ReadDI(Addr add, int count, out Status[] sta);
bool ReadDI(Addr add, out Status sta);
bool ReadDO(Addr add, out Status sta);
//bool ReadDO(Addr add, uint count, out Status[] sta);
//Status ReverseStatus(Status sta);
//bool WriteDO(Addr add, Status sta);
//bool WriteDO(Addr add, Status[] sta);
bool WriteDO(int add, Status sta);
//bool WriteDO_Reverse(Addr add, ref Status sta);
}
}
\ No newline at end of file \ No newline at end of file
using SmartCode;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace BLL
{
/// <summary>
/// 康奈德 IO
/// </summary>
public class KND_IO : IO_Interface
{
private bool loop;
private ushort _flag; //ModBus TCP 标识
private byte[] _buff; //TCP接收缓存
private Socket client; //客户端
private Thread tListen; //监听网络
private Thread tReadDI; //自动读取DI
private Thread tTrigger; //触发DI改变事件
private Status[] staTrigger;
/// <summary>
/// 自动读取DI事件触发
/// </summary>
public event IOManage.DI_Changed DI_Changed_Event;
/// <summary>
/// 康奈德
/// </summary>
public KND_IO(string ip = "")
{
if (string.IsNullOrWhiteSpace(ip))
IP = "192.168.1.100";
else
IP = ip;
Mask = "255.255.255.0";
Gateway = "192.168.1.1";
Port = 502;
}
/// <summary>
/// IP地址
/// </summary>
public string IP { set; get; }
/// <summary>
/// 子网掩码
/// </summary>
public string Mask { set; get; }
/// <summary>
/// 子网网关
/// </summary>
public string Gateway { set; get; }
/// <summary>
/// ModBus端口
/// </summary>
public int Port { set; get; }
/// <summary>
/// 是否连接
/// </summary>
public bool IsConn
{
get
{
lock (this)
{
if (client != null)
{
//return client.Connected;
if (!client.Connected)
{
Connect();
Thread.Sleep(200);
Common.log.Info("IO断开了,重新连接:" + client.Connected);
return client.Connected;
}
else
{
return true;
}
}
return false;
}
}
}
/// <summary>
/// 错误信息
/// </summary>
public string ErrInfo { get; private set; }
/// <summary>
/// 连接
/// </summary>
/// <returns></returns>
public bool Connect()
{
//TEST
//IsConn = true;
//return true;
try
{
//IP合法
string pattern = @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$";
bool rtn = System.Text.RegularExpressions.Regex.IsMatch(IP, pattern);
if (!rtn)
{
Common.log.Info("非法的IP地址");
return false;
}
//Ping服务端
System.Net.NetworkInformation.Ping ping = new System.Net.NetworkInformation.Ping();
System.Net.NetworkInformation.PingReply result = ping.Send(IP, 10000);
if (result.Status != System.Net.NetworkInformation.IPStatus.Success)
{
Common.log.Info("Ping " + IP + " 请求没有回应");
return false;
}
//建立连接
_flag = 0;
client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, 500);
client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 500);
client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.NoDelay, 1);
client.Connect(IPAddress.Parse(IP), Port);
Thread.Sleep(100); //需要等待一会才能获取连接状态
loop = true;
tListen = new Thread(new ThreadStart(Receive));
tReadDI = new Thread(new ThreadStart(Auto_Read_DI));
tTrigger = new Thread(new ThreadStart(Trigger_DI));
tListen.Start();
tReadDI.Start();
tTrigger.Start();
Common.log.Info(IP + " 连接");
ErrInfo = "OK";
//IsConn = true;
return true;
}
catch (Exception ex)
{
ErrInfo = ex.Message;
return false;
}
}
/// <summary>
/// 关闭连接
/// </summary>
public void Close()
{
loop = false;
if (client == null) return;
try
{
client.Shutdown(SocketShutdown.Both);
client.Close();
client = null;
}
catch (Exception)
{
}
}
/// <summary>
/// 相反状态
/// </summary>
/// <param name="sta"></param>
/// <returns></returns>
public Status ReverseStatus(Status sta)
{
return sta == Status.On ? Status.Off : Status.On;
}
/// <summary>
/// 写入单个DO
/// </summary>
/// <param name="add"></param>
/// <param name="sta"></param>
/// <returns></returns>
public bool WriteDO(Addr add, Status sta)
{
if (!IsConn)
{
ErrInfo = "IO模块未连接。";
return false;
}
//if (add <= Addr.DI_16)
//{
// ErrInfo = "地址错误,应输入DO地址。";
// return false;
//}
_buff = null;
Command(out byte[] data);
byte[] buff = new byte[12];
Array.Copy(data, 0, buff, 0, data.Length);
buff[5] = 6;
buff[7] = 5; //功能码
byte[] bb = BitConverter.GetBytes((short)add);
buff[8] = bb[1];
buff[9] = bb[0]; //地址
buff[10] = (byte)sta; //写入值
try
{
client.Send(buff);
int n = 0;
lock (client)
{
while (_buff == null)
{
Thread.Sleep(10);
if (n == 20)
return false;
else
n++;
}
}
Common.log.Info(String.Format("WriteDO:" + add.ToString() + ":" + sta.ToString() + ",{0}", BitConverter.ToString(_buff)));
return true;
}
catch (Exception ex)
{
ErrInfo = ex.Message;
return false;
}
}
/// <summary>
/// 写入单个DO
/// </summary>
/// <param name="add"></param>
/// <param name="sta"></param>
/// <returns></returns>
public bool WriteDO(int add, Status sta)
{
add += 100;
Addr addr = (Addr)add;
return WriteDO(addr, sta);
}
/// <summary>
/// 先把状态取反,然后写入单个DO
/// </summary>
/// <param name="add"></param>
/// <param name="sta"></param>
/// <returns></returns>
public bool WriteDO_Reverse(Addr add, ref Status sta)
{
Status ss = sta == Status.On ? Status.Off : Status.On;
bool rtn = WriteDO(add, ss);
if (rtn) sta = ss;
return rtn;
}
/// <summary>
/// 写入多个DO
/// </summary>
/// <param name="add"></param>
/// <param name="sta"></param>
/// <returns></returns>
public bool WriteDO(Addr add, Status[] sta)
{
if (!IsConn)
{
ErrInfo = "IO模块未连接。";
return false;
}
//if (add <= Addr.DI_16)
//{
// ErrInfo = "地址错误,应输入DO地址。";
// return false;
//}
try
{
//int n = sta.Length > 8 ? 2 : 1;
int n = Convert.ToInt32(Math.Ceiling(sta.Length / 8.0));
Command(out byte[] data);
byte[] buff = new byte[13 + n];
Array.Copy(data, 0, buff, 0, data.Length);
buff[7] = 15; //功能码
byte[] bb = BitConverter.GetBytes((short)add);
buff[8] = bb[1];
buff[9] = bb[0]; //地址
buff[11] = (byte)sta.Length; //个数
buff[12] = (byte)n;
int m = 0, move = 0;
for (int i = 0; i < sta.Length; i++)
{
if (i == 0) { m = 13; move = 0; }
else if (i == 8) { m = 14; move = 0; }
if (sta[i] == Status.On)
buff[m] |= Convert.ToByte(Math.Pow(2, move));
move++;
}
client.Send(buff);
return true;
}
catch (Exception ex)
{
ErrInfo = ex.Message;
return false;
}
}
/// <summary>
/// 读取单个DO
/// </summary>
/// <param name="add"></param>
/// <param name="sta"></param>
/// <returns></returns>
public bool ReadDO(Addr add, out Status sta)
{
bool rtn = ReadDO(add, 1, out Status[] stat);
sta = stat[0];
return rtn;
}
/// <summary>
/// 读取多个DO
/// </summary>
/// <param name="add">起始地址</param>
/// <param name="count">数量</param>
/// <param name="sta">状态</param>
/// <returns></returns>
public bool ReadDO(Addr add, uint count, out Status[] sta)
{
int n = 0;
sta = null;
if (!IsConn)
{
ErrInfo = "IO模块未连接。";
return false;
}
if (count == 0)
{
ErrInfo = "数量为0";
return false;
}
//if (add <= Addr.DI_16)
//{
// ErrInfo = "地址错误,应输入DO地址。";
// return false;
//}
//if ((Addr)((uint)add + count - 1) > Addr.DO_16)
//{
// ErrInfo = "数量超出总数";
// return false;
//}
try
{
_buff = null;
Command(out byte[] data);
byte[] buff = new byte[12];
Array.Copy(data, 0, buff, 0, data.Length);
buff[7] = 1; //功能码
byte[] bb = BitConverter.GetBytes((short)add);
buff[8] = bb[1];
buff[9] = bb[0]; //地址
buff[11] = (byte)count; //个数
client.Send(buff);
while (_buff == null)
{
Thread.Sleep(10);
if (n == 200)
return false;
else
n++;
}
if (_buff[7] != 1) return false;
sta = new Status[count];
byte val = 0;
int move = 0;
byte ad = (byte)add;
for (int i = 0; i < sta.Length; i++)
{
if (i == 0) { val = _buff[9]; move = 0; }
else if (i == 8) { val = _buff[10]; move = 0; }
n = (val & Convert.ToInt32(Math.Pow(2, move))) >> move;
if (n == 1) sta[i] = Status.On;
move++; ad++;
}
return true;
}
catch (Exception ex)
{
ErrInfo = ex.Message;
return false;
}
}
/// <summary>
/// 读取单个DI
/// </summary>
/// <param name="add"></param>
/// <param name="sta"></param>
/// <returns></returns>
public bool ReadDI(Addr add, out Status sta)
{
bool rtn = ReadDI(add, 1, out Status[] stat);
sta = stat[0];
return rtn;
}
/// <summary>
/// 读取多个DI
/// </summary>
/// <param name="add"></param>
/// <param name="count"></param>
/// <param name="sta"></param>
/// <returns></returns>
public bool ReadDI(Addr add, int count, out Status[] sta)
{
int n = 0;
sta = null;
if (!IsConn)
{
ErrInfo = "IO模块未连接。";
return false;
}
if (count == 0)
{
ErrInfo = "数量为0";
return false;
}
//if (add >= Addr.DO_1)
//{
// ErrInfo = "地址错误,应输入DI地址。";
// return false;
//}
//if ((Addr)((uint)add + count - 1) > Addr.DI_16)
//{
// ErrInfo = "数量超出总数";
// return false;
//}
try
{
_buff = null;
Command(out byte[] data);
byte[] buff = new byte[12];
Array.Copy(data, 0, buff, 0, data.Length);
buff[7] = 2; //功能码
byte[] bb = BitConverter.GetBytes((short)add);
buff[8] = bb[1];
buff[9] = bb[0]; //地址
buff[11] = (byte)count; //个数
client.Send(buff);
//Model.LogNet.log.Info(String.Format("ReadDI:" + add.ToString() + ":" + sta.ToString() + ",send:{0}", BitConverter.ToString(buff)));
while (_buff == null)
{
Thread.Sleep(10);
if (n == 2000)
return false;
else
n++;
}
// Model.LogNet.log.Info(String.Format("ReadDI:" + add.ToString() + ":" + sta.ToString() + ",recv:{0}", BitConverter.ToString(_buff)));
if (_buff[7] != 2)
return false;
sta = new Status[count];
byte val = 0;
int move = 0;
byte ad = (byte)add;
for (int i = 0; i < sta.Length; i++)
{
if (i == 0) { val = _buff[9]; move = 0; }
else if (i == 8) { val = _buff[10]; move = 0; }
n = (val & Convert.ToInt32(Math.Pow(2, move))) >> move;
if (n == 1) sta[i] = Status.On;
move++; ad++;
}
return true;
}
catch (Exception ex)
{
ErrInfo = ex.ToString();
return false;
}
}
/// <summary>
/// 命令,前7个字节
/// </summary>
/// <param name="data"></param>
private void Command(out byte[] data)
{
byte[] add = BitConverter.GetBytes(++_flag);
data = new byte[7];
data[0] = add[1];
data[1] = add[0];
data[2] = 0;
data[3] = 0;
data[4] = 0;
data[5] = 0;
data[6] = 255;
if (_flag == ushort.MaxValue) _flag = 0;
}
/// <summary>
/// 监听结果线程,把读取到的数据保存到buff
/// </summary>
private void Receive()
{
byte[] bb = new byte[50];
while (loop)
{
try
{
//lock (client)
//{
if (client.Available > 0)
{
Thread.Sleep(10);
if (!client.Connected)
continue;
int len = client.Receive(bb);
_buff = new byte[len];
Array.Copy(bb, _buff, len);
}
//}
Thread.Sleep(50);
}
catch (Exception e)
{
Common.log.Info("Receive err:" + e.ToString());
}
finally
{
//Thread.Sleep(50);
}
}
}
/// <summary>
/// 自动读取DI线程
/// </summary>
private void Auto_Read_DI()
{
while (loop)
{
ReadDI(Addr.DI_1, 4, out staTrigger);
//Model.LogNet.log.Info("ErrInfo:" + ErrInfo);
Thread.Sleep(100);
}
}
/// <summary>
/// 触发DI改变事件
/// </summary>
private void Trigger_DI()
{
while (loop)
{
if (staTrigger != null)
DI_Changed_Event?.Invoke(staTrigger);
Thread.Sleep(100);
}
}
}
/// <summary>
/// 寄存器
/// </summary>
public class Reg
{
/// <summary>
/// 标识
/// </summary>
public int ID;
/// <summary>
/// 显示文本
/// </summary>
public string Text;
/// <summary>
/// 寄存器地址
/// </summary>
public Addr Addr;
/// <summary>
/// 当前的状态
/// </summary>
public Status Status;
/// <summary>
/// 寄存器,文本空,状态OFF
/// </summary>
/// <param name="address">地址</param>
public Reg(Addr address) : this(0, "", address, Status.Off)
{
}
/// <summary>
/// 寄存器,状态OFF
/// </summary>
/// <param name="text">文本</param>
/// <param name="addr">地址</param>
public Reg(string text, Addr addr) : this(0, text, addr, Status.Off)
{
}
/// <summary>
/// 寄存器,状态OFF
/// </summary>
/// <param name="id">标志</param>
/// <param name="text">文本</param>
/// <param name="addr">地址</param>
public Reg(int id, string text, Addr addr) : this(id, text, addr, Status.Off)
{
}
/// <summary>
/// 寄存器
/// </summary>
/// <param name="text">文本</param>
/// <param name="addr">地址</param>
/// <param name="status">状态</param>
public Reg(string text, Addr addr, Status status) : this(0, text, addr, status)
{
}
/// <summary>
/// 寄存器
/// </summary>
/// <param name="id">标志</param>
/// <param name="text">文本</param>
/// <param name="address">地址</param>
/// <param name="status">状态</param>
public Reg(int id, string text, Addr address, Status status)
{
ID = id;
Text = text;
Addr = address;
Status = status;
}
}
/// <summary>
/// 寄存器地址
/// </summary>
public enum Addr : short
{
/// <summary>
/// 输入点,DI-1
/// </summary>
DI_1 = 10200,
/// <summary>
/// 输入点,DI-2
/// </summary>
DI_2 = 10201,
/// <summary>
/// 输入点,DI-3
/// </summary>
DI_3 = 10202,
/// <summary>
/// 输入点,DI-4
/// </summary>
DI_4 = 10203,
/// <summary>
/// 输出点,DO-1
/// </summary>
DO_1 = 100,
/// <summary>
/// 输出点,DO-2
/// </summary>
DO_2 = 101,
/// <summary>
/// 输出点,DO-3
/// </summary>
DO_3 = 102,
/// <summary>
/// 输出点,DO-4
/// </summary>
DO_4 = 103,
/// <summary>
/// 无
/// </summary>
NONE = 255
}
/// <summary>
/// 寄存器状态
/// </summary>
public enum Status : byte
{
/// <summary>
/// 断开,关闭,低电平
/// </summary>
Off = 0,
/// <summary>
/// 闭合,打开,高电平
/// </summary>
On = 255
}
}
using BLL;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
class NiRenIO: IO_Interface
{
const int IoCount = 8;
byte station = 1;
public string IP;
TcpClient tcpClient = new TcpClient();
Thread iomonitorThread;
ushort seq = 0;
/// <summary>
///
/// </summary>
/// <param name="changindex">变化的io列表</param>
/// <param name="sta">所有IO状态</param>
public delegate void IO_Changed(List<int> changindex, bool[] sta);
public event IO_Changed DI_Changed_Event_a;
public event IO_Changed DO_Changed_Event;
/// <summary>
/// 连接状态变化, 手动连接不触发
/// </summary>
public event EventHandler<bool> ConnectionState_Event;
public NiRenIO(string ip)
{
this.IP = ip;
//DOdata[0] = 0x00;
//DOdata[1] = 0x00;
iomonitorThread = new Thread(new ThreadStart(iomonitor));
}
public event IOManage.DI_Changed DI_Changed_Event;
~NiRenIO()
{
iomonitorrun = false;
Close();
}
bool systemrun = false;
/// <summary>
/// 打开IO
/// </summary>
/// <returns></returns>
public bool Open()
{
tcpClient.Dispose();
tcpClient = new TcpClient();
tcpClient.ReceiveTimeout = 50;
tcpClient.SendTimeout = 50;
lock (tcpClient)
{
try
{
var connectResult = tcpClient.ConnectAsync(IP, 12345);
if (connectResult.Wait(1000))
{
systemrun = true;
iomonitorrun = true;
iomonitorThread = new Thread(new ThreadStart(iomonitor));
iomonitorThread.Start();
ConnectionState_Event?.Invoke(this, true);
return true;
}
else
{
tcpClient.EndConnect(connectResult);
tcpClient.Close();
return false;
}
}
catch
{
return false;
}
}
}
/// <summary>
/// 关闭IO
/// </summary>
public void Close()
{
try
{
systemrun = false;
iomonitorrun = false;
if (tcpClient.Connected)
tcpClient.Close();
}
catch { }
}
/// <summary>
/// 连接状态
/// </summary>
public bool IsConn
{
get => iomonitorrun && systemrun;
}
string IO_Interface.IP { get; set; }
public int Port { get; set; }
bool iomonitorrun = false;
/// <summary>
/// 循环读全部IO
/// </summary>
void iomonitor()
{
iomonitorrun = true;
while (iomonitorrun && systemrun)
{
Thread.Sleep(3);
try
{
ReadDO();
}
catch (SocketException)
{
readerrtimes = 0;
if (tcpClient.Connected)
tcpClient.Close();
ConnectionState_Event?.Invoke(this, false);
iomonitorrun = false;
}
catch(Exception)
{
}
}
if (systemrun)
{
do
{
Thread.Sleep(1000);
} while (systemrun && !Open());
}
}
/// <summary>
/// 写io
/// </summary>
/// <param name="donum">地址</param>
/// <param name="state">On/Off</param>
/// <returns></returns>
public bool WriteDO(int donum, bool state)
{
const string CMD_WriteDI = "AT+STACH{0}={1}\r\n";
var CMDSEND = string.Format(CMD_WriteDI, donum + 1, state ? "1": "0");
Debug.WriteLine("CMDSEND:" + CMDSEND);
var sendbyte = Encoding.ASCII.GetBytes(CMDSEND);
lock (tcpClient)
{
try
{
tcpClient.Client.Send(sendbyte);
Thread.Sleep(2);
byte[] result = new byte[100];
var ulength = tcpClient.Client.Receive(result);
if (ulength > 0) {
var recive = Encoding.ASCII.GetString(result, 0, ulength);
Debug.WriteLine("recive:" + recive);
if (recive.StartsWith("OK"))
return true;
}
}
catch
{
return false;
}
}
return false;
}
/// <summary>
/// 所有DI状态
/// </summary>
public bool[] DIstate = new bool[IoCount];
/// <summary>
/// 所有DO状态
/// </summary>
public bool[] DOstate = new bool[IoCount];
bool[] lastDIstate = new bool[IoCount];
bool[] lastDOstate = new bool[IoCount];
int readerrtimes = 0;
/// <summary>
/// 读全部IO
/// </summary>
void ReadDO()
{
const string CMD_ReadDI = "AT+OCCH0=?\r\n";
const string CMD_ReadD0 = "AT+STACH0=?\r\n";
const string CMD_ReadALL = CMD_ReadDI + CMD_ReadD0;
var sendbyte = Encoding.ASCII.GetBytes(CMD_ReadALL);
Debug.WriteLine("CMD_ReadALL:"+ CMD_ReadALL);
var resultbuffer = new byte[2048];
int ulength = 0;
lock (tcpClient)
{
try
{
tcpClient.Client.Send(sendbyte);
Thread.Sleep(5);
ulength = tcpClient.Client.Receive(resultbuffer);
readerrtimes = 0;
}
catch (SocketException se)
{
readerrtimes++;
Thread.Sleep(100);
if (readerrtimes > 5)
{
Debug.WriteLine("Read IO Error");
throw se;
}
return;
}
}
if (ulength == 0) {
return;
}
var recive = Encoding.ASCII.GetString(resultbuffer, 0, ulength);
Debug.WriteLine("recive:"+ recive);
var datas = recive.Split(new char[] { '\r', '\n' });
/*
+STACH1:0,100000
+STACH2:0,100000
+OCCH1:0
+OCCH2:0
*/
foreach (var data in datas) {
if (!data.StartsWith("+"))
continue;
if (data.StartsWith("+STACH"))
{
var ds = data.Split(':');
var d = ds[0].Substring(6);
if (!int.TryParse(d, out int doindex))
continue;
doindex = doindex - 1;
var sta = ds[1].StartsWith("1") ? true : false;
DOstate[doindex] = sta;
}
else if (data.StartsWith("+OCCH"))
{
var ds = data.Split(':');
var d = ds[0].Substring(5);
if (!int.TryParse(d, out int doindex))
continue;
doindex = doindex - 1;
var sta = ds[1].StartsWith("1") ? true : false;
DIstate[doindex] = sta;
}
}
for (int i = 0; i < IoCount; i++)
{
List<int> dichgindex = new List<int>();
List<int> dochgindex = new List<int>();
if (lastDIstate[i] != DIstate[i])
{
dichgindex.Add(i);
lastDIstate[i] = DIstate[i];
}
if (lastDOstate[i] != DOstate[i])
{
dochgindex.Add(i);
lastDOstate[i] = DOstate[i];
}
if (dichgindex.Count > 0)
{
DI_Changed_Event_a?.BeginInvoke(dichgindex, DIstate, null, null);
var statuses =DIstate.Select(d => { return d ? Status.On : Status.Off; }).ToArray();
DI_Changed_Event?.BeginInvoke(statuses, null, null);
}
if (dochgindex.Count > 0)
DO_Changed_Event?.BeginInvoke(dochgindex, DOstate, null, null);
}
}
void seqadd()
{
seq++;
if (seq >= ushort.MaxValue - 10)
seq = 0;
}
public bool Connect()
{
return Open();
}
public bool ReadDI(Addr add, out Status sta)
{
sta = Status.Off;
try
{
int index = ((int)add) - 10200;
var onoff = DIstate[index];
sta = onoff? Status.On : Status.Off;
return true;
}
catch
{
return false;
}
}
public bool ReadDO(Addr add, out Status sta)
{
sta = DOstate[(int)add - 100]? Status.On : Status.Off;
return true;
}
public bool WriteDO(int add, Status sta)
{
for (int i = 0; i < 10; i++)
{
if (WriteDO(add, sta == Status.On))
{
return true;
}
Thread.Sleep(100);
}
return false;
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using TcpKPIO;
namespace BLL
{
public class NirenIO1 : IO_Interface
{
static int diCount = 2;
public event IOManage.DI_Changed DI_Changed_Event;
public string IP { get; set; }
public bool IsConn
{
get
{
var i= 0;
while (i < 5)
{
var isonline = KPIOServer.DeviceIsOnline(IP);
if (isonline)
return true;
i++;
Thread.Sleep(1000);
}
return false;
}
}
public int Port { get; set; }
public NirenIO(string ip)
{
IP = ip;
Port = 6000;
bool rtn = KPIOServer.StartServer(Port);
KPIOServer.DeviceDIChangeEvent += KPIOServer_DeviceDIChangeEvent;
KPIOServer.DeviceOnlineEvent += KPIOServer_DeviceOnlineEvent;
IOLogUtil.info($"开启IO模块:{rtn}");
}
private void KPIOServer_DeviceOnlineEvent(string ip)
{
IP = ip;
IOLogUtil.info($"IO模块:{IP}上线");
}
private void KPIOServer_DeviceDIChangeEvent(string ip, int[] diStatus)
{
Status[] statuses = new Status[diStatus.Length];
for (int i = 0; i < diStatus.Length; i++)
{
statuses[i] = diStatus[i] == 0 ? Status.On : Status.Off;
}
DI_Changed_Event?.Invoke(statuses);
}
public void Close()
{
KPIOServer.StopServer();
}
public bool Connect()
{
//throw new NotImplementedException();
return true;
}
public bool ReadDI(Addr add, out Status sta)
{
sta = Status.Off;
try
{
int index = ((int)add) - 10200;
var onoff = KPIOServer.GetDI(IP, index);
sta = onoff == 0 ? Status.Off : Status.On;
return true;
}
catch
{
return false;
}
}
public bool ReadDO(Addr add, out Status sta)
{
sta = KPIOServer.GetDO(IP, (int)add - 100) == 0 ? Status.Off : Status.On;
return true;
}
public bool WriteDO(int add, Status sta)
{
return KPIOServer.WriteDO(IP, add, sta== Status.On ?1:0);
}
}
}
using System; using BLL;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing; using System.Drawing;
using System.IO; using System.IO;
...@@ -36,7 +37,7 @@ namespace SmartCode ...@@ -36,7 +37,7 @@ namespace SmartCode
/// <summary> /// <summary>
/// 康奈德寄存器 /// 康奈德寄存器
/// </summary> /// </summary>
public static Asa.IOModule.KND IO; public static IOManage IO;
/// <summary> /// <summary>
/// 条形码 /// 条形码
/// </summary> /// </summary>
......
...@@ -19,7 +19,7 @@ namespace SmartCode.Properties { ...@@ -19,7 +19,7 @@ namespace SmartCode.Properties {
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。 // (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources { internal class Resources {
...@@ -47,8 +47,8 @@ namespace SmartCode.Properties { ...@@ -47,8 +47,8 @@ namespace SmartCode.Properties {
} }
/// <summary> /// <summary>
/// 重写当前线程的 CurrentUICulture 属性 /// 重写当前线程的 CurrentUICulture 属性,对
/// 重写当前线程的 CurrentUICulture 属性 /// 使用此强类型资源类的所有资源查找执行重写
/// </summary> /// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture { internal static global::System.Globalization.CultureInfo Culture {
......
...@@ -12,7 +12,7 @@ namespace SmartCode.Properties { ...@@ -12,7 +12,7 @@ namespace SmartCode.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.6.0.0")] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.5.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
<OutputType>WinExe</OutputType> <OutputType>WinExe</OutputType>
<RootNamespace>SmartCode</RootNamespace> <RootNamespace>SmartCode</RootNamespace>
<AssemblyName>SmartCode</AssemblyName> <AssemblyName>SmartCode</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion> <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic> <Deterministic>true</Deterministic>
...@@ -95,6 +95,10 @@ ...@@ -95,6 +95,10 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="BLL\BarCode.cs" /> <Compile Include="BLL\BarCode.cs" />
<Compile Include="BLL\IO\IOManage.cs" />
<Compile Include="BLL\IO\IO_Interface.cs" />
<Compile Include="BLL\IO\KND.cs" />
<Compile Include="BLL\IO\NirenIO.cs" />
<Compile Include="BLL\LabelEdit.cs" /> <Compile Include="BLL\LabelEdit.cs" />
<Compile Include="Common.cs" /> <Compile Include="Common.cs" />
<Compile Include="BLL\Config.cs" /> <Compile Include="BLL\Config.cs" />
......
...@@ -115,8 +115,11 @@ namespace SmartCode ...@@ -115,8 +115,11 @@ namespace SmartCode
{ {
if (BtnOC.ButtonIndex == 0) if (BtnOC.ButtonIndex == 0)
{ {
Common.Config.LightPort = ChsPort.SelectedText; if (Common.Config.IOType == BLL.IOType.KND)
Common.Config.LightOpen = Command; {
Common.Config.LightPort = ChsPort.SelectedText;
Common.Config.LightOpen = Command;
}
} }
Close(); Close();
......
...@@ -393,6 +393,13 @@ namespace SmartCode ...@@ -393,6 +393,13 @@ namespace SmartCode
/// </summary> /// </summary>
private void InitLightPort() private void InitLightPort()
{ {
if (Common.Config.IOType == BLL.IOType.NIREN)
{
Common.IO.WriteDO(Common.Config.IOLight, BLL.Status.On);
BtnLight.Visible = false;
return;
}
try try
{ {
string s; string s;
...@@ -439,10 +446,11 @@ namespace SmartCode ...@@ -439,10 +446,11 @@ namespace SmartCode
try try
{ {
string s1, s2; string s1, s2;
Common.IO = new Asa.IOModule.KND();
Common.IO.IP = Common.Config.IOAddress; Common.IO = new BLL.IOManage(Common.Config.IOAddress, Common.Config.IOType);
Common.IO.DI_Changed_Event += IO_DI_Changed_Event; Common.IO.DI_Changed_Event += IO_DI_Changed_Event;
Common.IO.Connect(); Common.IO.Connect();
Thread.Sleep(1000);
if (Common.IO.IsConn) if (Common.IO.IsConn)
{ {
noIO = false; noIO = false;
...@@ -451,9 +459,9 @@ namespace SmartCode ...@@ -451,9 +459,9 @@ namespace SmartCode
else else
{ {
noIO = true; noIO = true;
s1 = Common.IO.ErrInfo; s1 = "";// Common.IO.ErrInfo;
s2 = Common.Lang.Dialog("NoIO") + Common.Config.IOAddress; s2 = Common.Lang.Dialog("NoIO") + Common.Config.IOAddress;
Common.log.Info(s1); Common.log.Info(s2);
RtxLog.AppendText(s2 + "\r\n"); RtxLog.AppendText(s2 + "\r\n");
} }
} }
...@@ -688,7 +696,7 @@ namespace SmartCode ...@@ -688,7 +696,7 @@ namespace SmartCode
return Common.Database.GetSN(key, doIncrease); return Common.Database.GetSN(key, doIncrease);
} }
private void IO_DI_Changed_Event(Asa.IOModule.Status[] sta) private void IO_DI_Changed_Event(BLL.Status[] sta)
{ {
//Common.log.Info("sta.Length=" + sta.Length + " sta[0]=" + sta[0].ToString()); //Common.log.Info("sta.Length=" + sta.Length + " sta[0]=" + sta[0].ToString());
...@@ -706,7 +714,7 @@ namespace SmartCode ...@@ -706,7 +714,7 @@ namespace SmartCode
} }
if (sta[0] == Asa.IOModule.Status.On) if (sta[Common.Config.IOTouch] == BLL.Status.On)
{ {
if (isTouch) return; if (isTouch) return;
...@@ -783,9 +791,9 @@ namespace SmartCode ...@@ -783,9 +791,9 @@ namespace SmartCode
// InitSuperDog(); // InitSuperDog();
InitCamera(); InitCamera();
InitLightPort();
InitReg(); InitReg();
InitLightPort();
if (Common.Database == null) if (Common.Database == null)
noDB = true; noDB = true;
else else
...@@ -803,7 +811,7 @@ namespace SmartCode ...@@ -803,7 +811,7 @@ namespace SmartCode
canRun = true; canRun = true;
BtnWork.StateColor = Color.Green; BtnWork.StateColor = Color.Green;
} }
Common.IO.WriteDO(Asa.IOModule.Addr.DO_1, Asa.IOModule.Status.On); Common.IO.WriteDO(1, BLL.Status.On);
} }
catch (Exception ex) catch (Exception ex)
{ {
......
[2022-07-11 13:56:23,040][1]INFO =====程序开始===== [2023-05-11 11:06:08,697][1]INFO =====程序开始=====
[2022-07-11 13:56:23,047][1]INFO =====debug mode===== [2023-05-11 11:06:08,708][1]INFO =====debug mode=====
[2022-07-11 13:56:23,355][1]INFO =====程序开始1===== [2023-05-11 11:09:58,256][1]INFO =====程序开始=====
[2022-07-11 13:56:23,902][1]INFO 加载MES面板完成 [2023-05-11 11:09:58,272][1]INFO =====debug mode=====
[2022-07-11 13:56:24,037][1]INFO 相机数量为0 [2023-05-11 11:11:41,668][1]INFO =====程序开始1=====
[2022-07-11 13:56:24,037][1]INFO 没有连接相机 [2023-05-11 11:11:43,396][1]INFO MES:10.3.72.247
[2022-07-11 13:56:24,040][1]INFO 没有串口:COM1 [2023-05-11 11:11:43,795][1]INFO 加载MES面板完成
[2022-07-11 13:56:28,892][1]INFO Ping 192.168.0.102 请求没有回应 [2023-05-11 11:11:44,178][1]INFO 相机数量为0
[2022-07-11 13:56:29,368][1]INFO =====程序结束===== [2023-05-11 11:11:44,179][1]INFO 没有连接相机
[2023-05-11 11:11:44,195][1]INFO 没有串口:COM5
[2023-05-11 11:11:49,215][1]INFO Ping 192.168.113.147 请求没有回应
[2023-05-11 11:12:20,571][1]INFO =====程序开始=====
[2023-05-11 11:12:20,587][1]INFO =====debug mode=====
[2023-05-11 11:12:23,605][1]INFO =====程序开始1=====
[2023-05-11 11:12:26,189][1]INFO MES:10.3.72.247
[2023-05-11 11:12:26,538][1]INFO 加载MES面板完成
[2023-05-11 11:12:27,120][1]INFO 相机数量为0
[2023-05-11 11:12:27,121][1]INFO 没有连接相机
[2023-05-11 11:12:27,134][1]INFO 没有串口:COM5
[2023-05-11 11:12:31,715][1]INFO Ping 192.168.113.147 请求没有回应
[2023-05-11 11:12:58,582][1]INFO =====程序结束=====
[2022-07-11 20:03:48,938][1]INFO =====程序开始===== [2023-05-11 13:36:47,383][1]INFO =====程序开始=====
[2022-07-11 20:03:48,945][1]INFO =====debug mode===== [2023-05-11 13:36:47,398][1]INFO =====debug mode=====
[2022-07-11 20:03:49,299][1]INFO =====程序开始1===== [2023-05-11 13:36:48,220][1]INFO =====程序开始1=====
[2022-07-11 20:03:49,910][1]INFO 加载MES面板完成 [2023-05-11 13:36:50,509][1]INFO MES:10.3.72.247
[2022-07-11 20:03:50,062][1]INFO 相机数量为0 [2023-05-11 13:36:50,952][1]INFO 加载MES面板完成
[2022-07-11 20:03:50,062][1]INFO 没有连接相机 [2023-05-11 13:36:51,552][1]INFO 相机数量为0
[2022-07-11 20:03:50,066][1]INFO 没有串口:COM1 [2023-05-11 13:36:51,552][1]INFO 没有连接相机
[2022-07-11 20:03:54,881][1]INFO Ping 192.168.0.102 请求没有回应 [2023-05-11 13:37:30,122][1]INFO =====程序开始=====
[2023-05-11 13:37:30,138][1]INFO =====debug mode=====
[2023-05-11 13:37:30,733][1]INFO =====程序开始1=====
[2023-05-11 13:37:33,097][1]INFO MES:10.3.72.247
[2023-05-11 13:37:33,448][1]INFO 加载MES面板完成
[2023-05-11 13:37:33,860][1]INFO 相机数量为0
[2023-05-11 13:37:33,861][1]INFO 没有连接相机
[2023-05-11 13:37:35,016][1]INFO
[2023-05-11 13:37:43,881][1]INFO =====程序结束=====
[2023-05-11 13:44:24,946][1]INFO =====程序开始=====
[2023-05-11 13:44:24,965][1]INFO =====debug mode=====
[2023-05-11 13:44:25,717][1]INFO =====程序开始1=====
[2023-05-11 13:44:27,887][1]INFO MES:10.3.72.247
[2023-05-11 13:44:28,208][1]INFO 加载MES面板完成
[2023-05-11 13:44:28,826][1]INFO 相机数量为0
[2023-05-11 13:44:28,827][1]INFO 没有连接相机
[2022-07-11 13:56:23,040][1]INFO =====程序开始=====
[2022-07-11 13:56:23,047][1]INFO =====debug mode=====
[2022-07-11 13:56:23,355][1]INFO =====程序开始1=====
[2022-07-11 13:56:23,902][1]INFO 加载MES面板完成
[2022-07-11 13:56:24,037][1]INFO 相机数量为0
[2022-07-11 13:56:24,037][1]INFO 没有连接相机
[2022-07-11 13:56:24,040][1]INFO 没有串口:COM1
[2022-07-11 13:56:28,892][1]INFO Ping 192.168.0.102 请求没有回应
[2022-07-11 13:56:29,368][1]INFO =====程序结束=====
[2022-07-11 20:03:48,938][1]INFO =====程序开始=====
[2022-07-11 20:03:48,945][1]INFO =====debug mode=====
[2022-07-11 20:03:49,299][1]INFO =====程序开始1=====
[2022-07-11 20:03:49,910][1]INFO 加载MES面板完成
[2022-07-11 20:03:50,062][1]INFO 相机数量为0
[2022-07-11 20:03:50,062][1]INFO 没有连接相机
[2022-07-11 20:03:50,066][1]INFO 没有串口:COM1
[2022-07-11 20:03:54,881][1]INFO Ping 192.168.0.102 请求没有回应
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Config> <Config>
<Printer Name="Microsoft Print to PDF" Landscape="False" /> <Printer Name="ZDesigner ZD888-203dpi ZPL" Landscape="False" />
<Label Name="test1" /> <Label Name="test3" />
<Light Name="COM1" Open="S100T100T001F001FC#" Close="S001F001F001F001FC#" /> <Light Name="COM5" Open="S200T196T001T001TC#" Close="S001F001F001F001FC#" />
<Camera Name="Basler" Single="True" SN="acA4600-7gc (22632613)" /> <Camera Name="HIK" Single="True" SN="GigE:MV-CS200-10GC (J88597582)" />
<Scan Type="2" /> <Scan Type="2" />
<Trace Type="0" /> <Trace Type="0" />
<Limit Value="47" /> <Limit Value="47" />
<Pwd Value="admin123" /> <Pwd Value="admin123" />
<Check Value="False" /> <Check Value="True" />
<Language>简体中文</Language> <Language>简体中文</Language>
<IOIP>192.168.0.102</IOIP> <IOTYPE>NiRen</IOTYPE>
<IOTouch>0</IOTouch>
<IOLight>0</IOLight>
<IOIP>192.168.113.147</IOIP>
<MES>10.3.72.247</MES>
</Config> </Config>
\ No newline at end of file \ No newline at end of file
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections> </configSections>
<startup> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" /> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
</startup> </startup>
<log4net> <log4net>
<appender name="SmartCode" type="log4net.Appender.RollingFileAppender"> <appender name="SmartCode" type="log4net.Appender.RollingFileAppender">
...@@ -29,8 +29,8 @@ ...@@ -29,8 +29,8 @@
</appender>--> </appender>-->
<logger name="SmartCode"> <logger name="SmartCode">
<level value="Debug" /> <level value="Debug"/>
<appender-ref ref="SmartCode" /> <appender-ref ref="SmartCode"/>
</logger> </logger>
<!--<logger name="ShelfRFID"> <!--<logger name="ShelfRFID">
<level value="Info" /> <level value="Info" />
......
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
58f64f4d79f076a918a9edf1b49ab8b2033d1ec4 8bde7aaec4959c4d34e1b9ff2ee9a84539deee90
...@@ -256,3 +256,4 @@ D:\rick\vs\SmartCode\SmartCode\obj\Debug\SmartCode.csproj.CopyComplete ...@@ -256,3 +256,4 @@ D:\rick\vs\SmartCode\SmartCode\obj\Debug\SmartCode.csproj.CopyComplete
D:\rick\vs\SmartCode\SmartCode\bin\Debug\log4net.dll D:\rick\vs\SmartCode\SmartCode\bin\Debug\log4net.dll
D:\rick\vs\SmartCode\SmartCode\bin\Debug\RestSharp.dll D:\rick\vs\SmartCode\SmartCode\bin\Debug\RestSharp.dll
D:\rick\vs\SmartCode\SmartCode\bin\Debug\RestSharp.xml D:\rick\vs\SmartCode\SmartCode\bin\Debug\RestSharp.xml
D:\rick\vs\SmartCode\SmartCode\obj\Debug\SmartCode.csproj.SuggestedBindingRedirects.cache
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!