Commit 88520123 几米阳光

伺服部分代码修改

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