Commit 3aae39eb LN

伺服波特率改为可配置

1 个父辈 46106a0a
...@@ -22,8 +22,8 @@ ...@@ -22,8 +22,8 @@
<add key="Store_Type" value="RC_AC_SA"/> <add key="Store_Type" value="RC_AC_SA"/>
<add key="Store_CID" value="rc1246ac-1"/> <add key="Store_CID" value="rc1246ac-1"/>
<add key ="Store_ID" value ="1"/> <add key ="Store_ID" value ="1"/>
<!--end one store config--> <!--end one store config-->
<add key="ACBaudRate" value="115200" />
<add key="InOutDefaultPosition" value="8000"/> <add key="InOutDefaultPosition" value="8000"/>
<add key="Config_Pwd" value="123456"/> <add key="Config_Pwd" value="123456"/>
<!--出库等待料盘拿走的时间,秒--> <!--出库等待料盘拿走的时间,秒-->
......
...@@ -257,10 +257,7 @@ namespace OnlineStore.ACSingleStore ...@@ -257,10 +257,7 @@ namespace OnlineStore.ACSingleStore
return; return;
} }
this.btnComMove.BackColor = Color.Green; this.btnComMove.BackColor = Color.Green;
AxisMove(comp, speed); AxisMove(comp, speed);
//ShuoKeControls.SetSpeed(compress_Slv, ShuoKeCMD.SetEndSpeed, speed);
//ShuoKeControls.SetSpeed(compress_Slv, ShuoKeCMD.SetMaxSpeed, speed);
//ShuoKeControls.VolMove(compress_Slv, speed);
} }
} }
...@@ -268,11 +265,8 @@ namespace OnlineStore.ACSingleStore ...@@ -268,11 +265,8 @@ namespace OnlineStore.ACSingleStore
{ {
if (this.btnComMove.BackColor == Color.Green) if (this.btnComMove.BackColor == Color.Green)
{ {
btnComMove.BackColor = System.Drawing.SystemColors.Control; btnComMove.BackColor = System.Drawing.SystemColors.Control;
//ShuoKeControls.SuddownStop(compress_Slv); ACServerManager.SuddenStop(comp.DeviceName, comp.GetAxisValue());
//ShuoKeControls.GetABSPosition(compress_Slv);
ACServerManager.SuddenStop(comp);
UpdateCompPosition(); UpdateCompPosition();
} }
} }
...@@ -284,10 +278,7 @@ namespace OnlineStore.ACSingleStore ...@@ -284,10 +278,7 @@ namespace OnlineStore.ACSingleStore
MessageBox.Show("提示", "请先输入正确的速度"); MessageBox.Show("提示", "请先输入正确的速度");
return; return;
} }
this.btnComMovej.BackColor = Color.Green; this.btnComMovej.BackColor = Color.Green;
//ShuoKeControls.SetSpeed(compress_Slv, ShuoKeCMD.SetEndSpeed, speed);
//ShuoKeControls.SetSpeed(compress_Slv, ShuoKeCMD.SetMaxSpeed, speed);
//ShuoKeControls.VolMove(compress_Slv,-speed);
AxisMove(comp, -speed); AxisMove(comp, -speed);
} }
...@@ -295,11 +286,8 @@ namespace OnlineStore.ACSingleStore ...@@ -295,11 +286,8 @@ namespace OnlineStore.ACSingleStore
{ {
if (btnComMovej.BackColor.Equals(Color.Green)) if (btnComMovej.BackColor.Equals(Color.Green))
{ {
btnComMovej.BackColor = System.Drawing.SystemColors.Control; btnComMovej.BackColor = System.Drawing.SystemColors.Control;
//ShuoKeControls.SuddownStop(compress_Slv); ACServerManager.SuddenStop(comp.DeviceName,comp.GetAxisValue());
//txtComPosition.Text = ShuoKeControls.GetABSPosition(compress_Slv).ToString();
ACServerManager.SuddenStop(comp);
UpdateCompPosition(); UpdateCompPosition();
} }
} }
......
...@@ -88,5 +88,7 @@ namespace OnlineStore.Common ...@@ -88,5 +88,7 @@ namespace OnlineStore.Common
/// 是否调试状态 /// 是否调试状态
/// </summary> /// </summary>
public static string IsInDebug = "IsInDebug"; public static string IsInDebug = "IsInDebug";
public static string ACBaudRate = "ACBaudRate";
} }
} }
...@@ -11,8 +11,17 @@ namespace OnlineStore.DeviceLibrary ...@@ -11,8 +11,17 @@ namespace OnlineStore.DeviceLibrary
/// 0132h 原点接近传感器输入 (HOME) 状态 ReadOnly 0: 输入 OFF 1: 输入 ON /// 0132h 原点接近传感器输入 (HOME) 状态 ReadOnly 0: 输入 OFF 1: 输入 ON
/// </summary> /// </summary>
public static string Home_Single = "0132"; public static string Home_Single = "0132";
// 0022h 负方向驱动禁止输入(NOT) ReadOnly 0: 输入 OFF、 1: 输入 ON //
// 0023h 正方向驱动禁止输入(POT) ReadOnly 0: 输入 OFF、 1: 输入 ON //
/// <summary>
/// 0022h 负方向驱动禁止输入(NOT) ReadOnly 0: 输入 OFF、 1: 输入 ON
/// </summary>
public static string Limit_Negative_Single = "0022";
/// <summary>
/// 0023h 正方向驱动禁止输入(POT) ReadOnly 0: 输入 OFF、 1: 输入 ON
/// </summary>
public static string Limit_Positive_Single = "0023";
/// <summary> /// <summary>
///速度 4601 ///速度 4601
/// </summary> /// </summary>
...@@ -320,6 +329,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -320,6 +329,7 @@ namespace OnlineStore.DeviceLibrary
//sendData[4] = dataByte[1]; //sendData[4] = dataByte[1];
//sendData[5] = dataByte[0]; //sendData[5] = dataByte[0];
} }
sendData = buildCheckData(sendData, sendData.Length - 2); sendData = buildCheckData(sendData, sendData.Length - 2);
......
using OnlineStore.Common; using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO.Ports; using System.IO.Ports;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
namespace OnlineStore.DeviceLibrary namespace OnlineStore.DeviceLibrary
{ {
...@@ -14,8 +15,8 @@ namespace OnlineStore.DeviceLibrary ...@@ -14,8 +15,8 @@ namespace OnlineStore.DeviceLibrary
public partial class ACServerManager public partial class ACServerManager
{ {
public static bool IsShowMsg = false ; public static bool IsShowMsg = false ;
private static int SleepMSendons = 100; private static int SleepMSendons = 20;
private static int ReviceOutTimeMS = 100;
private static Dictionary<string, Dictionary<string, int>> ComAddrValue = new Dictionary<string, Dictionary<string, int>>(); private static Dictionary<string, Dictionary<string, int>> ComAddrValue = new Dictionary<string, Dictionary<string, int>>();
private static string mapObj = ""; private static string mapObj = "";
...@@ -77,16 +78,21 @@ namespace OnlineStore.DeviceLibrary ...@@ -77,16 +78,21 @@ namespace OnlineStore.DeviceLibrary
{ {
if (serialBeanMap.ContainsKey(portName)) if (serialBeanMap.ContainsKey(portName))
{ {
return true ; return true;
} }
AcSerialBean bean = new AcSerialBean(portName, 9600, Parity.Even, 8, StopBits.One); int ACBaudRate = ConfigAppSettings.GetIntValue(Setting_Init.ACBaudRate);
if (ACBaudRate <= 0)
{
ACBaudRate = 9600;
}
AcSerialBean bean = new AcSerialBean(portName, ACBaudRate, Parity.Even, 8, StopBits.One);
bool result = bean.openPort(); bool result = bean.openPort();
if (!result) if (!result)
{ {
LogUtil.info("打开串口【" + portName + "】失败"); LogUtil.info("打开串口【" + portName + "】【" + ACBaudRate + "】失败");
return false; return false;
} }
LogUtil.info("打开串口【" + portName + "】成功"); LogUtil.info("打开串口【" + portName + "】【" + ACBaudRate + "】成功");
//bean.DataReceived += DataReceived; //bean.DataReceived += DataReceived;
if (serialBeanMap.ContainsKey(portName)) if (serialBeanMap.ContainsKey(portName))
...@@ -114,8 +120,19 @@ namespace OnlineStore.DeviceLibrary ...@@ -114,8 +120,19 @@ namespace OnlineStore.DeviceLibrary
{ {
serialBeanMap.Remove(portName); serialBeanMap.Remove(portName);
} }
LogUtil.info("ACServerManager 关闭串口【" + portName + "】 ");
} }
public static void CloseAllPort()
{
List<string> kes = new List<string>(serialBeanMap.Keys);
foreach (string key in kes)
{
ColsePort(key);
}
}
/// <summary> /// <summary>
/// 是否成功打开伺服 /// 是否成功打开伺服
/// </summary> /// </summary>
...@@ -128,7 +145,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -128,7 +145,7 @@ namespace OnlineStore.DeviceLibrary
PreReadCoilAddr = ACCMDManager.ServerOn_Addr; PreReadCoilAddr = ACCMDManager.ServerOn_Addr;
byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_ReadCoil, PreReadCoilAddr, "0000", 1); byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_ReadCoil, PreReadCoilAddr, "0000", 1);
//SendData(portName,dataArray); //SendData(portName,dataArray);
byte[] reviceData = SendCommand(portName, dataArray, 100, 6); byte[] reviceData = SendCommand(portName, dataArray, ReviceOutTimeMS, 6);
int result= GetCoilData(portName, reviceData, PreReadCoilAddr); int result= GetCoilData(portName, reviceData, PreReadCoilAddr);
//TODO //TODO
return result>=1; return result>=1;
...@@ -152,7 +169,6 @@ namespace OnlineStore.DeviceLibrary ...@@ -152,7 +169,6 @@ namespace OnlineStore.DeviceLibrary
//把数字转换为四位的字符串 //把数字转换为四位的字符串
public static string SpeedToStr(int speed,int length) public static string SpeedToStr(int speed,int length)
{ {
speed = Math.Abs(speed);
string str = String.Format("{0:X}", speed); string str = String.Format("{0:X}", speed);
return str.PadLeft(length, '0'); return str.PadLeft(length, '0');
} }
...@@ -206,7 +222,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -206,7 +222,7 @@ namespace OnlineStore.DeviceLibrary
//SendStrAndSleep(portName, slvAddrStr + "06 4638 " + SpeedToStr(homeLowSpeed, 4) + " ffff", sleep); //SendStrAndSleep(portName, slvAddrStr + "06 4638 " + SpeedToStr(homeLowSpeed, 4) + " ffff", sleep);
////原点返回加速度=30 ////原点返回加速度=30
//SendStrAndSleep(portName, slvAddrStr + "06 4639 " + SpeedToStr(homeAddSpeed, 4) + " ffff", sleep); //SendStrAndSleep(portName, slvAddrStr + "06 4639 " + SpeedToStr(homeAddSpeed, 4) + " ffff", sleep);
UpdateEEPROM(portName, slvAddr); //UpdateEEPROM(portName, slvAddr);
} }
public static void UpdateEEPROM(string portName, int slvAddr) public static void UpdateEEPROM(string portName, int slvAddr)
{ {
...@@ -286,8 +302,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -286,8 +302,7 @@ namespace OnlineStore.DeviceLibrary
data = ACCMDManager.buildCheckData(data, data.Length - 2); data = ACCMDManager.buildCheckData(data, data.Length - 2);
SendData(portName, data); SendData(portName, data);
System.Threading.Thread.Sleep(SleepMSendons); System.Threading.Thread.Sleep(SleepMSendons);
UpdateBlock(portName, slvAddr, ACCMDManager.Block_RelMove); UpdateBlock(portName, slvAddr, ACCMDManager.Block_RelMove);
OpenAndCloseSTB(portName, slvAddr); OpenAndCloseSTB(portName, slvAddr);
} }
...@@ -302,8 +317,8 @@ namespace OnlineStore.DeviceLibrary ...@@ -302,8 +317,8 @@ namespace OnlineStore.DeviceLibrary
int isHomeEnd = GetHomeEndStatus(portName, slvAddr); int isHomeEnd = GetHomeEndStatus(portName, slvAddr);
if (isHomeEnd.Equals(1)) if (isHomeEnd.Equals(1))
{ {
int value = 2000; int value = 2000;
LogUtil.info("轴【" + portName + "_" + slvAddr + "】原点返回时发现原点已亮且回过原点,需要先相对走" + value); LogUtil.info("轴【" + portName +"_"+slvAddr +"】原点返回时发现原点已亮且回过原点,需要先相对走" + value);
RelMove(portName, slvAddr, value); RelMove(portName, slvAddr, value);
bool isStop = false; bool isStop = false;
for (int i = 0; i <= 10; i++) for (int i = 0; i <= 10; i++)
...@@ -312,53 +327,55 @@ namespace OnlineStore.DeviceLibrary ...@@ -312,53 +327,55 @@ namespace OnlineStore.DeviceLibrary
if (GetBusyStatus(portName, slvAddr).Equals(0)) if (GetBusyStatus(portName, slvAddr).Equals(0))
{ {
isStop = true; isStop = true;
LogUtil.info("轴【" + portName + "_" + slvAddr + "】相对走" + value + "已结束"); LogUtil.info("轴【" + portName + "_" + slvAddr + "】 相对走" + value + "已结束");
break; break;
} }
} }
if (!isStop) if (!isStop)
{ {
LogUtil.info("轴【" + portName + "_" + slvAddr + "】相对走" + value + "已等待2分钟,直接停止"); LogUtil.info("轴【" + portName + "_" + slvAddr + "】 相对走" + value + "已等待2分钟,直接停止");
SuddenStop(portName, slvAddr); SuddenStop(portName, slvAddr);
} }
} }
else else
{ {
int volSpeed = Math.Abs(speed / 5); int volSpeed =Math.Abs( speed / 5);
int time = 1500; int time = 1500;
LogUtil.info("轴【" + portName + "_" + slvAddr + "】原点返回时发现原点已亮但未回过原点,先匀速向上走" + time + ",速度[" + volSpeed + "]"); LogUtil.info("轴【" + portName + "_" + slvAddr + "】原点返回时发现原点已亮但未回过原点,先匀速向上走"+time+",速度["+ volSpeed + "]" );
//需要匀速向上走 //需要匀速向上走
ACServerManager.SpeedMove(portName, slvAddr, volSpeed); ACServerManager.SpeedMove(portName, slvAddr, volSpeed);
Thread.Sleep(time); Thread.Sleep(time);
LogUtil.info("轴【" + portName + "_" + slvAddr + "】匀速 已等待" + time + ",直接停止"); LogUtil.info("轴【" + portName + "_" + slvAddr + "】匀速 已等待" + time + ",直接停止");
SuddenStop(portName, slvAddr); SuddenStop(portName, slvAddr);
Thread.Sleep(100); Thread.Sleep(SleepMSendons);
} }
} }
} }catch(Exception ex)
catch (Exception ex)
{ {
LogUtil.error("轴【" + portName + "_" + slvAddr + "】原点返回前验证是否在原点出错:" + ex.StackTrace); LogUtil.error("轴【" + portName + "_" + slvAddr + "】原点返回前验证是否在原点出错:" + ex.StackTrace);
} }
//默认负方向原点返回
UpdateBlock(portName, slvAddr, ACCMDManager.Block_HomeMove1); UpdateBlock(portName, slvAddr, ACCMDManager.Block_HomeMove1);
LogUtil.debug("回原点:反方向");
//}
Thread.Sleep(SleepMSendons); Thread.Sleep(SleepMSendons);
OpenAndCloseSTB(portName, slvAddr); OpenAndCloseSTB(portName, slvAddr);
} }
public static void SetSpeed(string portName, int slvAddr, int speed)
public static void SpeedMove(string portName, int slvAddr, int speed)
{ {
int preSpeed = GetAddrValue(portName,slvAddr, ACCMDManager.Speed_Addr); int preSpeed = GetAddrValue(portName,slvAddr, ACCMDManager.Speed_Addr);
if ((preSpeed.Equals(-1)) || (!preSpeed.Equals(Math.Abs(speed)))) if ((preSpeed.Equals(-1)) || (!preSpeed.Equals(Math.Abs(speed))))
{ {
string v1 = slvAddr + "064601 " + ACServerManager.SpeedToStr(speed, 4) + " ffff"; string v1 = slvAddr + "064601 " + ACServerManager.SpeedToStr(speed, 4) + " ffff";
LogUtil.debug("轴【" + portName + "_" + slvAddr + "】更新速度为【" + speed + "】,发送数据【" + v1 + "】"); LogUtil.debug("轴【" + portName + "_" + slvAddr + "】更新速度为【" + speed + "】,发送数据【" + v1 + "】");
SendStrAndSleep(portName, v1, SleepMSendons); SendStrAndSleep(portName, v1, SleepMSendons);
UpdateAddrValue(portName,slvAddr, ACCMDManager.Speed_Addr, Math.Abs(speed)); UpdateAddrValue(portName,slvAddr, ACCMDManager.Speed_Addr, Math.Abs(speed));
Thread.Sleep(SleepMSendons); Thread.Sleep(SleepMSendons);
} }
}
public static void SpeedMove(string portName, int slvAddr, int speed)
{
SetSpeed(portName, slvAddr, speed);
if (speed > 0) if (speed > 0)
{ {
UpdateBlock(portName, slvAddr, ACCMDManager.Block_VolMove0); UpdateBlock(portName, slvAddr, ACCMDManager.Block_VolMove0);
...@@ -370,6 +387,21 @@ namespace OnlineStore.DeviceLibrary ...@@ -370,6 +387,21 @@ namespace OnlineStore.DeviceLibrary
//Thread.Sleep(SleepMSendons); //Thread.Sleep(SleepMSendons);
OpenAndCloseSTB(portName, slvAddr); OpenAndCloseSTB(portName, slvAddr);
} }
public static bool isInPosition(ConfigMoveAxis Axis, int PPosition)
{
int outCount = ACServerManager.GetActualtPosition(Axis.DeviceName, Axis.GetAxisValue());
int errorCount = Math.Abs(outCount - PPosition);
if (errorCount <= Axis.CanErrorCountMin)
{
return true;
}
else
{
return false;
}
}
public static void AbsMove(string portName, int slvAddr, int targetPosition, int targetSpeed) public static void AbsMove(string portName, int slvAddr, int targetPosition, int targetSpeed)
{ {
//先更新速度 //先更新速度
...@@ -381,7 +413,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -381,7 +413,7 @@ namespace OnlineStore.DeviceLibrary
//速度 V1 =100 //速度 V1 =100
string v1 = slvAddrStr + "064601 " + SpeedToStr(targetSpeed, 4) + " ffff"; string v1 = slvAddrStr + "064601 " + SpeedToStr(targetSpeed, 4) + " ffff";
SendStrAndSleep(portName, v1, SleepMSendons); SendStrAndSleep(portName, v1, SleepMSendons);
UpdateAddrValue(portName, slvAddr, ACCMDManager.Speed_Addr, targetSpeed); UpdateAddrValue(portName,slvAddr, ACCMDManager.Speed_Addr, targetSpeed);
} }
//绝对运动 //绝对运动
AbsMove(portName, slvAddr, targetPosition); AbsMove(portName, slvAddr, targetPosition);
...@@ -426,7 +458,10 @@ namespace OnlineStore.DeviceLibrary ...@@ -426,7 +458,10 @@ namespace OnlineStore.DeviceLibrary
data = ACCMDManager.buildCheckData(data, data.Length - 2); data = ACCMDManager.buildCheckData(data, data.Length - 2);
SendData(portName, data); SendData(portName, data);
Thread.Sleep(SleepMSendons); Thread.Sleep(SleepMSendons);
UpdateBlock(portName, slvAddr, ACCMDManager.Block_AbsMove); UpdateBlock(portName, slvAddr, ACCMDManager.Block_AbsMove);
//data = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteRegisters, ACCMDManager.BlockNo, ACCMDManager.Block_AbsMove, 2);
//SendData(portName, data);
//Thread.Sleep(SleepMSendons);
OpenAndCloseSTB(portName, slvAddr); OpenAndCloseSTB(portName, slvAddr);
} }
} }
......
...@@ -77,7 +77,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -77,7 +77,7 @@ namespace OnlineStore.DeviceLibrary
return; return;
} }
byte[] returnData = SendCommand(portName, data, 50, reviceLength); byte[] returnData = SendCommand(portName, data, ReviceOutTimeMS, reviceLength);
string strSend = ""; string strSend = "";
for (int i = 0; i < returnData.Length; i++) for (int i = 0; i < returnData.Length; i++)
{ {
...@@ -94,7 +94,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -94,7 +94,7 @@ namespace OnlineStore.DeviceLibrary
{ {
return; return;
} }
byte[] returnData = SendCommand(portName, data, 50, 8); byte[] returnData = SendCommand(portName, data, ReviceOutTimeMS, 8);
if (returnData != null) if (returnData != null)
{ {
string strSend = ""; string strSend = "";
...@@ -116,9 +116,9 @@ namespace OnlineStore.DeviceLibrary ...@@ -116,9 +116,9 @@ namespace OnlineStore.DeviceLibrary
/// <returns>返回值的长度</returns> /// <returns>返回值的长度</returns>
public static byte[] SendCommand(string portName, byte[] data, int outTime, int reviceLength) public static byte[] SendCommand(string portName, byte[] data, int outTime, int reviceLength)
{ {
if (outTime > 80) if (outTime <100)
{ {
outTime = 80; outTime = 100;
} }
byte[] returnData = null; byte[] returnData = null;
...@@ -148,7 +148,11 @@ namespace OnlineStore.DeviceLibrary ...@@ -148,7 +148,11 @@ namespace OnlineStore.DeviceLibrary
} }
else else
{ {
bean.SendCommand(data, ref returnData, outTime, reviceLength); int ret= bean.SendCommand(data, ref returnData, outTime, reviceLength);
if (!ret.Equals(reviceLength))
{
LogUtil.error("串口" + portName + " 写入数据:" + strSend + ",预计返回字节数【"+reviceLength+"】实际返回【"+ret+"】");
}
System.Threading.Thread.Sleep(2); System.Threading.Thread.Sleep(2);
} }
} }
...@@ -190,9 +194,12 @@ namespace OnlineStore.DeviceLibrary ...@@ -190,9 +194,12 @@ namespace OnlineStore.DeviceLibrary
dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteCoil, addr, data, length); dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteCoil, addr, data, length);
SendData(portName, dataArray); SendData(portName, dataArray);
} }
public static void SuddenStop(ConfigMoveAxis moveAxis) public static void SuddenStop(ConfigMoveAxis axis)
{ {
SuddenStop(moveAxis.DeviceName, moveAxis.GetAxisValue()); if (GetBusyStatus(axis.DeviceName, axis.GetAxisValue()).Equals(1))
{
SuddenStop(axis.DeviceName, axis.GetAxisValue());
}
} }
public static void SuddenStop(string portName, int slvAddr) public static void SuddenStop(string portName, int slvAddr)
{ {
...@@ -204,19 +211,18 @@ namespace OnlineStore.DeviceLibrary ...@@ -204,19 +211,18 @@ namespace OnlineStore.DeviceLibrary
int length = 2; int length = 2;
byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteCoil, addr, data, length); byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteCoil, addr, data, length);
SendData(portName, dataArray); SendData(portName, dataArray);
System.Threading.Thread.Sleep(1000); System.Threading.Thread.Sleep(500);
data = "0000"; data = "0000";
dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteCoil, addr, data, length); dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteCoil, addr, data, length);
SendData(portName, dataArray); SendData(portName, dataArray);
} }
public static void OpenAndCloseSTB(string portName, int slvAddr) public static void OpenAndCloseSTB(string portName, int slvAddr)
{ {
OnlyOpenSTB(portName, slvAddr); OnlyOpenSTB(portName, slvAddr);
System.Threading.Thread.Sleep(100); System.Threading.Thread.Sleep(200);
CloseSTB(portName, slvAddr); CloseSTB(portName, slvAddr);
System.Threading.Thread.Sleep(100); System.Threading.Thread.Sleep(SleepMSendons);
} }
public static void OnlyOpenSTB(string portName, int slvAddr) public static void OnlyOpenSTB(string portName, int slvAddr)
...@@ -238,13 +244,13 @@ namespace OnlineStore.DeviceLibrary ...@@ -238,13 +244,13 @@ namespace OnlineStore.DeviceLibrary
public static void UpdateBlock(string portName, int slvAddr, string blockNum) public static void UpdateBlock(string portName, int slvAddr, string blockNum)
{ {
int preNum = GetAddrValue(portName, slvAddr, ACCMDManager.BlockNo); int preNum = GetAddrValue(portName,slvAddr, ACCMDManager.BlockNo);
if (preNum.Equals(-1) || (!preNum.ToString().Equals(blockNum))) if (preNum.Equals(-1) || (!preNum.ToString().Equals(blockNum)))
{ {
byte[] data = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteRegisters, ACCMDManager.BlockNo, blockNum , 2); byte[] data = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteRegisters, ACCMDManager.BlockNo, blockNum , 2);
SendData(portName, data); SendData(portName, data);
int value = Convert.ToInt16(blockNum); int value = Convert.ToInt16(blockNum);
UpdateAddrValue(portName, slvAddr, ACCMDManager.BlockNo, value); UpdateAddrValue(portName,slvAddr, ACCMDManager.BlockNo, value);
Thread.Sleep(SleepMSendons); Thread.Sleep(SleepMSendons);
} }
} }
...@@ -257,7 +263,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -257,7 +263,7 @@ namespace OnlineStore.DeviceLibrary
int length = 2; int length = 2;
byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteCoil, addr, data, length); byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteCoil, addr, data, length);
SendData(portName, dataArray); SendData(portName, dataArray);
System.Threading.Thread.Sleep(100); System.Threading.Thread.Sleep(200);
data = "0000"; data = "0000";
dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteCoil, addr, data, length); dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteCoil, addr, data, length);
SendData(portName, dataArray); SendData(portName, dataArray);
...@@ -308,18 +314,35 @@ namespace OnlineStore.DeviceLibrary ...@@ -308,18 +314,35 @@ namespace OnlineStore.DeviceLibrary
PreReadAddr = ACCMDManager.TargetPostion; PreReadAddr = ACCMDManager.TargetPostion;
byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_ReadRegisters, ACCMDManager.TargetPostion, "0000", 2); byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_ReadRegisters, ACCMDManager.TargetPostion, "0000", 2);
// SendData(portName,dataArray); // SendData(portName,dataArray);
byte[] reviceData = SendCommand(portName, dataArray, 100, 9); byte[] reviceData = SendCommand(portName, dataArray, ReviceOutTimeMS, 9);
return GetRegisterData(portName, reviceData, ACCMDManager.TargetPostion); return GetRegisterData(portName, reviceData, ACCMDManager.TargetPostion);
} }
public static int GetActualtPosition(ConfigMoveAxis axis)
{
return GetActualtPosition(axis.DeviceName, axis.GetAxisValue());
}
public static int GetActualtPosition(string portName, int slvAddr) public static int GetActualtPosition(string portName, int slvAddr)
{ {
PreReadAddr = ACCMDManager.ActualPosition; PreReadAddr = ACCMDManager.ActualPosition;
byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_ReadRegisters, ACCMDManager.ActualPosition, "0000", 2); byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_ReadRegisters, ACCMDManager.ActualPosition, "0000", 2);
// SendData(portName,dataArray); // SendData(portName,dataArray);
byte[] reviceData = SendCommand(portName, dataArray, 100, 9); byte[] reviceData = SendCommand(portName, dataArray, ReviceOutTimeMS, 9);
return GetRegisterData(portName, reviceData, ACCMDManager.ActualPosition); int result = -1;
for (int i = 1; i <= 3; i++)
{
result = GetRegisterData(portName, reviceData, ACCMDManager.ActualPosition);
if (!result.Equals(-1))
{
break;
}
else
{
LogUtil.error("第" + i + "次获取" + portName + "_" + slvAddr + "的实时位置" + result);
}
}
return result;
} }
public static int GetCoilData(string portName, byte[] reviceData, string Address) public static int GetCoilData(string portName, byte[] reviceData, string Address)
...@@ -356,7 +379,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -356,7 +379,7 @@ namespace OnlineStore.DeviceLibrary
PreReadCoilAddr = ACCMDManager.Alarm_Status; PreReadCoilAddr = ACCMDManager.Alarm_Status;
byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_ReadCoil, PreReadCoilAddr, "0000", 1); byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_ReadCoil, PreReadCoilAddr, "0000", 1);
//SendData(portName,dataArray); //SendData(portName,dataArray);
byte[] reviceData = SendCommand(portName, dataArray, 100, 6); byte[] reviceData = SendCommand(portName, dataArray, ReviceOutTimeMS, 6);
return GetCoilData(portName, reviceData, PreReadCoilAddr); return GetCoilData(portName, reviceData, PreReadCoilAddr);
} }
...@@ -365,7 +388,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -365,7 +388,7 @@ namespace OnlineStore.DeviceLibrary
PreReadCoilAddr = ACCMDManager.BUSYStatus; PreReadCoilAddr = ACCMDManager.BUSYStatus;
byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_ReadCoil, ACCMDManager.BUSYStatus, "0000", 1); byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_ReadCoil, ACCMDManager.BUSYStatus, "0000", 1);
//SendData(portName,dataArray); //SendData(portName,dataArray);
byte[] reviceData = SendCommand(portName, dataArray, 100, 6); byte[] reviceData = SendCommand(portName, dataArray, ReviceOutTimeMS, 6);
return GetCoilData(portName, reviceData, ACCMDManager.BUSYStatus); return GetCoilData(portName, reviceData, ACCMDManager.BUSYStatus);
} }
...@@ -374,7 +397,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -374,7 +397,7 @@ namespace OnlineStore.DeviceLibrary
PreReadCoilAddr = ACCMDManager.HOME_CMP_Status; PreReadCoilAddr = ACCMDManager.HOME_CMP_Status;
byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_ReadCoil, ACCMDManager.HOME_CMP_Status, "0000", 1); byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_ReadCoil, ACCMDManager.HOME_CMP_Status, "0000", 1);
//SendData(portName,dataArray); //SendData(portName,dataArray);
byte[] reviceData = SendCommand(portName, dataArray, 100, 6); byte[] reviceData = SendCommand(portName, dataArray, ReviceOutTimeMS, 6);
return GetCoilData(portName, reviceData, ACCMDManager.HOME_CMP_Status); return GetCoilData(portName, reviceData, ACCMDManager.HOME_CMP_Status);
} }
...@@ -382,10 +405,43 @@ namespace OnlineStore.DeviceLibrary ...@@ -382,10 +405,43 @@ namespace OnlineStore.DeviceLibrary
{ {
PreReadCoilAddr = ACCMDManager.Home_Single; PreReadCoilAddr = ACCMDManager.Home_Single;
byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_ReadCoil, ACCMDManager.Home_Single, "0000", 1); byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_ReadCoil, ACCMDManager.Home_Single, "0000", 1);
byte[] reviceData = SendCommand(portName, dataArray, 100, 6); byte[] reviceData = SendCommand(portName, dataArray, ReviceOutTimeMS, 6);
return GetCoilData(portName, reviceData, ACCMDManager.Home_Single);
}
/// <summary>
/// 负极限
/// </summary>
public static int GetLimitNegativeSingle(string portName, int slvAddr)
{
PreReadCoilAddr = ACCMDManager.Home_Single;
byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_ReadCoil, ACCMDManager.Limit_Negative_Single, "0000", 1);
byte[] reviceData = SendCommand(portName, dataArray, ReviceOutTimeMS, 6);
return GetCoilData(portName, reviceData, ACCMDManager.Home_Single);
}
/// <summary>
/// 负极限
/// </summary>
public static int GetLimitNegativeSingle(ConfigMoveAxis axis)
{
return GetLimitNegativeSingle(axis.DeviceName, axis.GetAxisValue());
}
/// <summary>
/// 正极限
/// </summary>
public static int GetLimitPositiveSingle(ConfigMoveAxis axis)
{
return GetLimitPositiveSingle(axis.DeviceName, axis.GetAxisValue());
}
/// <summary>
/// 正极限
/// </summary>
public static int GetLimitPositiveSingle(string portName, int slvAddr)
{
PreReadCoilAddr = ACCMDManager.Home_Single;
byte[] dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_ReadCoil, ACCMDManager.Limit_Positive_Single, "0000", 1);
byte[] reviceData = SendCommand(portName, dataArray, ReviceOutTimeMS, 6);
return GetCoilData(portName, reviceData, ACCMDManager.Home_Single); return GetCoilData(portName, reviceData, ACCMDManager.Home_Single);
} }
} }
/// <summary> /// <summary>
/// 记录最后一次获得的寄存器的值 /// 记录最后一次获得的寄存器的值
......
...@@ -1178,83 +1178,8 @@ namespace OnlineStore.DeviceLibrary ...@@ -1178,83 +1178,8 @@ namespace OnlineStore.DeviceLibrary
} }
#region datalogic扫码枪代码 #region 入库命令处理
private bool isWaitScan = false;
private DateTime StartWaitScanTime = DateTime.Now;
private bool IsNotScanCode = false;
private bool IsScanCode = false;
/// <summary>
/// 扫码枪数据接收
/// </summary>
/// <param name="message"></param>
private void onCodeReceived(string message)
{
try
{
message = ScanCodeManager.ReplaceCode(message);
if (message.Equals("") || string.IsNullOrEmpty(message))
{
IsNotScanCode = true;
IsScanCode = false;
CodeMsg = "没有收到二维码信息,请重新放入料盘";
LogUtil.info(LOGGER, StoreName + "没有收到二维码信息,请重新放入料盘");
return;
}
IsNotScanCode = false;
if (storeRunStatus.Equals(StoreRunStatus.Wait))
{
LogUtil.info(LOGGER, StoreName + "收到二维码【 " + message + "】,设备未启动,不需要发送服务器");
IsScanCode = false;
return;
}
// CodeMsg = "收到二维码【 " + message + "】,发送给服务器获取入库PosID";
LogUtil.info(LOGGER, StoreName + "收到二维码【 " + message + "】,发送给服务器获取入库PosID");
//发送扫码内容到服务器进行入库操作
Operation operation = getLineBoxStatus();
operation.op = 1;
operation.data = new Dictionary<string, string>() { { "code", message }, { "boxId", StoreID.ToString() } };
string server = ConfigAppSettings.GetValue(Setting_Init.http_server);
Operation resultOperation = HttpHelper.Post(StoreManager.GetPostApi(server), operation, false);
if (resultOperation == null)
{
// CodeMsg = "二维码【" + message + "】没有收到服务器反馈";
LogUtil.info(LOGGER, StoreName + "二维码【" + message + "】没有收到服务器反馈!");
IsScanCode = false;
return;
}
else if (!string.IsNullOrEmpty(resultOperation.msg))
{
//如果有提示消息,直接显示提示
LogUtil.info(LOGGER, StoreName + "服务器反馈 二维码【" + message + "】 :" + resultOperation.msg);
IsScanCode = false;
return;
}
IsScanCode = false;
if (resultOperation.op.Equals(1))
{
ReviceInStoreProcess(message, resultOperation);
}
else if (resultOperation.op.Equals(2))
{
ReviceOutStoreProcess(resultOperation);
}
else if (resultOperation.op.Equals(5))
{
ProcessHumidityCMD(resultOperation);
}
else
{
LogUtil.error("收到服务器命令:op=" + resultOperation.op + ",未找到对应处理");
}
}
catch (Exception ex)
{
IsScanCode = false;
LOGGER.Error(StoreName + ex.StackTrace);
}
}
private void ReviceInStoreProcess(string message, Operation resultOperation) private void ReviceInStoreProcess(string message, Operation resultOperation)
{ {
Dictionary<string, string> data = resultOperation.data; Dictionary<string, string> data = resultOperation.data;
...@@ -1286,10 +1211,8 @@ namespace OnlineStore.DeviceLibrary ...@@ -1286,10 +1211,8 @@ namespace OnlineStore.DeviceLibrary
} }
//TODO:判断BOX是否处于可以入库状态,如果调试或急停中,需要返回给服务器; //TODO:判断BOX是否处于可以入库状态,如果调试或急停中,需要返回给服务器;
if (CanStarInOut()) if (CanStarInOut())
{ {
IsScanCode = false; InOutStoreParam param = new InOutStoreParam(message, posId, plateH, plateW, 0);
InOutStoreParam param = new InOutStoreParam(message, posId, plateH, plateW, 0);
StartInStoreMove(param); StartInStoreMove(param);
//如果当前正在出入库中,需要记录下来,等待空闲时执行 //如果当前正在出入库中,需要记录下来,等待空闲时执行
LogUtil.info(LOGGER, StoreName + " 收到服务器入库命令:库位号【" + posId + "】二维码【" + message + "】 开始入库!"); LogUtil.info(LOGGER, StoreName + " 收到服务器入库命令:库位号【" + posId + "】二维码【" + message + "】 开始入库!");
...@@ -1297,10 +1220,9 @@ namespace OnlineStore.DeviceLibrary ...@@ -1297,10 +1220,9 @@ namespace OnlineStore.DeviceLibrary
else else
{ {
LogUtil.info(LOGGER, StoreName + " 收到服务器入库命令:库位号【" + posId + "】二维码【" + message + "】 正在忙碌中,无法入库!"); LogUtil.info(LOGGER, StoreName + " 收到服务器入库命令:库位号【" + posId + "】二维码【" + message + "】 正在忙碌中,无法入库!");
IsScanCode = false;
} }
} }
} }
public void ReviceLineInStoreCMD(string posId, string plateH, string plateW, string message) public void ReviceLineInStoreCMD(string posId, string plateH, string plateW, string message)
...@@ -1310,24 +1232,21 @@ namespace OnlineStore.DeviceLibrary ...@@ -1310,24 +1232,21 @@ namespace OnlineStore.DeviceLibrary
if (position == null) if (position == null)
{ //出入库没有找到服务器发送的库位,需要打印日志方便查询原因 { //出入库没有找到服务器发送的库位,需要打印日志方便查询原因
WarnMsg = "入库未找到库位:二维码【" + message + "】库位【" + posId + "】 "; WarnMsg = "入库未找到库位:二维码【" + message + "】库位【" + posId + "】 ";
LogUtil.error(LOGGER, "收到服务器入库命令:入库未找到库位:二维码【" + message + "】库位【" + posId + "】"); LogUtil.error(LOGGER, "收到流水线入库:入库未找到库位:二维码【" + message + "】库位【" + posId + "】");
LogUtil.info(LOGGER, "收到服务器入库命令:入库未找到库位:二维码【" + message + "】库位【" + posId + "】"); LogUtil.info(LOGGER, "收到流水线入库:入库未找到库位:二维码【" + message + "】库位【" + posId + "】");
return; return;
} }
//TODO:判断BOX是否处于可以入库状态,如果调试或急停中,需要返回给服务器; //TODO:判断BOX是否处于可以入库状态,如果调试或急停中,需要返回给服务器;
if (CanStarInOut()) if (CanStarInOut())
{ {
IsScanCode = false; InOutStoreParam param = new InOutStoreParam(message, posId, plateH, plateW, 0);
InOutStoreParam param = new InOutStoreParam(message, posId, plateH, plateW, 0);
StartInStoreMove(param); StartInStoreMove(param);
//如果当前正在出入库中,需要记录下来,等待空闲时执行 //如果当前正在出入库中,需要记录下来,等待空闲时执行
LogUtil.info(LOGGER, StoreName + " 收到服务器入库命令:库位号【" + posId + "】二维码【" + message + "】 开始入库!"); LogUtil.info(LOGGER, StoreName + " 收到流水线入库:库位号【" + posId + "】二维码【" + message + "】 开始入库!");
} }
else else
{ {
LogUtil.info(LOGGER, StoreName + " 收到服务器入库命令:库位号【" + posId + "】二维码【" + message + "】 正在忙碌中,无法入库!"); LogUtil.info(LOGGER, StoreName + " 收到流水线入库:库位号【" + posId + "】二维码【" + message + "】 正在忙碌中,无法入库!");
IsScanCode = false;
} }
} }
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!