I'm looking for general guidance here because I realize every serial device will be slightly different. I'm just not sure if I'm in the correct ballpark in my approach.
My environment/setup: I've got a CAS PD-II scale connected via USB (USB 2.0 Type A to Type B) to a Linux machine running Node-RED with the node-red-node-serialport palette installed.
My goal: I want to either receive a constant stream of weight value updates from the scale or make a request to the scale (if appropriate) to get the current weight value.
According to the CAS documentation and from what I've seen on support blogs, it appears I may need to send a request with a "W" character to start receiving the weight output from the scale. So I've set up a basic flow to inject that "W" character which seems to be working except a) the response doesn't make any sense, and b) I'm not getting any other messages from the scale with the weight output.
The CAS documentation seems to contradict itself on the required baud rate and other settings, but I've tried with different Baud Rate, Data Bits and Parity settings on the NR side, and the CAS also has preconfigured "Type" settings that I've tried to no success.
Before I seek to test every possible permutation of these settings, I wanted to see if the NR community had any similar experience that may help. Thank you in advance!
If it requires a "I'm ready" type message (W), the Request/Response node setup is not likely the one you need. I could be wrong, but the Request Serial Node will do 1:1 matching...
Send/Receive
Send/Receive
Send/Receive
Send/Receive
I would...
Use a serial out node to send the W (it might be worth sending a new line character here also)
Use a serial In node to read from the resulting stream of measures
Both nodes will use the same connection.
The output you see looks like binary:
Try the below settings - it may be the weight in bytes you are seeing.
The split allows it to settle before "dumping the payload"
but if the measuring is constant you may be get overlapped payloads, so if you know of a "termination" character that is included you can use "on the character" instead.
Thanks, @marcus-j-davies. I tried all of your suggestions - and they make sense to me - but I'm still not getting anything useful out of the scale. Your thought about sending the new line character at the start prompted me to check the CAS documentation again.
I'm still confused by the documentation referring specifically to RS-232C interface when I'm using the USB connection. They're both serial, but does it make a difference in the type of commands being sent or received?
The CAS docs refer to a "Type-3" interface for continual RS-232C based on the following command and response protocol:
And this note which seems pretty clear that the newline will actually stop the transmission of data, but it never seems to start at all with what I've tried so far:
Joking aside, many device manufactures simply bolt in a USB-serial convertor in side their product so it is essentially is a serial device. From the POV on Node-RED there is no difference - just make sure you select the correct device in the config.
It is not clear what W is. It mentions <W> and W<57H> and it is unclear if STX/ETC should be provided.
Can you link to the manual?
I would probably try sending various combinations like W, <STX>W, <STX>W<ETX> etc. I would also reset the device and Node-RED between attempts (to clear any buffered comms)
Ok, that is very helpful and good to know about the internal converter.
I agree it is not super clear, but I will try sending the commands more explicit according to their documentation and see what happens.
Progress - @Steve-Mcl your suggestion of resetting the device definitely helped. I'm now sending the W command as I have in the past, and now I'm receiving a steady stream of information from the scale.
I believe <57H> is just a reference to hex value of the W character if that's how the command must be sent. In my case, I'm just sending the ASCII. However, sending \n does not seem to stop the flow of data from the scale as expected.
I also need to figure out how to convert the data I'm receiving from the scale into something meaningful.
The puzzle pieces finally came together! High fives all around!
Specific to this CAS PD-II scale, I switched to "Type-2" interface. Still not sure what this actually controls, but this allowed me to make a command and receive an immediate, single response containing the value currently displayed by the scale.
Going back to the CAS documentation, <STX> refers to the "Start of Text" ASCII character (hex value of 02, which I am simply removing from the response. The docs also refer to <CR> as the end of the message coming from the scale; however it literally translates into both characters of Carriage Return and Line Feed (ASCII values of 13 and 10, respectively). This is likely what I would have to send to the scale if it's in Type-3 mode to stop the data feed, but I think I'm good with this implementation.
Once I get the value, I am just formatting it to the appropriate decimal value. I am going to try the serial request node again to see if I can simplify the flow a bit, but the following shows a working flow: