using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using I8124_CE6; using System.Threading; namespace Demo1_CSharp { public partial class Form1 : Form { byte cSlot; delegate void UpdateUICallback(); Thread I8124_Thread; private volatile bool _IsStopUIThread = false; Mutex MyMutex = new Mutex(); public Form1() { InitializeComponent(); //I8124SDK.I8124_ActiveModule(); ComboBox_Slot.SelectedIndex = 0; cSlot = 0; //UI Thread I8124_Thread = new Thread(new ThreadStart(I8124_WorkerObject)); } private void Form1_Closed(object sender, EventArgs e) { _IsStopUIThread = true; I8124_Thread.Abort(); I8124_Thread.Join(); I8124SDK.I8124_CloseModule(cSlot); } private void Button_GetFirmwareVer_Click(object sender, EventArgs e) { UInt32 Ret; Ret = I8124SDK.I8124_GetFirmwareVersion(cSlot); MessageBox.Show("The I-8124 Firmware version is " + Convert.ToString(Ret,16)); } private void Button_MasterID_Click(object sender, EventArgs e) { UInt32 MasterID; MasterID = I8124SDK.I8124_GetMasterMACID(cSlot); if (MasterID >= 64) { MessageBox.Show("Get Master ID Error(" + Convert.ToString(MasterID) + ")!"); return; } ComboBox_MasterID.SelectedIndex = Convert.ToInt32(MasterID); } private void Button_SetMasterID_Click(object sender, EventArgs e) { UInt32 MasterID,Ret; MasterID = Convert.ToByte(ComboBox_MasterID.SelectedIndex); Ret = I8124SDK.I8124_SetMasterMACID(cSlot, Convert.ToByte(MasterID)); if (Ret != 0) MessageBox.Show("Set Master ID Error(" + Convert.ToString(Ret) + ")!"); else MessageBox.Show("Set Master ID OK!"); } private void Button_BaudRate_Click(object sender, EventArgs e) { UInt32 BaudRate; BaudRate = I8124SDK.I8124_GetBaudRate(cSlot); if (BaudRate >= 3) { MessageBox.Show("Get Baud Rate Error(" + Convert.ToString(BaudRate) + ")!"); return; } ComboBox_BaudRate.SelectedIndex = Convert.ToInt32(BaudRate); } private void Button_SetBaudRate_Click(object sender, EventArgs e) { UInt32 BaudRate, Ret; BaudRate = Convert.ToByte(ComboBox_BaudRate.SelectedIndex); Ret = I8124SDK.I8124_SetBaudRate(cSlot, Convert.ToByte(BaudRate)); if (Ret != 0) MessageBox.Show("Set BaudRate Error(" + Convert.ToString(Ret) + ")!"); else MessageBox.Show("Set BaudRate OK!"); } private void Button_ResetFirmware_Click(object sender, EventArgs e) { I8124SDK.I8124_ResetFirmware(cSlot); } private void Button_SearchAllSlave_Click(object sender, EventArgs e) { UInt32 Ret; Ret = I8124SDK.I8124_SearchAllDevices(cSlot); if(Ret != 0) MessageBox.Show("Search All Slaves Error(" + Convert.ToString(Ret) + ")!"); else MessageBox.Show("Start to search all slave devices!\r\n Please wait for about 30 seconds!"); } private void button_Active_Click(object sender, EventArgs e) { uint Ret; cSlot = Convert.ToByte(ComboBox_Slot.SelectedIndex); cSlot++; Ret = I8124SDK.I8124_ActiveModule(cSlot); if (Ret != 0) { MessageBox.Show("Active Error : " + Ret.ToString()); return; } else MessageBox.Show("Active OK"); timer2.Enabled = true; } private void button_startalldevice_Click(object sender, EventArgs e) { uint Ret = 0; Ret = I8124SDK.I8124_StartAllDevice(cSlot); if (Ret != 0) { MessageBox.Show("Start All Devices Error : " + Ret.ToString()); return; } else { MessageBox.Show("Start All Devices OK"); I8124_Thread.Start(); } } private void I8124_WorkerObject() { UpdateUICallback SyncUI = new UpdateUICallback(UpdateI8124ByThread); while (!_IsStopUIThread) { Invoke(SyncUI, null); Thread.Sleep(200); } } //========================================================== //========================================================== void UpdateI8124ByThread() { byte[] SlaveList = { (byte)1, (byte)40, (byte)42, (byte)44, (byte)46, (byte)53 }; int SlaveNo = SlaveList.Length; byte[] IOData = new byte[100]; uint Ret; ushort i, Counter, Len = 0; string MSG; for (Counter = 0; Counter < SlaveNo; Counter++) { MyMutex.WaitOne(); Ret = ReadFunc1(cSlot, SlaveList[Counter], 1, ref Len, IOData); MyMutex.ReleaseMutex(); //Ret = I8124SDK.I8124_ReadInputData(cSlot, SlaveList[Counter], 1, ref Len, IOData); if (Ret != 0) MSG = "Error : " + Ret.ToString(); else { MSG = ""; for (i = 0; i < Len; i++) MSG += IOData[i].ToString("X") + ","; } switch (Counter) { case 0: label_ID0.Text = "ID_" + SlaveList[Counter].ToString(); Label_IO0.Text = MSG; break; case 1: label_ID1.Text = "ID_" + SlaveList[Counter].ToString(); Label_IO1.Text = MSG; break; case 2: label_ID2.Text = "ID_" + SlaveList[Counter].ToString(); Label_IO2.Text = MSG; break; case 3: label_ID3.Text = "ID_" + SlaveList[Counter].ToString(); label_IO3.Text = MSG; break; case 4: label_ID4.Text = "ID_" + SlaveList[Counter].ToString(); label_IO4.Text = MSG; break; case 5: label_ID5.Text = "ID_" + SlaveList[Counter].ToString(); label_IO5.Text = MSG; break; case 6: label_ID6.Text = "ID_" + SlaveList[Counter].ToString(); label_IO6.Text = MSG; break; case 7: label_ID7.Text = "ID_" + SlaveList[Counter].ToString(); label_IO7.Text = MSG; break; case 8: label_ID8.Text = "ID_" + SlaveList[Counter].ToString(); label_IO8.Text = MSG; break; } //----------------------------------------------------- //----------------------------------------------------- MyMutex.WaitOne(); Ret = ReadbackFunc1(cSlot, SlaveList[Counter], 1, ref Len, IOData); MyMutex.ReleaseMutex(); //Ret = I8124SDK.I8124_ReadbackOutputData(cSlot, SlaveList[Counter], 1, ref Len, IOData); if (Ret != 0) MSG = "Error : " + Ret.ToString(); else { MSG = ""; for (i = 0; i < Len; i++) MSG += IOData[i].ToString("X") + ","; } switch (Counter) { case 0: label_BackID0.Text = "ID_" + SlaveList[Counter].ToString(); label_BackIO0.Text = MSG; break; case 1: label_BackID1.Text = "ID_" + SlaveList[Counter].ToString(); label_BackIO1.Text = MSG; break; case 2: label_BackID2.Text = "ID_" + SlaveList[Counter].ToString(); label_BackIO2.Text = MSG; break; case 3: label_BackID3.Text = "ID_" + SlaveList[Counter].ToString(); label_BackIO3.Text = MSG; break; case 4: label_BackID4.Text = "ID_" + SlaveList[Counter].ToString(); label_BackIO4.Text = MSG; break; case 5: label_BackID5.Text = "ID_" + SlaveList[Counter].ToString(); label_BackIO5.Text = MSG; break; case 6: label_BackID6.Text = "ID_" + SlaveList[Counter].ToString(); label_BackIO6.Text = MSG; break; case 7: label_BackID7.Text = "ID_" + SlaveList[Counter].ToString(); label_BackIO7.Text = MSG; break; case 8: label_BackID8.Text = "ID_" + SlaveList[Counter].ToString(); label_BackIO8.Text = MSG; break; } } } uint ReadFunc1(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadFunc2(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadFunc2(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadFunc3(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadFunc3(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadFunc4(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadFunc4(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadFunc5(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadFunc5(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadFunc6(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadFunc6(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadFunc7(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadFunc7(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadFunc8(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadFunc8(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadFunc9(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadFunc9(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadFunc10(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadFunc10(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return I8124SDK.I8124_ReadInputData(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadbackFunc1(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadbackFunc2(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadbackFunc2(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadbackFunc3(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadbackFunc3(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadbackFunc4(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadbackFunc4(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadbackFunc5(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadbackFunc5(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadbackFunc6(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadbackFunc6(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadbackFunc7(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadbackFunc7(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadbackFunc8(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadbackFunc8(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadbackFunc9(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadbackFunc9(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadbackFunc10(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadbackFunc10(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return ReadbackFunc11(cSlot, DesMACID, ConType, ref IOLen, IODATA); } uint ReadbackFunc11(byte cSlot, byte DesMACID, byte ConType, ref ushort IOLen, byte[] IODATA) { return I8124SDK.I8124_ReadbackOutputData(cSlot, DesMACID, ConType, ref IOLen, IODATA); } private void timer2_Tick(object sender, EventArgs e) { MyMutex.WaitOne(); label_status.Text = "Status: " +I8124SDK.I8124_GetMasterStatus(cSlot).ToString(); MyMutex.ReleaseMutex(); } private void button1_Click(object sender, EventArgs e) { I8124_Thread.Start(); } byte flag = 1; private void button2_Click(object sender, EventArgs e) { byte[] SlaveList = { (byte)1, (byte)40, (byte)42, (byte)44, (byte)46, (byte)53 }; ushort[] SlaveDOLen = { 50,1, 3, 5, 4, 1 }; int SlaveNo = SlaveList.Length; byte[] IOData = new byte[100]; uint Ret; ushort i; if (flag == 1) { for (i = 0; i < 100; i++) IOData[i] = 0xFF; flag = 0; } else { for (i = 0; i < 100; i++) IOData[i] = 0x00; flag = 1; } for (i = 0; i < SlaveNo; i++) { Ret = I8124SDK.I8124_WriteOutputData(cSlot, SlaveList[i], 1, SlaveDOLen[i], IOData); if (Ret != 0) MessageBox.Show("Error :" + Ret.ToString()); } } } }