@jan-reitinger can you direct me to some documentation that shows how to actually use Trace() as I could definitely use that for myself too.
Posts made by GeorgeDumitru
-
RE: ASCII Commands Over RS485
-
RE: ASCII Commands Over RS485
@jan-reitinger said in ASCII Commands Over RS485:
buf2double
Hi, the number is not in floating-point format, is actually an int. But what I don't understand is how to use your function What exactly does it take in the argument. I never seen a function taking anything like yours and if I call just double myDouble = buf2double(myBuffer) I expect 100.000 and I get -7.403 669 410 330E-171 . So, how exacttly do i solve this?
-
RE: ASCII Commands Over RS485
Can you please help me with a conversion? I need to interrogate the position of the stepper motor, they have an ascii command I can send to do that, but the response is a 28-bit number. Can you tell me what I can use to get that number from the buffer?
-
RE: ASCII Commands Over RS485
@jan-reitinger said in ASCII Commands Over RS485:
trol statement in the log, use Trace(1,data). If you want the string to output directly, this should work:
That's what I thought, but every time I try to do that I get this as an error:
-
RE: ASCII Commands Over RS485
@jan-reitinger Hi Jan, sorry if I'm being difficult here, but I am just curious, I am receiving a string in the return message. How can i process that to have the string in the output of the block? I managed to get a response from the device, and as long as the response is a single byte, that works just fine, but I am struggling to get a string out of the buffer. Do you have any suggestions?
-
RE: ASCII Commands Over RS485
@jan-reitinger Hi Jan, here is the code of the entire block:
#define COM_BAUDRATE 9600 //baudrate, e.g. 9600, 19200, 57600, 115200 #define COM_PARITY_NONE 0 //no parity #define COM_PARITY_ODD 1 //odd parity #define COM_PARITY_EVEN 2 //even parity #define BUFFER_SIZE 20 // MAXIMUM NUMBER OF BYTES TO SEND #define COMMAND_LENGTH_MAX 20 //maximum length of command //Assigning parameters to variables, these variables are read-only; string parameter(0) serialdevice;//serial device is defined by parameter p0 of the REXLANG Block (e.g. /dev/ttyS0 in Linux or COM1 in Windows) //Assigning inputs to variables bool input(0) IsGreenButtonSignalOn; bool input(1) IsRedButtonSignalOn; bool input(2) IsYellowButtonSignalOn; bool input(3) IsProcedureStandardSignal; //Assigning Variables to Outputs, these variables are WRITE-Only bool output(0) IsDeviceReady; bool output(1) IsDeviceInError; bool output(2) IsDeviceRunning; string output(3) ResponseFromDMX; long output(14) DebugMessage; long output(15) ConnectionStatus; //Variables Declaration const long cr = 13; // (cr) is the termination character, carrige return (0Dh); long hCom, s, receive; // Communication Handle long buffer[BUFFER_SIZE]; // buffer for incoming data long dataCount; // Number of bytes sent bool read = true; string data[BUFFER_SIZE+1]; int status=0; long a; void HomeMotor(void){ long readData[6]; readData[0]='L'; readData[1]='H'; readData[2]='O'; readData[3]='M'; readData[4]='E'; readData[5]='-'; s=Send(hCom,readData,6); return; } void ClearError(void){ a=Write(hCom,"@DMK01EO=1[CR]"); if(a>0){ DebugMessage=a; } else{ DebugMessage=-1; } } void MoveTo1000(void){ a=Write(hCom,"@01J+"); if(a>0){ DebugMessage=a; status=0; } else{ DebugMessage=-1; } } //the init procedure is executed once when the REXLANG function block initializes long init(void) { /* PUT YOUR CODE HERE */ hCom=-1; return 0; } //the main procedure is executed repeatedly (once in each sampling period) long main(void) { /* PUT YOUR CODE HERE */ if(hCom<0) { hCom = OpenCom(serialdevice,COM_BAUDRATE,COM_PARITY_NONE); //Opening Serial Device ConnectionStatus=hCom; } switch(status) { case 0: a=Write(hCom,"@00EO[CR]"); if(a>0){ status=1; } break; case 1: dataCount = Read(hCom, data,BUFFER_SIZE); if(dataCount>0){ if(data=="1"){ ResponseFromDMX="ON"; } else{ ResponseFromDMX="OFF"; } status = 0; } default: break; } return 0; } //the exit procedure is executed once when the task is correctly terminated // (system shutdown, downloading new control algorithm, etc.) long exit(void) { /* PUT YOUR CODE HERE */ if(hCom>=0){ Close(hCom); } return 0; }
-
RE: ASCII Commands Over RS485
@jan-reitinger Hi Jan, the write is successful but the read doesn't return anything. This is where I always have issues. For some reason the read almost always misses the replay from the device.
-
RE: ASCII Commands Over RS485
@jan-reitinger As for why am I using a USB <-> RS-485, it was not my decision. If that is not going to meet my requirements in terms of speed, I will change it, but this is a project I jumped in kind of in the middle, after all the wiring and setup has been completed and I had nothing to say about it.
-
RE: ASCII Commands Over RS485
@jan-reitinger said in ASCII Commands Over RS485:
te command was successful (see the error codes in the REXLANG doc for Write() function). The value of a will be the number of bytes that were written to the device.
Hi Jan, this is amazingly helpful. I just couldn't figure it out from the block documentation. This was exactly the pointer in the right direction I needed. Thank you very much!
-
ASCII Commands Over RS485
Hi I am currently working on a project where I want to use a MonarcoHAT to control a DMX-K-SA-17 stepper motor controller. The two devices are communicating over RS-485 serial com (I Am using a USBtoRS485 connection). The DMX-K-SA-17 can be controlled using ASCII Commands. I have been struggling for a few weeks now to find a proper REXLANG Routine that will allow me to :
a. Send commands in ascii format to the device
b. Get the response of those commands once the command has been sent.Can anyone help me with this?
-
Consuming the API in C# .NET application.
Hello guys,
Can any of you help me understand how to consume the api in a c# .net app? i have tried the httpclient method and all i get is the app saying that the authentication certificate is not valid. do you have any suggestions?
-
Read the y: parameter value on TRND block from the API using a C# .net application
Hi Guys,
Can any of you tell me what should i do to read the value of the TRND block y parameters from an external c#.net application? I keep getting issues trying to access the api through HttpClient by telling me the security certificate is not authentic. Can you please advise on this?
-
Database value as parameter
Hi guys,
Can any of you tell me if it is possible to use a database value as the value of TIMER_ pt? it sort of works with "refresh_from" in WebBuDi" but i still need to push enter to actually have it using it as the value of the TIMER_ pt. Is there any way of forcing that automatically?
Thank you for your support.
-
REX.HMI.WebBuDi
Hi everybody,
Does any of you how to use a single input pox in the WebBuDi to set the pt for 3 different timers? I tried to look it up in the manuals but i couldn't find anything. does any of you have any idea if it is at least possible?