Commit 88520123 几米阳光

伺服部分代码修改

1 个父辈 2a6014dc
...@@ -212,7 +212,7 @@ namespace ACServoDriveTest ...@@ -212,7 +212,7 @@ namespace ACServoDriveTest
private void button2_Click(object sender, EventArgs e) private void button2_Click(object sender, EventArgs e)
{ {
ACServerManager.OpenSTB(GetPortName(), GetSlaveAddr()); ACServerManager.OpenAndCloseSTB(GetPortName(), GetSlaveAddr());
//OpenSTB(); //OpenSTB();
} }
......
...@@ -13,6 +13,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -13,6 +13,7 @@ namespace OnlineStore.DeviceLibrary
/// </summary> /// </summary>
public partial class ACServerManager public partial class ACServerManager
{ {
private static int SleepMSendons = 10;
public static bool OpenPort(string portName) public static bool OpenPort(string portName)
{ {
if (serialBeanMap.ContainsKey(portName)) if (serialBeanMap.ContainsKey(portName))
...@@ -95,66 +96,51 @@ namespace OnlineStore.DeviceLibrary ...@@ -95,66 +96,51 @@ namespace OnlineStore.DeviceLibrary
{ {
LogUtil.info("开始初始化伺服【" + portName + "】【" + slvAddr + "】"); LogUtil.info("开始初始化伺服【" + portName + "】【" + slvAddr + "】");
//写入block //写入block
int sleep = 5;
string slvAddrStr = string.Format(strFromat, slvAddr); string slvAddrStr = string.Format(strFromat, slvAddr);
//block0=原点返回,正方向 //block0=原点返回,正方向
string str0 = slvAddrStr + "104800 000408 00000420 00000000 ffff"; string str0 = slvAddrStr + "104800 000408 00000420 00000000 ffff";
SendStr(portName, str0); SendStrAndSleep(portName, str0);
Thread.Sleep(sleep);
//block1=原点返回,反方向 //block1=原点返回,反方向
string str1 = slvAddrStr + "104804 000408 04000420 00000000 ffff"; string str1 = slvAddrStr + "104804 000408 04000420 00000000 ffff";
SendStr(portName, str1); SendStrAndSleep(portName, str1);
Thread.Sleep(sleep);
//block2=绝对位置运动 //block2=绝对位置运动
string str2 = slvAddrStr + "104808 000408 10000211EC78FFFF ffff"; string str2 = slvAddrStr + "104808 000408 10000211EC78FFFF ffff";
SendStr(portName, str2); SendStrAndSleep(portName, str2);
Thread.Sleep(sleep);
//block3=相对位置运动 //block3=相对位置运动
string str3 = slvAddrStr + "10480C 000408 10000111EC78FFFF ffff"; string str3 = slvAddrStr + "10480C 000408 10000111EC78FFFF ffff";
SendStr(portName, str3); SendStrAndSleep(portName, str3);
Thread.Sleep(sleep);
//block4=正方向匀速运动 //block4=正方向匀速运动
string str4 = slvAddrStr + "104810 000408 10000311 00000000 ffff"; string str4 = slvAddrStr + "104810 000408 10000311 00000000 ffff";
SendStr(portName, str4); SendStrAndSleep(portName, str4);
Thread.Sleep(sleep);
//block5=反方向匀速运动 //block5=反方向匀速运动
string str5 = slvAddrStr + "104814 000408 14000311 00000000 ffff"; string str5 = slvAddrStr + "104814 000408 14000311 00000000 ffff";
SendStr(portName, str5); SendStrAndSleep(portName, str5);
Thread.Sleep(sleep);
//block6=减速停止 //block6=减速停止
string str6 = slvAddrStr + "104818 000408 00000500 00000000 ffff"; string str6 = slvAddrStr + "104818 000408 00000500 00000000 ffff";
SendStr(portName, str6); SendStrAndSleep(portName, str6);
Thread.Sleep(sleep);
//block7=紧急停止 //block7=紧急停止
string str7 = slvAddrStr + "10481c 000408 00000510 00000000 ffff"; string str7 = slvAddrStr + "10481c 000408 00000510 00000000 ffff";
SendStr(portName, str7); SendStrAndSleep(portName, str7);
Thread.Sleep(sleep);
//0106460001009D12 //0106460001009D12
//速度 V1 =100 //速度 V1 =100
string v1 = slvAddrStr + "064601 " + SpeedToStr(targetSpeed, 4) + " ffff"; string v1 = slvAddrStr + "064601 " + SpeedToStr(targetSpeed, 4) + " ffff";
SendStr(portName, v1); SendStrAndSleep(portName, v1);
Thread.Sleep(sleep);
//加速度 A1 =30 //加速度 A1 =30
string a1 = slvAddrStr + "064611 " + SpeedToStr(addSpeed, 4) + " ffff"; string a1 = slvAddrStr + "064611 " + SpeedToStr(addSpeed, 4) + " ffff";
SendStr(portName, a1); SendStrAndSleep(portName, a1);
Thread.Sleep(sleep);
//减速度 D1=30 //减速度 D1=30
string d1 = slvAddrStr + "064621 " + SpeedToStr(delSpeed, 4) + " ffff"; string d1 = slvAddrStr + "064621 " + SpeedToStr(delSpeed, 4) + " ffff";
SendStr(portName, d1); SendStrAndSleep(portName, d1);
Thread.Sleep(sleep);
//原点返回高速 homeHighSpeed=100 //原点返回高速 homeHighSpeed=100
SendStr(portName, slvAddrStr + "06 4637 " + SpeedToStr(homeHighSpeed, 4) + " ffff"); SendStrAndSleep(portName, slvAddrStr + "06 4637 " + SpeedToStr(homeHighSpeed, 4) + " ffff");
Thread.Sleep(sleep);
//原点返回抵速 homeLowSpeed=50 //原点返回抵速 homeLowSpeed=50
SendStr(portName, slvAddrStr + "06 4638 " + SpeedToStr(homeLowSpeed, 4) + " ffff"); SendStrAndSleep(portName, slvAddrStr + "06 4638 " + SpeedToStr(homeLowSpeed, 4) + " ffff");
Thread.Sleep(sleep);
//原点返回加速度=30 //原点返回加速度=30
SendStr(portName, slvAddrStr + "06 4639 " + SpeedToStr(homeAddSpeed, 4) + " ffff"); SendStrAndSleep(portName, slvAddrStr + "06 4639 " + SpeedToStr(homeAddSpeed, 4) + " ffff");
Thread.Sleep(sleep);
UpdateEEPROM(portName, slvAddr); UpdateEEPROM(portName, slvAddr);
} }
public static void UpdateEEPROM(string portName, int slvAddr) public static void UpdateEEPROM(string portName, int slvAddr)
...@@ -191,7 +177,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -191,7 +177,7 @@ namespace OnlineStore.DeviceLibrary
//先更新速度 //先更新速度
string slvAddrStr = string.Format(strFromat, slvAddr); string slvAddrStr = string.Format(strFromat, slvAddr);
string v1 = slvAddrStr + "064601 " + SpeedToStr(targetSpeed, 4) + " ffff"; string v1 = slvAddrStr + "064601 " + SpeedToStr(targetSpeed, 4) + " ffff";
SendStr(portName, v1); SendStrAndSleep(portName, v1);
RelMove(portName, slvAddr, position); RelMove(portName, slvAddr, position);
} }
...@@ -234,23 +220,23 @@ namespace OnlineStore.DeviceLibrary ...@@ -234,23 +220,23 @@ 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(100); System.Threading.Thread.Sleep(SleepMSendons);
//运动 //运动
data = ACCMDManager.GetWriteData(slvAddr, 06, ACCMDManager.BlockNo, ACCMDManager.Block_RelMove, 2); data = ACCMDManager.GetWriteData(slvAddr, 06, ACCMDManager.BlockNo, ACCMDManager.Block_RelMove, 2);
SendData(portName, data); SendData(portName, data);
Thread.Sleep(100); //Thread.Sleep(100);
OpenSTB(portName, slvAddr); OpenAndCloseSTB(portName, slvAddr);
} }
public static void HomeMove(string portName, int slvAddr, int speed) public static void HomeMove(string portName, int slvAddr, int speed)
{ {
byte[] date = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteRegisters, "4637", string.Format("{0:X2}", Math.Abs(speed)), 1); byte[] date = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteRegisters, "4637", string.Format("{0:X2}", Math.Abs(speed)), 1);
SendData(portName, date); SendData(portName, date);
Thread.Sleep(100); Thread.Sleep(SleepMSendons);
date = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteRegisters, "4638", string.Format("{0:X2}", Math.Abs(speed / 2)), 1); date = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteRegisters, "4638", string.Format("{0:X2}", Math.Abs(speed / 2)), 1);
SendData(portName, date); SendData(portName, date);
Thread.Sleep(100); Thread.Sleep(SleepMSendons);
//if (speed > 0) //if (speed > 0)
//{ //{
//byte[] data = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteRegisters, ACCMDManager.BlockNo, ACCMDManager.Block_HomeMove0, 2); //byte[] data = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteRegisters, ACCMDManager.BlockNo, ACCMDManager.Block_HomeMove0, 2);
...@@ -262,15 +248,15 @@ namespace OnlineStore.DeviceLibrary ...@@ -262,15 +248,15 @@ namespace OnlineStore.DeviceLibrary
SendData(portName, data); SendData(portName, data);
//} //}
Thread.Sleep(100); //Thread.Sleep(100);
OpenSTB(portName, slvAddr); OpenAndCloseSTB(portName, slvAddr);
} }
public static void SpeedMove(string portName, int slvAddr, int speed) public static void SpeedMove(string portName, int slvAddr, int speed)
{ {
byte[] data = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteRegisters, "4601", string.Format("{0:X2}", Math.Abs(speed)), 2); byte[] data = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteRegisters, "4601", string.Format("{0:X2}", Math.Abs(speed)), 2);
SendData(portName, data); SendData(portName, data);
Thread.Sleep(100); Thread.Sleep(SleepMSendons);
if (speed > 0) if (speed > 0)
{ {
data = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteRegisters, ACCMDManager.BlockNo, ACCMDManager.Block_VolMove0, 2); data = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteRegisters, ACCMDManager.BlockNo, ACCMDManager.Block_VolMove0, 2);
...@@ -281,8 +267,8 @@ namespace OnlineStore.DeviceLibrary ...@@ -281,8 +267,8 @@ namespace OnlineStore.DeviceLibrary
data = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteRegisters, ACCMDManager.BlockNo, ACCMDManager.Block_VolMove1, 2); data = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteRegisters, ACCMDManager.BlockNo, ACCMDManager.Block_VolMove1, 2);
SendData(portName, data); SendData(portName, data);
} }
Thread.Sleep(100); //Thread.Sleep(100);
OpenSTB(portName, slvAddr); OpenAndCloseSTB(portName, slvAddr);
} }
public static void AbsMove(string portName, int slvAddr, int targetPosition, int targetSpeed) public static void AbsMove(string portName, int slvAddr, int targetPosition, int targetSpeed)
{ {
...@@ -291,7 +277,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -291,7 +277,7 @@ namespace OnlineStore.DeviceLibrary
//0106460001009D12 //0106460001009D12
//速度 V1 =100 //速度 V1 =100
string v1 = slvAddrStr + "064601 " + SpeedToStr(targetSpeed, 4) + " ffff"; string v1 = slvAddrStr + "064601 " + SpeedToStr(targetSpeed, 4) + " ffff";
SendStr(portName, v1); SendStrAndSleep(portName, v1);
//绝对运动 //绝对运动
AbsMove(portName, slvAddr, targetPosition); AbsMove(portName, slvAddr, targetPosition);
...@@ -335,11 +321,11 @@ namespace OnlineStore.DeviceLibrary ...@@ -335,11 +321,11 @@ 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(100); System.Threading.Thread.Sleep(SleepMSendons);
data = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteRegisters, ACCMDManager.BlockNo, ACCMDManager.Block_AbsMove, 2); data = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteRegisters, ACCMDManager.BlockNo, ACCMDManager.Block_AbsMove, 2);
SendData(portName, data); SendData(portName, data);
Thread.Sleep(100); Thread.Sleep(SleepMSendons);
OpenSTB(portName, slvAddr); OpenAndCloseSTB(portName, slvAddr);
} }
} }
} }
...@@ -41,16 +41,23 @@ namespace OnlineStore.DeviceLibrary ...@@ -41,16 +41,23 @@ namespace OnlineStore.DeviceLibrary
byte[] data2 = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteCoil, ACCMDManager.STB_Addr, "ff00", 2); byte[] data2 = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteCoil, ACCMDManager.STB_Addr, "ff00", 2);
SendData(portName, data2); SendData(portName, data2);
} }
public static void SendStr(string portName, string str) public static void SendStrAndSleep(string portName, string str)
{ {
byte[] data = SerialBean.StringToByte(str); byte[] data = SerialBean.StringToByte(str);
data[data.Length - 1] = 0x00; data[data.Length - 1] = 0x00;
data[data.Length - 2] = 0x00; data[data.Length - 2] = 0x00;
data = ACCMDManager.buildCheckData(data, data.Length - 2); data = ACCMDManager.buildCheckData(data, data.Length - 2);
SendData(portName, data); SendData(portName, data);
System.Threading.Thread.Sleep(100); System.Threading.Thread.Sleep(SleepMSendons);
}
public static void SendStr(string portName, string str)
{
byte[] data = SerialBean.StringToByte(str);
data[data.Length - 1] = 0x00;
data[data.Length - 2] = 0x00;
data = ACCMDManager.buildCheckData(data, data.Length - 2);
SendData(portName, data);
} }
private static void DataReceived(string portName, object sender, SerialDataReceivedEventArgs e, byte[] bits) private static void DataReceived(string portName, object sender, SerialDataReceivedEventArgs e, byte[] bits)
{ {
string strSend = ""; string strSend = "";
...@@ -301,26 +308,26 @@ namespace OnlineStore.DeviceLibrary ...@@ -301,26 +308,26 @@ namespace OnlineStore.DeviceLibrary
SendData(portName, dataArray); SendData(portName, dataArray);
} }
public static void OpenSTB(string portName, int slvAddr) public static void OpenAndCloseSTB(string portName, int slvAddr)
{
OnlyOpenSTB(portName, slvAddr);
System.Threading.Thread.Sleep(100);
CloseSTB(portName, slvAddr);
}
public static void OnlyOpenSTB(string portName, int slvAddr)
{ {
string addr = ACCMDManager.STB_Addr; string addr = ACCMDManager.STB_Addr;
string data = "FF00"; string data = "FF00";
//byte cmd = 0x05;
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);
data = "0000";
dataArray = ACCMDManager.GetWriteData(slvAddr, ACCMDManager.CMD_WriteCoil, addr, data, length);
SendData(portName, dataArray);
} }
public static void CloseSTB(string portName, int slvAddr) public static void CloseSTB(string portName, int slvAddr)
{ {
string addr = ACCMDManager.STB_Addr; string addr = ACCMDManager.STB_Addr;
string data = "0000"; string data = "0000";
//byte cmd = 0x05;
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);
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!